Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций для студентов направления 230100 ту...doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
7.52 Mб
Скачать

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

Если цикл включает в себя один или несколько циклов, то содержащий внутри себя другие циклы называется внешним, а цикл, содержащийся в другом цикле вложенным. При программировании вложенных циклов необходимо выполнить правило: внутренний оператор цикла и принадлежащая ему область действия должны полностью содержаться внутри области внешнего цикла, таким образом внешний цикл всегда начинается раньше, а заканчивается позже, чем внутренний. Блок – схема вложенного цикла представлена на Рисунок 17 .115 – Блок-схема, соответствующая вложенному циклу.

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

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

Пример использования:

var i, j, n: integer;

begin

Readln(n);

for i:=1 to n div 2 do

for j:=1 to n div 2 do

if i*i + j*j = n then

Writeln(i, ‘,’, j);

end;

В каждом из циклов рассматривается диапазон значений от 1 до половины величины введенного числа (потому что сумма квадратов половин числа заведомо больше или равна этому числу). Можно найти дополнительные способы улучшить этот код, в частности, вынести вычисленные произведения i*i из тела вложенного цикла, потому что это произведение не имеет смысла многократно вычислять во вложенном цикле, где оно всегда будет иметь одно и то же значение, а операция умножения для процессора достаточно медленная.

или

for i := 1 to n do

for j := 1 to n do

Рисунок 17.115 – Блок-схема, соответствующая вложенному циклу

17.8. Примеры задач с циклами

  1. Вычисление суммы элементов ряда.

program summr;

var

i:integer;

elem, summ:real;

begin

sum:=0;

for i:=1 to 5 do

begin

elem:=1/i;

sum:=sum+elem;

writeln(i:2,’’,elem:4:2);

end;

writeln(‘Сумма элементов ряда: ‘summ:4:2’);

end.

  1. Вычисление числа ПИ с заданной точностью.

program pi;

var

n:integer;

p, t, elem:real;

begin

p:=0;

n:=1;

elem:=1;

write(‘Задайте точность вычисления ПИ ’);

readln(t);

writeln(‘Вычисление ПИ с точностью’,t:9:6);

while elem >= t do

begin

elem:=1/(2*n-1);

if (n mod 2) = 0

then p:=p-elem

else p:=p+elem;

n:=n+1;

end;

p:=p*4;

writeln(‘Значение ПИ с точностью’,t:9:6,’равно’,p:9:5);

writeln(‘Просуммировано’,n,’ членов ряда’);

end.

  1. Вычисление суммы положительных чисел, введенных с клавиатуры.

program summrep;

var

summ, numb:integer;

begin

writeln(‘Вычисление суммы положительных целых чисел’);

summ:=0;

repeat

write(‘->’);

readln(numb);

if numb>0 then sum:=sum+numb;

until numb <= 0;

writeln(‘Сумма введенных чисел: ’summ);

end.