Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
2.9.1. Пустой и составной операторы.
Операторы в языке PASCAL разделяется символом ";".
Пустой оператор — это просто пустая строка (или эквивалентная ей последовательность пробелов и переносов на новую строку), после которой стоит ";". Он ничего не делает. Иногда использовался для того, чтобы поставить перед ним метку для использования в операторе goto.
Составной оператор — блок кода от begin до end:
begin
последовательность простых или составных операторов
end;
Используется там, где по синтаксису языка PASCAL может стоять один оператор, а надо использовать последовательность операторов.
Замечание: Перед операторной скобкой end точка с запятой необязательна. Однако ее лучше ставить, так как при котировании строк в другое место программы отсутствие “;” вызовет ошибку компиляции, точно также, как и добавление новых строк в блок.
2.9.2. Оператор безусловного перехода goto.
Этот оператор требует наличия метки (label), на которую и производится переход. Идентификатор метки — либо целое число, меньшее <65367, либо буквенно-численный идентификатор; обычно используют число.
program MyProg2;
label 1;
var i: integer;
begin
...
if...then goto1;
...
1:...
...
end.
Оператор goto рекомендуется использовать как можно реже, т.к. частое его употребление очень усложняет понимание логики программы. Чаще всего его применяют совместно с условными операторами. В современных версиях PASCAL имеются конструкции, позволяющиеся полностью отказаться от использования этого оператора.
2.9.3. Условный оператор if.
if условие then оператор; — первая форма
В C-образных if (условие) оператор;
if условие then оператор1
else оператор2; — вторая форма
В C-образных if (условие) оператор;
Else оператор;
Пример:
if a<b
then a:=a+1
else (if a=b
then a:=a+1
else
begin
a:=a+1;
b:=b+1
end
);
Надо отметить, что после then должен стоять только один оператор, а не последовательность операторов. Поэтому запись оператора в виде
if условие then оператор1;
else оператор2;
недопустима, т.к. символ ”;”, стоящий после оператора1, рассматривается как пустой оператор, и поэтому между then и else стоят два оператора, а может быть только один. Хотя бы и составной, ограниченный операторными скобками begin и end.
В случае последовательности операторов типа:
if условие1 then if условие2 then оператор1 else оператор2;
имеющийся else относится к последнему then, поэтому лучше отформатировать текст так:
if условие1
then if условие2
then оператор1
else оператор2;
таким образом, если писать соответствующие if, then и else друг под другом, логика работы программы становится очевидной.
Пример неправильного стиля оформления:
if условие1
then if условие2
then оператор1
else оператор2;
Этот стиль подталкивает к логической ошибке при чтении программы. Надо отметить, что сама возможность такой ошибки связана с непродуманностью синтаксиса языка PASCAL (в том числе Object Pascal). Другой вариант ошибки, связанный с синтаксисом PASCAL, может быть вызван лишним символом “;” после then. Так, строки
If условие then; оператор1;
И
If условие then оператор1;
совершенно неэквивалентны. В первом случае логика работы лучше понятна при записи оператора в следующем виде
If условие then;
Оператор1;
Т.е. при выполнении условия выполнится пустой оператор, а оператор1 будет выполнен всегда.
2.9.4. Оператор выбора case.
Является аналогом if для нескольких условий выбора. Варианты синтаксиса оператора для различной формы записи условий следующие:
сase выражение of
значение1:оператор1;
...
значение2,значение3,...,значениеN:оператор2;
начальное значение..конечное значение:оператор3
else оператор
end;
Тип выражения должен быть либо каким-нибудь из перечисляемых типов: целый, либо литерным, либо булевским, либо элементом множества, в частности, строковый и вещественный типы недопустимы. Значения — совместимого типа.
Часть с else является необязательной.
Пример:
case (a mod b) of
0: i:=0;
1: i:=1;
2,4,6,8: i:=2;
10..100: begin
i:=3;
a:=a div10
end
else i:=4
end {/case};
...
В C-образных языках для аналогичных целей применяется конструкция
switch (выражение)
{
case значение1: оператор1;
……………………………
case значение N: оператор N;
default: оператор;
}
2.9.5. Оператор цикла for.
Имеется две формы синтаксиса оператора.
1) Цикл от меньшего к большему значению:
for переменная:=значение1 to значение2 do оператор; Значения должны быть перечисляемого типа. Если значение2 меньше значения1, цикл не выполняется ни разу, если они равны – один раз.
2) Цикл от большего к меньшему значению:
for переменная:=значение2 downto значение1 do оператор; - цикл от большего значения к меньшему. Шаг по умолчанию равен 1.
Примеры:
1) x:=1; for i:=1 to n step m do x:=x*i;
2) for i:=10 downto 1 do writeln(i);
3) for s='d' to 'z' do
begin
...
end.
C-образные языки:
for (инициализация; условие продолжения; изм. Счетчиков)
{тело цикла};
BARSIC: for(i=i1..i2)do(…);
for(i=a..b, step=s)do(…);
2.9.6. Оператор цикла while...do – цикл с предусловием.
while условие do оператор;
Пока условие сохраняет значение true — в цикле выполняется оператор, иначе — действие цикла прекращается. Если условие с самого начала false, цикл сразу прекращается, и тело цикла – оператор – не выполнится ни разу.
Пример:
i:=1; x:=1;
while i<=n do
begin
x:=x*i;
i:=i+1
end;
2.9.7. Оператор цикла repeat...until – цикл с постусловием.
repeat
оператор1; {тело цикла}
оператор2; {тело цикла}
...
операторN {тело цикла}
until условие выхода;
Если условие принимает значение true, цикл прекращается. Тело цикла выполняется до проверки условия, поэтому оно всегда выполнится хотя бы один раз.
Пример:
i:=0; x:=1;
repeat
i:=i+1;
x:=x*i
until i<n;
При необходимости организовать бесконечный цикл с выходом изнутри тела цикла по какому-либо условию часто используют следующий вариант:
repeat
…
until false;
Оператор repeat until является достаточно непоследовательным с точки зрения семантики английского языка и логики языка PASCAL. Его использование вызывает много ошибок у пользователей в англоязычных странах. Гораздо более последователен синтаксис языка Java, где в качестве цикла с постусловием используется конструкция do{…}while(…).
Дата публикования: 2014-11-29; Прочитано: 695 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!