Простейшие операторы языка Паскаль
Понятие оператора. Программа представляет собой совокупность операторов. Оператор представляет собой некоторый логически завершенный, самостоятельный этап процесса обработки данных. Все операторы языка Паскаль можно разделить на простые и сложные. Простые операторы в отличие от сложных не содержат внутри себя других операторов.
Все операторы, входящие в программу, образуют линейную последовательность и отделяются друг от друга точкой с запятой. Выполнение программы начинается с ее первого оператора, а заканчивается, когда будет выполнен последний оператор программы. Таким образом, операторы выполняются в порядке следования до тех пор, пока не будет достигнут конец программы либо не будет выполнен оператор перехода.
Составной оператор. Составной оператор – объединение нескольких операторов в одну группу.
Форма записи составного оператора:
Begin
оператор 1;
оператор 2;
…
оператор n-1;
оператор n
end;
В этой конструкции служебные слова begin (начало) и end (конец) называются операторными скобками. Слово begin выполняет роль открывающей скобки, слово end – роль закрывающей скобки. После слова begin и перед словом end разрешается не ставить знак конца оператора, т.е. точку с запятой.
Составной оператор представляется как единый оператор. Его можно вставлять в любое место программы, где допускается один оператор. Любой из операторов составного оператора, в свою очередь, также может быть составным, например:
Begin
Begin
оператор А;
оператор В
End;
Begin
оператор С;
оператор D
End
End;
Оператор присваивания. Оператор присваивания – основной оператор любого языка программирования. Общая форма записи оператора:
v := a;
где v – имя переменной; “:=” – знак присваивания; а – выражение. Знак операции состоит из двух символов, которые нельзя разделять пробелом.
Данный оператор вычисляет значение выражения а, стоящего справа от знака операции присваивания :=, и присваивает полученной значение переменной v, стоящей слева. Например:
d := sin (x + a) * g – sqrt (abs ( x – g ));
В частных случаях выражение в правой части оператора присваивания может принимать значение константы, переменной или функции. Например:
f := 23.6;
q := x;
l := sqrt(x);
Оператор присваивания применим не только к арифметическим, но и логическим и символьным данным.
При использовании оператора присваивания необходимо следить, чтобы переменная в левой части и выражение в правой части оператора были одного типа. Следующие операторы присваивания являются неправильными:
Var
a : real;
k : char;
Begin
…
k := a; (*символьной переменной присваивается вещественная*)
k := 23.7; (*символьной переменной присваивается
число*)
a := ‘!’; (*вещественной переменной присваивается символ*)
…
End.
Из этого общего правила существует одно важное исключение. Разрешается присваивать вещественной переменной выражение, где присутствуют и вещественные и целые переменные и константы. В этом случае значение вычисленного выражения будет иметь вещественный тип. Следующий оператор присваивания является правильным:
Var
x, y : real;
k, l : integer;
Begin
…
y := abs(k) * x + sqrt (x * l);
…
End.
Оператор ввода. Для ввода и вывода данных в Паскале предусмотрены стандартные встроенные программы, которые называются процедурами.
Процедура ввода вызывается с помощью оператора ввода read.
Различают следующие виды операторов ввода:
Read (a1, a2, …, an) – каждое вводимое значение получают последовательно переменные a1, a2,…, an;
ReadLn (a1, a2, …, an) - каждое вводимое значение получают последовательно переменные a1, a2,…, an, после чего происходит переход на новую строку.
Вводить можно только переменные целого, вещественного, символьного и строкового типа.
Ввод числовых данных. Числовые данные (целые и действительные) должны разделяться пробелом или нажатием клавиши Enter.
Пример ввода
Var
a, b, c: real;
r, q: integer;
Begin
…
ReadLn(a, b, c);
Read(r, q);
…
End.
После запуска программы на выполнение происходит останов машины при встрече ReadLn(a, b, c) и ожидание ввода данных. Необходимо набрать три действительных числа через пробел и нажать клавишу Enter. Затем – два целых числа и нажать клавишу Enter,например,
0.4 6.2 –8 Enter
6 12 Enter
Числа можно отделять друг от друга клавишей Enter, например,
0.4 Enter
6.2 Enter
-8 Enter
6 Enter
12 Enter
Но нельзя вводить все в одну строку:
0.4 6.2 –8 6 12 Enter
В этом случае оператор ReadLn(a, b, c) введет три числа и перейдет к новой строке, пропустив два последних числа, а оператор READ(R,Q) будет ждать ввода двух чисел в новую строку (которые мы уже ввели).
Ввод символьных данных. Ввод символьных данных имеет особенности. Поскольку пробел относится к символьным данным, то символьные данные вводятся сплошной строкой без разделителей символов. Одной переменной можно присваивать значение только одного символа, например,
Var
c, d, w: char;
Begin
…
ReadLn(c,d,w);
…
End.
Правильный ввод Неправильный ввод
aвсEnter a b c Enter
Другая особенность ввода символьных данных заключается в том, что нажатие клавиши Enter воспринимается как символ пробела. Для правильного ввода символьных данных рекомендуется обеспечивать ввод их всегда с новой строки. Для этого вводу символьных данных должен предшествовать ввод с помощью оператора ReadLn и сами символьные данные рекомендуется вводить с помощью ReadLn.
Оператор вывода. Оператор вывода данных из памяти на экран дисплея имеет следующие формы записи:
Write (b1, b2,…, bn) – выводит последовательно значения b1, b2,…, bn;
WriteLn (b1, b2,…, bn) - выводит последовательно значения b1, b2,…, bn и осуществляет переход на новую строку.
В качестве параметров В1, В2, Вn могут быть использованы целые, вещественные, символьные и логические переменные, а также символьные константы, заключенные в апострофы.
Примеры:
WriteLn (‘Результаты вычислений’); - вывод на экран строки «Результаты вычислений».
Y := 12;
WriteLn (‘Y= ‘,Y); - вывод на экран строки
Y= 12
Для вывода целых и вещественных чисел можно указывать форматы. Формат указывается через двоеточие после переменной.
Формат вещественных чисел состоит из двух величин. Первая – это общее количество позиций, отводимое под число. Вторая – это количество позиций, отводимое под дробную часть. Общее количество позиций включает в себя отрицательный знак числа или пробел для положительного числа, количество позиций под целую часть числа, одну позицию под точку, количество позиций под дробную часть числа. Например, оператор
WriteLn(y:5:2);
для изображения вещественной переменной y отводит пять позиций, из них две – под дробную часть. Оставшиеся три позиции распределяются так: одна позиция - под точку и две – под знак числа и целую часть.
Если для вещественного числа не указать формат, число будет выведено в экспоненциальной форме, например число 0.000345 будет выведено как 0.345Е-03.
При выводе целых чисел в формате указывается одно число – общее количество позиций, отводимое под число. Например, оператор
WriteLn (i:3);
для изображения целой переменной i отводит три позиции.
Если формат отведен больше, чем реальное количество позиций, занимаемых числом, то перед целой частью будет выведено соответствующее количество пробелов, а после дробной части – соответствующее количество нулей.
При выводе переменных символьного типа в формате указывают общее количество позиций, отводимых под переменную. Символьная переменная содержит один символ, если количество позиций больше одной, то перед символом выводится соответствующее число пробелов. Для символьных переменных в формате количество позиций можно указать переменной, например:
Var
s: char;
k: integer;
Begin
…
k := 3;
s := ‘*’;
WriteLn (s:k);
End.
Оператор перехода. В языке Паскаль принят следующий порядок выполнения программы: все операторы выполняются последовательно один за другим в том порядке, как они записаны. Однако в практике программирования задач возникает необходимость нарушения последовательности выполнения операторов. Например, необходимо обойти участок программы, а вернуться к нему позже. Для этого предназначен оператор перехода, который имеет следующий вид:
goto метка;
Метка представляет собой целое число без знака в диапазоне 1-9999 или идентификатор (имя). Метка записывается перед помеченным оператором и отделяется от него двоеточием. Метка должна быть объявлена в разделе label. Например:
Label
10, aaa;
...
Begin
…
goto 10;
aaa: a := 2;
…
10: y := y + a;
End.
Здесь после оператора goto 10 выполняется оператор с меткой 10. Оператор, следующий за оператором перехода, также должен быть помечен. Иначе операторы между оператором goto и оператором с меткой 10 будут мнимыми, так как к ним нет доступа и они не будут выполняться.
При использовании метки необходимо руководствоваться следующими правилами:
– метка, на которую ссылается оператор goto, должна быть описана в разделе label и обязательно встречаться где-нибудь в теле программы;
– метка, на которую не ссылается ни один оператор goto, может быть описана, но ее включение в тело программы необязательно;
– метки, описанные в процедуре (функции), локализуются в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.
Использование оператора goto нарушает естественный ход выполнения программы, делает ее запутанной и сложной в понимании. Поэтому использовать в программах данный оператор крайне не рекомендуется.
Условный оператор. Условный оператор имеет следующие формы записи:
if логическое выражение then
оператор 1
Else
оператор 2;
if логическое выражение then
Begin
группа операторов 1
End
Else
Begin
группа операторов 2
end;
if логическое выражение then оператор;
if логическое выражение then
Begin
группа операторов
end;
Если логическое выражение истинно, тогда выполняется оператор 1 или группа операторов 1, иначе выполняется оператор 2, или группа операторов 2, или оператор if пропускается и выполняется следующий за ним оператор.
Пример 1.
if x >= 50 then
y := sqrt (x)
Else
y := sqr (х);
WriteLn (y);
В данном примере, если х больше или равен 50, то y равен квадратному корню из х, в противном случае y равен переменной х в квадрате. Затем выполняется оператор вывода.
Пример 2.
if x < 0 then
x := abs(x);
s := s + x;
Если условие x < 0 истинно, то х присваивается модуль х и происходит передача управления на вычисление значения s.
Если условие x < 0 ложно, то сразу выполняется оператор вычисления s.
В качестве операторов 1 и 2 могут быть также условные операторы. Служебное слово else всегда ассоциируется с ближайшим по тексту слову if, которое еще не связано со служебным словом else. Например:
if x > y then
if a = 0 then
b := 0
Else
b := 1;
В данном случае при выполнении условия x > y переменная b получит значение 0 или 1 в зависимости от выполнения условия a= 0. Но если условие x > y не выполняется, второй условный оператор не будет работать и значение bне изменится.
Перед служебным словом else не ставится точка с запятой.
Пример 3. Вычислить значение функции Y.
Текст программы.
Var
x,a,y:real;
Begin
WriteLn (‘Введите х,а’);
ReadLn (x,a);
if x<= a then
y:=cos(x+a)
Else
y:= ln(x-a);
WriteLn (‘y= ’, y:10:4, ‘ x=’, x:6:2);
End.
Операторы выбора. Оператор выбора используется в тех случаях, когда в зависимости от значения какого-либо выражения необходимо выполнить один из нескольких операторов. Оператор выбора имеет следующий вид:
case выражение (переключатель) of
константа 1: оператор 1;
константа 2: оператор 2;
…
константа n: оператор n
[else оператор k]
end;
Здесь case, of, else, end – зарезервированные слова. Квадратные скобки говорят о том, что эта часть конструкции может отсутствовать.
Оператор выбора действует следующим образом.
Если значение выражения совпадает с константой 1, то выполняется оператор 1, затем управление передается следующему за case оператору. Если значение выражения совпадает с константой 2, то выполняется оператор 2, затем управление передается следующему за case оператору и т.д. Если значение выражения не совпадает ни с одной константой и есть конструкция else, то выполняется оператор k, затем управление передается следующему за case оператору. Если значение выражения не совпадает ни с одной константой, и нет конструкции else, то управление сразу передается оператору, следующему за case.
Кроме одиночных констант могут быть списки констант, которые записываются через запятую или как диапазоны. Например:
case i of
1,2 : k := 0;
3..8: k := 1;
9,10,20..25: k := 2
Else
k := 100
end;
В данном примере, если i равно 1 или 2, то k присваивается 0. Если i принимает значение от 3 до 8, то k присваивается 1. Если i принимает значение 9, или 10, или изменяется от 20 до 25, то k принимает значение 2. Если i не совпадает ни с одним из указанных выше значений, то k присваивается 100.
Выражение (переключатель) может быть переменной целого (integer), логического, символьного, перечисляемого и ограниченного типов.
Константы и переключатель должны быть одного и того же типа.
Диапазоны изменений значений констант не пересекаются.
Для каждой альтернативы предусмотрен один оператор, если необходимо выполнить несколько операторов, то операторы оформляются как составные. В то же время после else допускается запись нескольких операторов, которые не оформляются как составной оператор.
Примеры использования оператора выбора.
Пример 1.
Type
color=(red,green,black);
Var
x: integer;
clr:color;
Begin
writeln(‘ Введите цифру red-0,green-1,black-2');
ReadLn(x);
case x of
0: clr := red;
1: clr := green;
2: clr := black;
End;
Write(‘цвет-‘);
case clr of
red: WriteLn(‘красный’);
green: WriteLn(‘зеленый’);
black: WriteLn(‘черный’);
End;
End.
В данном примере переключатель х имеет целый тип, а переключатель clr имеет перечисляемый тип.
Пример 2.
Var
s: ’a’..’g’;
Begin
WriteLn(‘введите букву от а до g’);
ReadLn(s);
case s of
‘a’, ‘b’, ‘c’, ‘e’ : WriteLn (‘буквы русского и
латинского алфавита’);
‘d’, ‘f’. ‘g’ : WriteLn(‘буквы латинского алфавита’);
End;
End.
В данном примере переключатель имеет ограниченный тип, образованный из символьного типа. Программа позволяет отличить буквы, похожие по написанию на русские и английские и только на английские.
Дата добавления: 2017-01-29; просмотров: 911;