Цикл с предусловием while




Формат оператора прост:

while выражение do оператор

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор (напомню, что составной оператор заключается между begin и end). Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор.

ВНИМАНИЕ Если в теле цикла необходимо выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

Пример. Программа, печатающая таблицу значений функции

 

для аргумента, изменяющегося в заданных пределах с заданным шагом.

Опишем алгоритм в словесной форме.

1. Ввести исходные данные.

2. Взять первое значение аргумента.

3. Определить, какому из интервалов оно принадлежит.

4. Вычислить значение функции по соответствующей формуле.

5. Вывести строку таблицы.

6. Перейти к следующему значению аргумента.

7. Если оно не превышает конечное значение, повторить шаги 3–6, иначе закончить.

Шаги 3–6 повторяются многократно, поэтому для их выполнения надо организовать цикл. Назовем необходимые нам переменные так: начальное значение аргумента — Xn, конечное значение аргумента — Xk, шаг изменения аргумента — dX, параметр — t. Все величины вещественные. Программа выводит таблицу, состоящую из двух столбцов — значений аргумента и соответствующих им значений функции (пример 2.2).

program tabl_fun;

var

Xn, Xk: real; { начальное и конечное значение аргумента }

dX: real; { шаг изменения аргумента }

x, y: real; { текущие значения аргумента и функции }

t: real; { параметр }

begin

writeln('Введите Xn, Xk, dX, t'); { приглашение ко вводу данных }

readln(Xn, Xk, dX, t); { ввод исходных данных – шаг 1 }

writeln(' --------------------------- '); { заголовок таблицы }

writeln('| X | Y |');

writeln(' --------------------------- ');

x:= Xn; { первое значение аргумента = Xn – шаг 2 }

while x <= Xk do begin { заголовок цикла – шаг 7 }

if x < 0 then y:= t; { вычисление значения функции - шаг 4 }

if (x >= 0) and (x < 10) then y:= t * x; { шаг 4 }

if x >= 10 then y:= 2 * t; { шаг 4 }

writeln('|', x:9:2,' |', y:9:2,' |');{ вывод строки табл. – шаг 5 }

x:= x + dX; { переход к следующему значению аргумента - шаг 6 }

end;

writeln(' --------------------------- ');

end.

Листинг. Таблица значений функции (оператор while)

Параметром этого цикла, то есть переменной, управляющей его выполнением, является х. Для правильной работы цикла необходимо присвоить параметру начальное значение до входа в цикл (шаг 2). Блок модификации параметра цикла представлен оператором, выполняющимся на шаге 6. Для перехода к следующему значению аргумента текущее значение наращивается на величину шага и заносится в ту же переменную.

Цикл с постусловием repeat

Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.

repeat

тело цикла

until выражение

В отличие от цикла while, этот цикл будет выполняться, пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдет выход из цикла. Вычисление выражения выполняется в конце каждой итерации цикла.

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

Цикл с параметром for

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

for параметр:= выражение_1 to выражение_2 do оператор

for параметр:= выражение_2 downto выражение_1 do оператор

Выражения должны быть совместимы по присваиванию с переменной цикла (о правилах совместимости мы поговорим в конце третьей лекции), оператор — простым или составным. Циклы с параметром обычно применяются при работе с массивами.

Пример 1. Программа выводит на экран числа от 10 до 1 и подсчитывает их сумму:

var i, sum: integer;

begin

sum:= 0;

for i:= 10 downto 1 do begin

writeln(i); inc(sum, i)

end;

writeln('Сумма чисел: ', sum);

end.

В этом цикле переменная i автоматически уменьшается на 1.

Пример 2. Программа выводит на экран символы от 'a' до 'z':

var ch: char;

begin

for ch:= 'a' to 'z' do write(ch:2)

end.

Здесь счетчик цикла ch символьного типа поочередно принимает значение каждого символа от 'a' до 'z'.

ВНИМАНИЕ Если в теле цикла необходимо выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

 

Выражения, определяющие начальное и конечное значения счетчика, вычисляются один раз до входа в цикл. Цикл for реализован в Паскале как цикл с предусловием.

После нормального завершения цикла значение счетчика не определено. Фактически оно равно первому значению, для которого выполняется условие выхода из цикла, но использовать это в программах не рекомендуется. Также не следует изменять значение счетчика внутри цикла вручную, например:

for i:= 1 to 10 do begin inc(i,3);... end; { плохо! }

Это может привести к зацикливанию программы.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: