Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры информатика 2012.doc
Скачиваний:
16
Добавлен:
17.04.2019
Размер:
11.54 Mб
Скачать

31. Условный и безусловный операторы.

Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x и z, и на каком-то этапе решения задачи требуется вычислить z=max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:=x, либо оператора присваивания z:=y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания. Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:=x; в противном случае для исполнения должен выбираться оператор z:=y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:=y в этом случае даст правильный результат).

Для задания подобного рода разветвляющихся вычислительных процессов в языках программирования существуют условные операторы. Рассмотрим полный условный оператор :

if <условие> then <Оператор1> else<Оператор2>;

Здесь if (если), then (то) и else (иначе) являются служебными словами. Выполнение такого условного оператора сводится к выполнению одного из входящих в него операторов 1 или 2: если заданное в операторе условие выполняется (условие принимает значение true), то выполняется оператор 1, в противном случае выполняется оператор 2.

Алгоритм решения упомянутой выше задачи вычисления z= max( x, y) можно задать в виде условного оператора Паскаля

if x>y then z:= x else z:= y

Безусловный оператор – GOTO

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

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

GOTO <метка>

Метка в Паскале – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. Перед использованием в программе метка должна быть объявлена в разделе описания меток.

label a1,a2,a3;

var x,y:real;

begin

read(x);

if x>=-2 then goto a1;

if x<2 then goto a2;

y:=4; goto a2;

a1: y:=sqr(x);

a2: write (y)

end.

32. Оператор цикла с постусловием(repeat).

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

Синтаксис оператора REPEAT…UNTIL:

REPEAT

Оператор1;

Оператор2;

···

ОператорN;

UNTIL Условие;

Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут выполнятся циклически, до тех пор пока значение “Условия” не станет равно TRUE (истина). Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является невыполнение “Условия” (его значение FASLE – ложь).Условие цикла может быть логической константой, переменной или логическим выражением. Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает. Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.

Пример 1. Проверка ввода

VAR

N : Integer;

BEGIN

. . .

REPEAT

Write(‘Введите целое число от 0 до 10: ’);

ReadLn(N);

UNTIL (N>=0) and (N<=10);

. . .

END.

В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число.

34. Оператор цикла с параметром for

Оператор цикла с параметром вводится для организации “строгих” циклов, которые должны быть проделаны заданное число раз. Кроме того, циклы с параметром позволяют организовать автоматическое изменение значения некоторой переменной в определенном диапазоне.

Синтаксис оператора FOR:

FOR ПараметрЦикла := МладшееЗначение TO СтаршееЗначение DO Оператор;

или

FOR ПараметрЦикла := СтаршееЗначение DOWNTO МладшееЗначение DO Оператор;

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

Изменение параметра цикла может быть как возрастающим, так и убывающим. В первом случае МладшееЗначение должно быть больше чем Старшее, а во втором – наоборот.

Примеры оформления циклов с параметром.

VAR i : integer;

BEGIN

FOR i := 1 TO 10 DO Write(i:5);

FOR i := 5 DOWNTO 0 DO Write(i:5)

END.

Выполнение цикла начинается с присваивания параметру стартового значения. Затем следует проверка, не превосходит ли параметр конечное значение (случай с TO) или не является ли он меньше конечного значения (случай с DOWNTO). Если результат проверки утвердительный, то цикл считается завершенным. В противном случае выполняется тело цикла (оператор, следующий за словом DO), и после этого параметр цикла меняет свое значение на следующее. Далее снова производится проверка значения параметра цикла, т.е. алгоритм повторяется.

Запрещается изменять параметр цикла и его старшее и младшее значения внутри тела цикла. Кроме того, параметр цикла не может участвовать в построении диапазонов этого же цикла.

Операторы FOR могут быть вложенными друг в друга, например

VAR

i,j : integer;

BEGIN

WriteLn(‘Таблица умножения’);

FOR i := 1 TO 10 DO begin

FOR j := 1 TO 10 DO Write((i*j):5);

WriteLn;

end;

END.