В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл, содержащий в себе другой, называется внешним, а цикл, находящийся в теле первого, - называется внутренним (вложенным). Правила организации внешнего и внутреннего циклов такие же, как и для простых циклов.
При организации вложенных циклов необходимо помнить, что параметр внешнего цикла меняется медленнее, чем параметр внутреннего. При одном значении параметра внешнего цикла параметр внутреннего – пробегает все свои возможные значения.
Оператор прерывания цикла
Для досрочного прерывания цикла можно использовать оператор goto или стандартную процедуру break.
Рассмотрим фрагмент:
for i:=1 to n do
begin
p:=p* i;
if p>100 then break ;
writeln(‘p=’, p);
end;
Цикл будет прерван при достижении условия p>100 по процедуре break. Если условие не выполнится, цикл будет пройден n раз.
Примеры типовых задач по теме «Циклические вычислительные процессы»
1. Вычислить сумму ряда:
S= 1+1/2+1/3+ … +1/50
Выделим переменную для накапливания суммы - sum. Значение этой переменной необходимо предварительно обнулить. В программе используется оператор цикла с параметром.
Программа
Пояснения
program prim_cikl1;
var
i: integer; sum: real;
begin
sum: =0;
for i: = 1 to 50 do
sum: = sum + 1/i;
Writeln (' сумма = ', sum);
end.
Имя программы – prim_ cikl1
{Описательная часть}
{Исполнительная часть}
Начало цикла
Вычисление суммы ряда
Вывод результата на экран
2. Вычислить значение функции:
y = a sin (x ) ,
при x = , с шагом =0.2, значение переменной a ввести с клавиатуры.
В программе используется оператор цикла с постусловием.
Программа
Пояснения
program cikl_2;
var
y,a,x:real;
begin
writeln(‘Введите а’);
readln(a);
x:=0;
repeat
y:=a*sin (x);
writeln(‘y=’,y:8:3, ‘ x=’,x:8:3); x:=x+0.2;until x>1;
readln; end.
Имя программы – prim_ cikl2
{Описательная часть}
{Исполнительная часть}
Вывод сообщения на экран
Ввод данных с клавиатуры
Определение начального значения
Начало цикла
Вычисление значения функции
Вывод результата на экран
Увеличение параметра цикла на шаг
Проверка на выход из цикла
Действия, которые подчеркнуты в программе, необходимы для организации цикла.
3. Вычислить сумму ряда:
где n! = 1*2*…*n
Значение аргумента х и количество итераций n ввести с клавиатуры.
Введем дополнительную переменную для вычисления n! – f.
В программе используется оператор цикла с предусловием.
Программа
Пояснения
program cikl_3;
uses crt;
var x,y : real; i,n,f : integer;
begin
writeln (' введите x, n ');
readln(x, n);
y: =0; f: =1; i:=1;
while i<=n do begin
f:=f*I;
y:=y+sin(i*x)/f;
i:=i+1;
end;
writeln (' y = ', y:8:3);
readln; end.
Имя программы – prim_ cikl3
{Описательная часть}
{Исполнительная часть}
Вывод сообщения на экран
Ввод данных с клавиатуры
Определение начальных значений
Начало цикла
Подсчет n!
Вычисление значения функции
Увеличение параметра цикла на шаг
Вывод результата на экран
Действия, которые подчеркнуты в программе, необходимы для организации цикла.
4. Составить программу расчета таблицы значений функции f(x) на интервале a<=x<=b в n равностоящих точках. Границы интервала a,b и количество точек n ввести с клавиатуры. Результаты вывести на печать.
Найти сумму положительных значений функции f(x) на заданном интервале. Формула для расчета шага изменения аргумента:
dx = (b-a)/(n-1)
Составим таблицу идентификаторов:
Наименование переменной
Обозначения в программе
Функция
y
Аргумент
x
Количество расчетных точек
n
Начальное значение аргумента
a
Конечное значение аргумента
b
Шаг изменения аргумента
dx
Сумма положительных значений функции
s
Программа
Пояснения
program cikl_4;
var
y,x,a,b,dx,s : real; i,n : integer;
begin
writeln(‘Введите a,b,n’);
readln(a,b,n);
dx:=(b-a)/(n-1);
s:=0; x:=a;
for i:=1 to n do
begin
y:=(1-exp(-x)) * sin(4*pi*x);
writeln(‘y=’,y:8:3);
x:=x+dx;
if y>0 then s:=s+y;
end;
writeln(‘Сумма положительных значений s=’,s:8:3);
readln;
end.
Имя программы – prim_ cikl4
{Описательная часть}
{Исполнительная часть}
Вывод сообщения на экран
Ввод данных с клавиатуры
Шаг изменения xаргумента
Начало цикла
Вычисление значения функции
Вывод значений функции на экран
Увеличение параметра цикла на шаг
Подсчет сумму
Конец цикла
Вывод суммы на экран
Цикл организован с помощью оператора цикла с параметром for to do.
5. Рассмотрим задачу вывода на экран таблицы умножения, решение которой предполагает использование вложенных циклов.
Программа
Пояснения
program cikl_5;
var
i,j : byte;
begin
writeln(‘ Таблица умножения ’);
for i:=1 to 9 do
begin
for j:=1 to 9 do
writeln( i , ‘ * ‘ , j ,‘ = ’, i*j );
writeln;
end;
readln; end.
Имя программы – prim_ cikl5
{Описательная часть}
{Исполнительная часть}
Вывод сообщения на экран
Внешний цикл
Внутренний цикл
Вывод значений на экран
Вывод на экран пустой строки
Конец внутреннего и внешнего циклов
Вопросы для самоконтроля
1. Что такое цикл?
2. Какие циклы можно организовать на языке Паскаль?
3. В каких случаях предпочтительней использовать оператор for …to … do для организации циклов?
4. Какой тип должна иметь переменная, которая является параметром цикла в операторе for …to … do ?
5. Сколько циклов будет пройдено, если в операторе while … do условие не выполнилось с первого раза?
6. Сколько циклов будет пройдено, если в операторе repeat … until условие выполнилось с первого раза?