Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

5.2. Оператор Repeat...Until

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

Здесь <условие> записано с помощью выражения логического типа.

repeat

P1;

P2;

Pn;

until <условие>;

Оператор Repeat имеет следующие характерные особенности: он орга­низует выполнение повторяемых операторов по крайней мере один раз; хотя бы один повторяемый оператор должен влиять на значение «условие», (чтобы не было зацикливания) и это отслеживается на этапе трансляции: если не об­наруживается такого влияния, выдается сообщения об ошибке.

Проиллюстрируем использование данного оператора на примере реше­ния следующей задачи:

Вычислить и напечатать таблицу значений заданной функции y=f(x) на интервале [a,b] с шагом h.

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

read (a, b, h);

x:=a;

repeat

y:=f(x);

writeln(x, y); x:=x+h; until x>b;

значения функции при х=а. Затем значение переменной х увеличивается на величину шага h, после чего проверяется условие выхода значения перемен­ной х за пределы интервала (х>Ь). При достижении этого условия происходит выход из цикла, т. е. управление передается на оператор, следующий за until. Как видим значение переменной х, входящей в условие, изменяется при каж­дом повторении, поэтому на этапе трансляции ошибок не будет. Однако, это не гарантирует от зацикливания в случае, если по ошибке ввода переменная h примет нулевое значение. Произойдет эффект «зависания» задачи на неопре­деленное время.

5.3. Оператор While...Do

Иногда удобнее организовать проверку условия выхода из цикла не в конце, а перед выполнением первого повторяемого оператора. Например, в выше приведенной задаче, если из-за ошибки ввода a окажется больше чем b в то значение функции вычислять и печатать не следует. Оператор While по­зволяет это сделать.

Схема и реализация цикла с помощью оператора While имеет вид:

While <условие> do Begin P1; . . Pn; End;

Если повторяется только один оператор, то скобки begin...end; можно не писать. Аналогично, как и в операторе Repeat, хотя бы один повторяемый оператор должен влиять на значение «условия».

В качестве примера использования оператора While рассмотрим реше­ние следующей задачи:

Вычислить сумму квадратов целых чисел в диапазоне от m до n:

S = £ i2 = m 2 + (m +1)2 + ... + n2;

i=m

если n<m тогда сумма не вычисляется и S=0. Фрагмент программы решения этой задачи имеют вид:

Read (m,n);

s:=0;

i:=m;

While i<=n do begin s:=s+sqr(i);

i:=i+1; end;

Writeln(s);

При вычислении суммы вводится переменная, в которой она будет на­капливаться. В данном примере это переменная с именем S (заметим, что имя удобно сохранить такое, которое введено при описании задачи). Вначале эта переменная, очищается (S=0), а затем при каждом проходе цикла в эту пере­менную добавляется очередное вычисленное значение (S=S+i ).Иногда, для экономии вычислений вначале вместо (S=0) можно в S занести первый член суммы.

Отметим одну общую особенность решения двух вышеприведенных за­дач. При организации цикла используется так называемая "переменная цик­ла" x или i. Вначале цикла этой переменной присваивается начальное значе­ние (х=а) или (i=m); внутри цикла при каждом повторении её значение изме­няется на определенную величину-шаг переменной цикла (h) или (1); в усло­вии выхода из цикла проверяется, не вышла ли переменная цикла за пределы интервала (x>b) или (i>n). Следует заметить, что в большинстве решаемых задач циклы организуются с использованием именно такой переменной цик­ла.