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

      Комментарии к записи Pascal. Вложенные циклы отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 мес., 4 нед. назад.

  • Автор
    Сообщения
  • #3735

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

    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. В качестве доказательства предлагаю разобраться в следующей программе.

    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 фигурка выводиться на экран.

    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.

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

Для ответа в этой теме необходимо авторизоваться.