Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

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

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

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

for i: =1 to 9 do

for j : = 1 to 9 do

WriteLn (i, ‘x’, j,’=’, i * j);

Для каждого из девяти значений параметра внешнего цикла i (множимо­го) исполнится внутренний цикл, в котором его параметр j (множитель) меня­ется от 1 до 9.

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

2.1. Структура вложенных циклов

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

Задача 2

Вычислить значение функции Y = 2К + I. При этом I меняется от едини­цы до трех с шагом, равным единице, а К меняется от трех до девяти с ша­гом, равным двум.

Program Lab5_2;

Var

I, К, Y: integer;

Begin {1}

For N: = 1 to 3 Do {Внешний цикл по N}

Begin {2}

К: = 3;

While К < = 9 Do

Begin {3} {Внутренний цикл по К}

Y : = 2 * К +1;

WriteLn (1: 4, К : 4, Y : 4);

К : = К + 2;

End;{3}

End; {2}

End. {1}

Пояснения к задаче 2

Согласно условию зада­чи мы должны сделать вычисления по формуле: Y : = 2 * К +1.

Поскольку в формуле две переменные I и К меняют свои значения, орга­низовано два цикла:

  • внешний цикл по I (с шагом 1);

  • внутренний цикл по К (с шагом 2).

6. Организация циклов с помощью оператора while

Этот оператор организует так называемый цикл «ПОКА», или цикл с предусловием, так как проверка проводится перед началом очередной итера­ции (неизвестно количество повторений цикла):

WHILE < Условие > DO <тело цикла>;

Оператор while позволяет многократно выполнять одни и те же действия в зависи­мости от некоторого < Условия >, которое записывается между ключевыми словами while и do и должно быть выражением бу­левского типа, т. е. принимать только зна­чения True или False.

Ц икл выполняется, пока < Условие > истинно. Как только < Условие > наруша­ется, выполнение цикла завершается. Блок- схема цикла while:

Общую структуру оператора цикла с предусловием можно представить одним из двух следующих способов:

1. Если тело цикла состоит из одного оператора, то операторные скобки Begin … End можно не ставить:

while < Условие > do <Оператор>;

2. Если тело цикла состоит из нескольких операторов, то операторные скобки Begin … End необходимо ставить:

while < Условие > do

begin

<Оператор>;

<Оператор>;

end;

Задача 1

При вводе осуществить проверку длины вводимой последовательности.

Program Lab6_l;

Var

N: integer;

BEGIN {1}

ReadLn (N);

While N < = 0 Do

Begin {2}

WriteLn ('Введите длину последовательности N =');

ReadLn (N);

End; {2}

WriteLn ('Длина последовательности N =N);

END. {1}

Пояснения к задаче 1

До первого входа в цикл переменной N уже должно быть присвоено на­чальное значение соответственно условию решаемой задачи.

N - длина последовательности, что влечет за собой необходимость вы­полнения логического условия N > 0 (длина не может быть отрицательной). До тех пор пока мы будем вводить отрицательное или равное нулю число, цикл будет работать и требовать «Введите длину последовательности N = ».

Так как в цикле имеем два оператора, необходимо ставить операторные скобки Begin…End. В фигурных скобках {2} стоит номер операторных ско­бок. Напоминаем, что в фигурных скобках ставится комментарий, служащий для пояснения работы программы. Комментарий не вызывает никаких дейст­вий в программе, и его можно убрать без последствий для работы программы.

Задача 2

Рассмотрим программу с использованием оператора цикла с предуслови­ем, когда в качестве логического < Условия > стоит выражение 2*А < = 3*N +1.

Program Lab6_2;

Var

N, A: integer;

Begin {1}

A: = 1;

N: = 2;

While 2*A< = 3*N+l Do

Begin {2}

A: = A + 2;

N: = N + 1;

End; {2}

WriteLn ('A = A =, 'B = ',B =);

End. {1}

Пояснения к задаче 2

Пока условие 2*A< = 3*N+1 является истинным (т. е. 2 * А оказыва­ется меньше или равно 3 * N + 1), выполняются операторы циклической час­ти: значение А увеличивается на 2 и результат вновь присваивается перемен­ной А; значение N увеличивается на 1 и результат снова помещается в переменную N. Начальные значения переменных присвоены до начала опера­тора цикла (N: = 1; А: = 1).

Переменные А и N, а также логическое выражение 2*A< = 3*N+1 в про­цессе выполнения программы принимают значения, которые мы видим в табл. 7.

Таблица 7

Идентификаторы и выражение

Проходы цикла

Первый

Второй

Третий

Четвертый

А

1

3

5

7

N

1

2

3

4

2*A<=3*N+1

2 < = 4

6 < = 7

10 <= 10

14<= 13

Условие True

или False

True

Истинно

True

Истинно

True

Истинно

False

Ложно

Всего цикл проработает четыре раза. При А = 7 и N = 4 логическое выражение 2*A< = 3*N+1 становится ложным (False) и управление передается за пределы цикла (за End {2}).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]