Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика - лекции.doc
Скачиваний:
18
Добавлен:
07.11.2018
Размер:
512.51 Кб
Скачать

I : Integer; { описание параметров циклов}

с : Char;

b : Boolean;

е : (elem1,elem2,elem3 );{вводимый перечислимый тип}

BEGIN

FOR i := -10 ТО 10 DO WriteLn(i)

FOR i := 10 DOWNTO -10 DO WriteLn(i)

FOR с := 'a' TO 'r' DO WriteLn(с)

FOR b := True DOWNTO False DO WriteLn(b)

FOR e = elem1 TO eleni3 DO WriteLn(e);

END.

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

FOR i := 5 ТО 4 DO ...;

FOR i := 4 DOWNTO 5 DO ...;

а цикл FOR i := N TO N DO ...;

выполнит операторы своего тела строго один раз.

Запрещается изменять параметр цикла и его начальное и конечное значения (если они заданы переменными или выражениями с ними) изнутри тела цикла. Кроме того, параметр цикла не может участвовать в построении диапазонов этого же цикла. Компилятор «незаконных» действий не замечает, но программа, содержащая цикл с заголовком типа

FOR i := i-5 TO i+5 DO ...

не заслуживает никакого доверия, даже если запускается.

Циклы с параметром — очень быстрые и генерируют компактный выполнимый код. Но всем им присущ один традиционный в Паскале недостаток — параметр должен принадлежать к перечислимому типу, а шаг не может быть изменен. Так, в первых двух циклах на шагом будет значение +1 и -1 соответственно, в цикле от 'а' до 'г' параметр С примет последовательные значения 'а','б','в','г', т.е. каждый следующий элемент — это значение функции Succ(С). Следствием этого являются проблемы организации циклов с шагом, отличным, например, от 1, а тем более циклов с вещественным параметром.

Для разрешения таких проблем приходится использовать обходные пути: обращаться к циклам с условиями. Так, цикл с вещественным параметром r от 3,20 до 4,10 с шагом 0,05 можно запрограммировать циклом WHILE:

r:=3.20;

while r <= 4.10 do

begin

r := r + 0.05

end;

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

Процедуры и функции.

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

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

X := sin(А);

в то время, как процедура может быть вызвана :

writeln('Это проверка');

Однако перед знакомством с процедурами и функциями, необходимо рассмотреть структуру программ.