Язык Паскаль

Автор работы: Пользователь скрыл имя, 09 Февраля 2013 в 13:02, лекция

Описание

Первая версия языка Паскаль была разработана швейцарским ученым Никлаусом Виртом в 1968 году. Первоначально язык предназначался для целей обучения, поскольку он является достаточно детерминированным, т.е. все подчиняется определенным правилам, исключений из которых не так много. Основные характеристики: относительно небольшое количество базовых понятий, простой синтаксис, быстрый компилятор для перевода исходных текстов в машинный код.

Работа состоит из  1 файл

Лекции по Паскалю.doc

— 133.00 Кб (Скачать документ)

Круглые скобки используются для изменения  порядка вычисления частей выражения. Выражения без скобок вычисляются  в порядке, соответствующем приоритету операций. Приоритеты расставлены таким образом:

  • вычисления в круглых скобках;
  • вычисление значений функций;
  • унарные операции ( not,+,- );
  • операции типа умножения ( *,/,div,mod,and );
  • операции типа сложения ( +,-, or, xor );
  • операции отношения ( =, <>, <, >, <=, >= ).

В логическом выражении 2<=4 and 5>3 Паскаль выдаст ошибку, поскольку операция and будет выполнена раньше операций сравнения. Верная запись - (2<=4) and (5>3).

СОВМЕСТИМОСТЬ ТИПОВ ДАННЫХ

Когда в операциях или операторах вашей программы присутствуют данные разных типов, то встает вопрос об их совместимости. В языке Турбо Паскаль этому вопросу уделяется очень большое внимание, разработаны строгие правила, определяющие идентичность, совместимость в общем случае и совместимость по присваиванию различных типов.

Нам в начале курса достаточно помнить следующее. Переменные или выражения одного типа являются полностью совместимыми. Другим понятием является совместимость по присваиванию. Присваивание переменной одного типа выражения другого типа допустимо в том случае, когда множество значений второго типа является подмножеством значений первого. Например, результат сложения двух целых переменных типа integer и word может присваиваться в целую переменную, тип которой только longint, поскольку только этот целый тип содержит в себе весь возможный диапазон значений как для типа integer, так и для типа word. Также, можно присваивать целое выражение в вещественную переменную или символьное выражение в строку.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПЕРЕЧИСЛЯЕМЫЙ ТИП

Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение должно являться идентификатором и располагаться в круглых скобках через запятую. Количество элементов в перечислении не более 65536. Вводить и выводить переменные перечисляемого типа запрещено. Перечислимый тип является порядковым (смотри главу Типы данных), поэтому к переменным такого типа можно применять функции Ord, Pred, Succ. Функция Ord возвращает порядковый номер значения начиная с нуля.

ПРИМЕР: Объявление перечисляемых типов.

Type Colors = (Red,Green,Blue);

Numbers = (Zero,One,Two,Three,Four,Five);

var  c:Colors;  n:Numbers;

begin

c:=Red;   write(Ord(c));  {0}

n:=Four;   write(Ord(n));  {4}

c:=Succ(c);  {c=Green}

for n:=One to Five do  write(Ord(n));  {12345}

end.

Следует отметить, что  стандартные типы byte, word, char и boolean также можно считать вариантами перечислимого типа.

ОГРАНИЧЕННЫЙ  ТИП (ТИП-ДИАПАЗОН)

Тип-диапазон также называют ограниченным или интервальным типом. Он является подмножеством своего базового типа, в качестве которого может выступать любой порядковый тип кроме типа-диапазона. Тип-диапазон наследует все свойства своего базового типа. Имеются две стандартные функции, работающие с этим типом: High(x)- возвращает максимальное значение типа-диапазона, к которому принадлежит переменная x; Low(x) - возвращает минимальное значение.

ПРИМЕР: Объявление типа-диапазон.

type  Numbers = (Zero,One,Two,Three,Four,Five);

Num = Two .. Four; {диапазон на базе типа Numbers}

Abc = 'A' .. 'z'; {все английские  буквы : диапазон на базе типа Char}

Digits = 0 .. 9; {цифры} 

var  n:Num;  c,d:Abc;  x:integer;

begin

n:=Four;  writeln(Ord(n));  {4  как в базовом типе}

n:=Succ(n); { ОШИБКА (следующее  значение вне диапазона)}

read(c,d);

if c=d then write('одинаковые буквы');

writeln(Low(c),' .. ',High(c)); { A .. z }

writeln(Low(x),' .. ',High(x)); { -32768 .. 32767 }

end.

В тексте программы на Турбо Паскале  могут встречаться директивы  компилятору, которые также называют опциями. Опции {$R+} и {$R-} позволяют включать и отключать проверку соблюдения границ при работе с диапазонами. Когда проверка включена, при нарушении границ диапазонов происходит аварийное завершение работы программы. В другом случае ответственность за возможные ошибки лежит на программисте.

 

 

 

 

 

 

 

 

 

 

