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

5.4. Оператор For...Do

Довольно часто встречается ситуация, когда переменная цикла отно­сится к целому типу (в общем случае к порядковому) и её значение изменяет­ся на единицу. Для организации таких циклов введен оператор For. Его реа­лизация с помощью оператора For имеет вид:

Здесь i, m, n, - переменные целого типа (в общем случае порядкового). Заметим, что на месте m и n могут быть арифметические выражения целого типа. При n<m операторы Р1..Р2 не выполняются ни разу. Если повторяемый оператор только один тогда скобки begin . end; можно опустить.

В операторе For действия (i:=m, i<n, i:=i+1) организуются автоматиче­ски, поэтому фрагмент схемы программы, реализующей решение задачи , имеет более экономный, чем при использовании оператора While вид:

Read(n,m); S:=0;

For i:=m to n do n s:=s+sqr(i);

Writeln(s);

Имеется разновидность оператора For, в которой организуется измене­ние переменной цикла по убыванию (i:=i-1):

For i:=n downto m do

Begin P1; P2; . . . ; Pn; end;

В этом операторе m > i > n. Если m<n то операторы Р1...Рп не выполня­ются.

Приведем пример использования этого оператора в случае, когда пере­менная цикла имеет тип Char (один из порядковых).

Распечатать все символы латинского алфавита в обратном порядке от Z

до А:

Var c:char;

For c:='z' downto 'a' do

Writeln(c);

Для более гибкой организации циклов в состав Object Pascal включены два оператора:

Break - реализует немедленный выход из цикла, передавая управление оператору, стоящему сразу за концом оператора цикла;

Continue - обеспечивает досрочное завершение очередного прохода цикла, передавая управление на конец цикла.

5.5. Вложенные циклы

Вложенность циклов имеет место тогда, когда внутри повторяемой час­ти операторов необходимо организовать цикл. Проиллюстрируем это на при­мере решения следующей задачи.

Рассмотрим функцию S^n), представляющую собой сумму ряда

n X + 1

S (x, n) = V . Требуется вычислить таблицу значений этой функции

7=1 i

на интервале [a, b] с шагом h=(b-a)/m. Задаются a, b, n и m - количество раз­биений интервала.

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

Read(a,b,m); h:=(b-a)/m; x:=a; repeat s:=0;

for i:=1 to n do

s:=s+(x+1)/i;

write(x,s); until x>b+0.0000001;

Следует отметить, что при каждом приращении переменной цикла х накапливается погрешность, связанная с тем, что величина h из-за округлений вычислена не точно. Поэтому возможна ситуация, когда после m+1 шага зна­чение х не равно b и превышает b на некоторую незначительную величину, имеющую порядок погрешности округлений. В результате, если условие вы­хода из цикла записано как x>b, то значение функции в точке b не вычисляет­ся и не печатается. Для того, чтобы в точке b функция всегда вычислялась в приведенном алгоритме используется условие x>b+0.0000001.