pascal. операторы языка

advertisement
8
PASCAL
ОПЕРАТОРЫ ЯЗЫКА
Простые операторы
Оператор присваивания ( : = ) – выполняет выражение, заданное в его правой
части, и присваивает результат переменной, расположенной в левой части.
Переменная и выражение должны иметь один и тот же тип, за исключением, когда
переменная имеет вещественный тип, а выражение – целочисленный.
Формат:
< идентификатор > : = < выражение > ;
П р и м е р:
Var
A1 : integer ;
A2 : real ;
C1 : char;
Begin
A1 := 12;
A2 := 15.74 + A1;
C1 := " Информатика ";
Оператор безусловного перехода ( Goto ) –
означает переход к оператору,
отмеченному меткой ( после записи метки в разделе операторов ставится двоеточие ).
Формат:
Goto < метка >;
П р и м е р:
...
Label Met1, Met2 ;
...
Goto Met1 ;
...
Met1:
B := 35 ;
...
Обычно оператор Goto применяется для преждевременного выхода из цикла или при
обработке ошибок. В других случаях его использовать не рекомендуется.
Операторы ввода – вывода
Вывод информации на экран осуществляется двумя операторами: Writeln и Write,
где каждый элемент вывода есть то, что вы хотите выдать на экран.
Элементы вывода могут быть целым или вещественным числом, символом, строкой,
логическим значением, именем константы, переменной, функции. Все выводимые элементы
данных печатаются в одну строку в указанном порядке.
Если используется оператор
Writeln ( элем1, элем2, . . . ) ;
после последнего элемента вывода курсор переводится к началу следующей строки.
Если необходимо оставить курсор на той же строке после последнего элемента вывода,
то используется оператор
В остальном эти операторы работают одинаково.
Когда печатаются элементы данных, то пробелы между ними не вставляются
автоматически, об этом нужно позаботиться самим:
Writeln ( элем1, ' ', элем2, ' ', . . . ) ;
9
PASCAL
П р и м е р:
...
A:=1;
B:=2;
C:=3;
Name : = ' дети ' ;
Writeln ( A, B, C ) ;
{ 123 }
Writeln ( A,' ', B,' ', C ) ;
{1 2 3}
Writeln ( 'Здравствуйте', Name ) ; { Здравствуйтедети }
Writeln ( 'Здравствуйте , ', Name, ' !' ) ; { Здравствуйте, дети ! }
Можно также использовать спецификатор ширины поля для указания размеров поля
вывода для данного элемента:
Writeln ( элем1 : ширина1, элем2: ширина2 , . . . ) ;
П р и м е р:
...
A : = 10 ; B : = 2 ; C : = 100 ;
Writeln ( A, B, C ) ;
Writeln ( A :2, B :2, C :2) ;
Writeln ( A :3, B :3, C :3) ;
Writeln ( A :4, B :2, C :4) ;
{ 102100 }
{ 10 2100 }
{ 10 2100 }
{ 10 2 100 }
Элемент данных дополняется пробелами слева, чтобы занять указанную ширину поля.
Если ширина поля меньше, чем нужно, то при выводе данных ширина автоматически
увеличивается до минимально необходимого размера
( как во втором операторе Writeln
переменная С имеет ширину поля 2, а значение 100 требует ширины 3 ).
Этот метод работает для всех допустимых типов данных. Однако вещественные числа,
напечатанные со спецификатором поля (или без него), выдаются в экспоненциальной
форме:
Х : = 421.53;
Writeln ( Х ) ;
{ 4.2153Е +02 }
Writeln ( Х :3) ;
{ 4.2Е +02 }
Чтобы этого избежать, нужно помимо ширины указать сколько цифр располагается
после десятичной точки. В этом случае число будет печататься в формате с фиксированной
точкой:
Х : = 421.53;
Writeln ( Х :6:2) ;
{ 421.53
}
Writeln ( Х :8:2) ;
{
421.53 }
Writeln ( Х :8:4) ;
{ 421.5300 }
Операторы чтения (ввода) Read и Readln обеспечивают ввод числовых данных,
символов, строк и т.д. для последующей их обработки программой:
Readln ( элем1, элем2, . . . ) ;
Read ( элем1, элем2, . . . ) ;
Отличие оператора Readln от Read заключается в том, что после считывания
последнего в списке значения для одного оператора Readln данные для следующего оператора
Readln будут считываться с начала новой строки.
10
PASCAL
Если в программе имеется несколько операторов Read, данные для них вводятся
потоком, т.е. данные для следующего оператора Read набираются в той же строке, что и для
предыдущего.
После набора данных для одного оператора ввода всегда нажимаем клавишу ENTER.
Значения переменных должны вводиться в строгом соответствии с правилами языка (
правилами написания данных различных типов ) и строгом порядке - согласно переменным,
перечисленным в операторе ввода.
П р и м е р:
Var
I : real ;
J : integer ;
K : char ;
Begin
read ( I, J, K ) ;
...
{ набираем на клавиатуре: }
{ 354.87 100 'N' }
{ нажимаем клавишу ENTER}
Условные операторы
Иногда необходимо выполнить часть программы, когда некоторое условие истинно или
когда достигнуто определенное значение некоторого выражения.
Оператор
if
Формат:
1).
if
< условие > then < оператор1>
else < оператор2 > ;
2).
if
< условие > then < оператор1 > ;
где < условие > является любым логическим выражением; результат выражения имеет
всегда булевский тип.
В 1-ом случае, если условие истинно, то выполняется Оператор1, в противном случае
выполняется Оператор2.
Во 2-ом случае, если условие истинно, то выполняется Оператор1, если условие ложно,
то Оператор1 пропускается и программа продолжается.
Если необходимо выполнить больше одного оператора при условии истинности (или
ложности) определенного выражения, то пользуются составным оператором, который
состоит из ключевого слова BEGIN, некоторого числа операторов, отделенных друг от
друга точкой с запятой (;) и ключевого слова END.
П р и м е р:
if (A > B) and (C < D) then begin
N : = A*A – 1 ;
M : = N(A – B)(D – C)
end
else M = 0 ;
11
PASCAL
Один оператор if может входить в состав другого оператора if. В этом случае говорят о
вложенности операторов:
< условие > then
if < условие > then < оператор >
else < оператор > ;
При вложенности операторов каждое else соответствует тому then, которое
if
непосредственно ему предшествует.
П р и м е р:
if C < 30 then
if C >= 15 then writeln (' 15 <= C < 30 ')
else writeln (' C < 15 ');
Оператор Case
Формат:
Case <выражение > of
<список1> : <оператор1> ;
<список2> : <оператор2> ;
...
<списокN> : <операторN>
else <оператор>
end;
Оператор выбора case является аналогом оператора if и позволяет сделать выбор из
произвольного числа имеющихся вариантов.
Оператор case состоит из выражения (селектора) и списка операторов, каждому из
которых предшествует список констант или диапазонов выбора того же типа , что и селектор.
Сначала вычисляется значение выражения (селектора), затем выполняется тот оператор,
константа выбора которого равна текущему значению селектора. Если ни одна из констант не
равна текущему значению селектора, выполняется оператор, стоящий после else. Если else
отсутствует, то не выполняется ни один из операторов конструкции case и программа
продолжает свою работу (т.е. выполняется первый оператор, стоящий за end ).
П р и м е р:
Program DemoCase;
{* Программа выводит на экран меню: список из трех
*}
{*встроенных функций. По первой букве имени функции *}
{*на экран выводится полное название этой функции
*}
Var
Name : char;
Begin
writeln ( ' Введите нужную букву: ' ) ;
writeln ( ' A – Abs, S – Sin, C – Cos, V – выход ' ) ;
readln ( Name);
12
PASCAL
case Name of
'A', 'a' : writeln ( ' Вычисление абсолютной величины ' ) ;
'S', 's' : writeln ( ' Вычисление синуса угла ' ) ;
'С', 'с' : writeln ( ' Вычисление косинуса угла ' ) ;
'V', 'v' : begin
writeln ( ' Выход из программы ' ) ;
Halt
end
else writeln ( ' Указанной буквы нет в меню ')
end
{ конец Case }
End .
Циклы
Цикл – это последовательность операторов, которая может быть выполнена более
одного раза.
Существует три основных вида цикла:
- цикл For ;
- цикл While ;
- цикл Repeat.
Оператор For
С помощью оператора For группа операторов выполняется некоторое фиксированное
число раз. Оператор состоит из заголовка и тела цикла.
Формат:
for <параметр> : = <нач. значение > to <кон. значение > do <оператор > ;
Заголовок цикла – это for . . do, тело цикла – это оператор ( простой или составной ).
Оператор For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны
все значения параметра цикла от начального значения до конечного. Параметр цикла
последовательно увеличивается на единицу при каждом повторе.
Если вместо to использовать downto, то параметр цикла будет уменьшаться на
единицу при каждом повторе.
П р и м е р1:
for I : = 1 to 50 do write ( '*' ) ;
50 раз выведется на экран в одной строке символ " * ".
П р и м е р2:
for I : = 1 to 50 do
begin
K:=I*I;
writeln ( 'Квадрат числа ', I, ' равен ' , K )
end ;
На экран выведутся квадраты первых 50-ти натуральных чисел ( каждый с новой
строки).
13
PASCAL
Оператор While
Формат:
while < условие > do < тело цикла > ;
Условие – булевское выражение, тело цикла – простой или составной оператор. Перед
каждым выполнением тела цикла вычисляется значение выражения условия. Если результат
равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат
равен False, происходит выход из цикла и переход к первому после while оператору. Если
перед самым первым выполнением цикла значение выражения было False, тело цикла вообще
не выполняется.
П р и м е р:
Sum : = 0 ;
I : = 30 ;
while I > 0 do
begin Sum : = Sum + I ;
I:=I–2
end ;
write ( ' Сумма = ', Sum ) ;
Оператор Repeat
Оператор повтора Repeat состоит из заголовка (Repeat ), тела цикла и условия
окончания ( until ).
Формат:
Repeat
< оператор > ;
...
< оператор >
until < условие > ;
Условие – выражение булевского типа. Сначала выполняется тело цикла (операторы,
заключенные между словами Repeat и until ), затем вычисляется значение выражения
условия. Если результат выражения, тело цикла выполняется еще раз, если результат – True,
происходит выход из цикла.
Оператор Repeat имеет три характерные особенности:
- выполняется по крайней мере один раз;
- тело цикла выполняется пока условие равно False;
- в теле цикла может находиться произвольное число операторов без операторных
скобок begin … end.
По крайней мере один из операторов тела цикла должен влиять на значение условия,
иначе цикл будет выполняться бесконечно.
П р и м е р1:
D:=1;
S:=0;
repeat
S:=S+D
until ( d < 100 ) ;
{ бесконечный цикл}
14
PASCAL
П р и м е р2:
D:=1;
S:=0;
repeat
S:=S+D;
D:=D+1
until ( d < 100 ) ;
{ изменение переменной}
{ конечный цикл}
Правила пунктуации
-
-
-
Точка с запятой не ставится в разделах описаний после зарезервированных слов
Label, Type, Const, Var и ставится после завершения каждого описания.
Точка с запятой не ставится после begin и перед end, т.к. эти слова являются
операторными скобками, а не операторами.
Точка с запятой является разграничителем операторов, ее отсутствие вызывает
ошибку компиляции.
Наличие между операторами нескольких точек с запятой не является ошибкой, т.к.
компилятор воспринимает их как наличие пустых операторов.
При использовании вложенных структур точка с запятой ставится только после
последнего end:
end
end
end ;
Если такая конструкция встречается в конце программы, точка с запятой не
ставится вообще ( после последнего End в программе ставится точка ):
end
end
End .
В операторах цикла точка с запятой не ставится после while, repeat, do и перед
until.
- В условных операторах точка с запятой не ставится после then и перед else.
Download