ПРОСТЫЕ ОПЕРАТОРЫ

ПУСТОЙ И СОСТАВНОЙ  ОПЕРАТОРЫ

В программе может применяться  пустой оператор, не выполняющий никакого действия. Он представляет собой точку с запятой.

Составным оператором считается последовательность произвольных операторов, заключенная  в операторные скобки - зарезервированные  слова begin ... end. Допускается произвольная глубина вложенности составных операторов. Составной оператор применяется там, где по синтаксическим правилам языка может стоять только один оператор, а нам надо выполнить несколько действий. В этом случае набор необходимых команд должен быть оформлен как составной оператор. По сути, все тело программы представляет собой один составной оператор.

ОПЕРАТОР ПРИСВАИВАНИЯ

Оператор присваивания используется для задания значения переменных и имеет следующий синтаксис:

имя_переменной := выражение;

Вычисляется выражение, стоящее в правой части оператора, после чего его значение записывается в переменную, имя которой стоит слева. Тип выражения и тип переменной должны быть совместимы, т.е. множество допустимых значений для типа выражения содержится во множестве допустимых значений для типа переменной.

ПРОСТЕЙШИЙ ВВОД И  ВЫВОД

Рассмотрим простейшие процедуры  ввода и вывода. По умолчанию ввод осуществляется с клавиатуры, а вывод  на экран. К операторам ввода относятся:

Read(<список переменных через запятую>);

                                  Readln(<список переменных>);

                                  Readln;

Второй отличается от первого тем, что после ввода переводит  курсор на новую строку, точнее, в  конце своей работы считывает  с клавиатуры код клавиши <Enter>. Третий оператор используется для организации паузы - выполнение программы продолжится, как правило, только после нажатия на клавиатуре клавиши <Enter>. К операторам вывода относятся:

Write(<список вывода>);

  Writeln(<список вывода>);

                                                  Writeln;

В списке вывода кроме имен переменных можно писать строковые константы (последовательность символов в апострофах) и даже выражения (выводятся их значения). Второй оператор отличается от первого  тем, что после вывода переводит курсор на новую строку. Третий оператор просто переводит курсор на новую строку.

Существует так называемый форматированный  вывод. Можно задать количество позиций, отводимых под число. Для целых - после выражения или переменной через двоеточие указывается меньше какого количества позиций не может быть выделено значению. Для вещественных - дополнительно через двоеточие можно указать количество цифр в дробной части. При этом происходит округление в ближнюю сторону.

ПРИМЕР: Простые вычисления.

program vvod_vyvod;

const  n=1.5;

var  y1,y2:real;  x:byte;

begin

writeln('Введите натуральное число <= 255');

readln(x);

y1:=cos(n); y2:=cos(x);

write('Зачем-то посчитали: ');

writeln('n=',n,' y1=',y1:7:4, cos(Pi/2):8:4);

{напечатается 

Зачем-то посчитали: n= 1.50000000000000E+0000

y1= 0.0707 1.0000} 

writeln('x=',x:3,' y2=',y2:7:4);

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОПЕРАТОР ПЕРЕХОДА

Оператор перехода имеет вид:

GOTO <метка>;

Он позволяет передать управление непосредственно на нужный оператор программы. Перед этим оператором должна располагаться метка отделенная от него двоеточием. В Турбо Паскале в качестве меток выступают либо целые числа от 0 до 9999, либо идентификаторы. Все метки должны быть описаны в разделе объявления меток следующим образом:

Label <список меток через запятую>;

Каждой меткой в программе может  быть помечен только один оператор. Операторов перехода с одной и  той же меткой можно писать любое  количество. Необходимо, чтобы раздел описания метки, сама метка и оператор перехода с ее использованием располагались в пределах одного блока программы (см. тему процедуры и функции). Кроме того, нельзя передавать управление внутрь структурированных операторов (например, if, for, while, repeat и др.).

УСЛОВНЫЙ ОПЕРАТОР

Условный оператор IF позволяет изменить порядок выполнения команд в зависимости от некоторого логического условия, т.е. он осуществляет ветвление вычислительного процесса. Условный оператор имеет вид:

IF <условие> THEN <оператор1> [ELSE <оператор2>];

В случае истиности логического выражения, стоящего в условии, выполняется <оператор1>, а <оператор2> пропускается. При ложном значении логического выражения пропускается <оператор1> и выполняется <оператор2>.

Оператор IF может быть полным (присутствуют обе ветви) или неполным (Else-ветви нет, при ложном условии ничего не делается). По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной. Точка с запятой перед Else считается ошибкой.

