«

»

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

В прошлой статье речь шла о простых циклах в Паскале, таких которые не содержат в себе других циклов. Тут мы разберем принцип работы циклов, называемых вложенными. Рассмотрим их на примере цикла с параметром:

For <счетчик 1>:=<начальное знач.> To <конечное знач.> Do <тело цикла 1>;
For <счетчик 2>:=<начальное знач.> To <конечное знач.> Do <тело цикла 2>;

For <счетчик n>:=<начальное знач.> To <конечное знач.> Do <тело цикла n>;

Вернувшись к терминологии, отметим, что в таких структурах одни циклы называются внешними, а другие внутренними. Так цикл 2 относительно цикла 1 является внутренним, а для цикла n он внешний.

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

Предположим у нас есть вложенные циклы for:

for i:=1 to m1 do
for j:=1 to m2 do

for k:=1 to mn do

Количество проходов по первому циклу = m1, второму = m2*m1, n-ому = mn*mn-1*mn-2*..*m2*m1. В качестве доказательства предлагаю разобраться в следующей программе.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
program counter_performance;
uses crt;
var i, j, k, g, h: integer;
s_i, s_j, s_k, s_g, s_h: integer;
begin
s_i:=0; s_j:=0; s_k:=0; s_g:=0; s_h:=0;
for i:=1 to 5 do
begin
s_i:=s_i+1;
for j:=1 to 3 do
begin
s_j:=s_j+1;
for k:=1 to 19 do
begin
s_k:=s_k+1;
for g:=1 to 10 do
begin
s_g:=s_g+1;
for h:=1 to 6 do
s_h:=s_h+1;
end;
end;
end;
end;
write('i=',s_i,' j=',s_j,' k=',s_k,' g=',s_g,' h=',s_h);
readkey;
end.

 

Имеются 5 циклов со счётчиками от i до h. В каждом из них при помощи переменных подсчитывается, сколько раз выполняется каждый цикл. Запустив программу на своем компьютере, Вы должны увидеть такой результат:

 

Результат работы вложенных циклов

 

Посчитав способом, изложенным выше, получите результат соответствующий величинам, отображенным на скриншоте.

Вложенные конструкции аналогично работают в циклах с предусловием и постусловием. В следующей программе с помощью оператора while фигурка выводиться на экран.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program nested_loops;
uses crt;
var i, j: integer;
begin
i:=1; j:=1;
while i<20 do begin
while j<i+1 do begin
write('\');
j:=j+1;
end;
j:=1;
i:=i+1;
writeln;
end;
readkey;
end.

 

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вы можете использовать эти теги HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Проверка на человечность *