ПРИМЕР: Ввести целое число. Вывести соответствующий ему символ ASCII-таблицы, либо сообщить, что такого символа нет (0-31 - управляющие коды, затем до 256 - печатаемые символы).

program ascii_symbol;

var  i:word;

begin

write('Введите целое число: ');  readln(i);

if (i>31) and (i<256) then

writeln('Соответствующий символ - ', Chr(i))

else writeln('Такого символа нет');

readln

end.

ОПЕРАТОР ВЫБОРА

Если у вас не два  возможных варианта выполнения программы, а больше, то может использоваться оператор выбора CASE. Структура этого оператора в Турбо Паскале:

CASE <ключ_выбора> OF

C1 : <оператор1>;

C2 : <оператор2>;

. . .

CN : <операторN>;

[ELSE <оператор0>;]

END;       

Здесь <ключ_выбора> - это выражение порядкового типа, в зависимости от значения которого принимается решение; C1,...,CN - значения, с которыми сравнивается значение <ключа>; <оператор1>,..., <операторN> - оператор (возможно составные), из которых выполняется тот, с константой которого происходит первое совпадение значения <ключа>, <оператор0> выполнится, если значение ключа не совпадает ни с одной из констант C1,...,CN.

Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой. Если для нескольких значений <ключа> действия совпадают, то эти константы можно перечислить через запятую перед двоеточием или даже задать диапазон значений (нижняя граница .. верхняя граница).

ПРИМЕР: Вводится целое число, если это цифра, то определить четная она или нет, а если число, то определить попадает ли оно в диапазон от 10 до 100, если нет, то выдать соответствующее сообщение.

program chislo;

var  i:integer;

begin

write('Введите целое число: ');

readln(i);

case i of

0,2,4,6,8 : writeln('Четная цифра');

1,3,5,7,9 : writeln('Нечетная цифра');

10...100,200 : writeln('Число от 10 до 100 или 200');

else writeln('Число либо отрицательное, либо > 100, но не 200');

end;

readln

end.

 

 

 

 

 

 

ОПЕРАТОРЫ ЦИКЛА

Паскаль позволяет использовать три  различных оператора для организации  повторяющихся последовательностей действий, которые называют циклами.

                                                ЦИКЛЫ С УСЛОВИЕМ

Если заранее неизвестно число повторений цикла, то используются циклы с условием. В Паскале  имеется два типа таких циклов. Циклы While называют циклами с предусловием. Они имеют вид:

WHILE <логич.выражение> DO

begin

<операторы циклической части>;

end;

Цикл While организует выполнение одного (возможно составного) оператора пока истинно логическое выражение, стоящее в заголовке цикла. Поскольку значение логического выражения проверяется в начале каждой итерации, то тело цикла может не выполниться ни разу. Таким образом, в этом цикле логическое выражение - это условие продолжения работы в цикле.

Другой вариант циклов с условием - это циклы Repeat. Их называют циклами с постусловием. Они имеют вид:

                                         REPEAT        

<оператор 1> ... <оператор N>

UNTIL <логич.выражение>

Оператор Repeat организует повторяющееся выполнение нескольких операторов до тех пор, пока не станет истинным условие, стоящее в Until-части. Тело цикла обязательно выполняется хотя бы один раз. Таким образом, в этом цикле логическое выражение - это условие выхода из цикла.

При создании циклических  алгоритмов Турбо Паскаль позволяет  использовать процедуры Continue и Break. Процедура Continue досрочно завершает очередной шаг цикла, передает управление на заголовок. Процедура Break реализует немедленный выход из цикла.

РЕКОМЕНДАЦИИ: Для того чтобы избежать зацикливания программы необходимо обеспечить изменение на каждом шаге цикла значения хотя бы одной переменной, входящей в условие цикла. После выхода из цикла со сложным условием (с использованием операций and, or, xor), как правило, необходима проверка того, по какому условию цикл завершен.

ПРИМЕР: Пары неотрицательных вещественных чисел вводятся с клавиатуры. Посчитать произведение для каждой пары и сумму всех чисел.

program cycle_while;

var  x,y,sum:real;  otv:char;

begin

sum:=0;

otv='Д';

while (otv='Д') or (otv='д') do

begin

write('Введите числа x,y > 0 ');

readln(x,y);

writeln('Их произведение = ',x*y:8:3);

sum:=sum+x+y;

write('Завершить программу (Д/Н)? ');

readln(otv);

end;

writeln('Общая сумма = ',sum:8:3);

readln

end.

ПРИМЕР: В той же задаче можно использовать другой цикл с условием:

program cycle_repeat;

var  x,y,sum:real;  otv:char;

begin

sum:=0;

repeat

write('Введите числа x,y > 0 ');

readln(x,y);

Информация о работе Язык Паскаль