Алгоритмы, реализуемые с помощью вложенных циклов типа ДЛЯ




 

Язык

Схемы вложенных циклов типа для

Школьный АЯ

  нц для i от A1 до B1 
      тело внешнего цикла 
      . . . . . . 
      нц для j от A2 до B2 
          тело внутреннего цикла 
           . . . . . . 
      кц
      . . . . . . 
  кц

Pascal

  For i := A1 to B1 do
      begin  . . . . . . 
          For j := A2 to B2 do
              begin 
                   . . . . . . 
              end; 
           . . . . . . 
      end; 

Basic

  FOR I = A1 TO B1 STEP H1 
      . . . . . . 
      FOR J = A2 TO B2 STEP H2 
           . . . . . . 
      NEXT
       . . . . . . 
  NEXT


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

 

 

 

Пример 3.1. Вычислить суммы элементов столбцов заданной матрицы A(N, M).

 

Тест

 

Данные

Результат

N=2 

M=2

A=

S=(6,74)

 

Демонстрация

Школьный АЯ 

алг Суммы столбцов (арг цел N, M, арг вещ таб A[1:N, 1:M],
                    рез вещ таб S[1:M])
  дано | N>0, M>0
нач цел i, j
  нц для j от 1 до M | цикл по столбцам
    S[j]:=0
    нц для i от 1 до N | цикл по элементам
      S[j]:=S[j] + A[i, j] |текущего столбца
    кц
  кц
кон

Исполнение алгоритма 
 

j

i

S[i]

 

1

 

 

1

2

S1=0
S1=0+2=2
S1=2+4=6

 

2

 

 

1

2

S2=0
S2=0+1=1
S2=1+3=4

 

Блок-схема 

Turbo Pascal

Program SumColumn;
  Uses Crt;
  Var A          : Array [1..10, 1..10] of Real;
      N, M, i, j : Integer;
      S          : Array [1..10] of Real;
  {--------------------------------------------}
  Procedure InputOutput;
    Begin {описание процедуры ввода-вывода исходных данных}
      ClrScr;
      Write('Количество строк - '); ReadLn(N);
      Write('Количество столбцов - '); ReadLn(M);
      For i := 1 to N do {Ввод элементов матрицы}
        For j := 1 to M do
          begin Write('A[' , i , ', ' , j , ']= ? '); {вывод запроса}
                ReadLn(A[i, j]) {ввод значения}
          end; WriteLn;
      ClrScr;
      WriteLn(' Матрица А');
      For i := 1 to N do {Вывод матрицы по строкам}
        begin
          For j := 1 to M do Write(A[i, j] : 5 : 1); {вывод i-ой строки}
          WriteLn {перенос курсора на начало следующей строки}
        end; WriteLn
    End; { of InputOutput }
  {--------------------------------------------}
  Procedure SumCol;
    Begin {описание процедуры вычисления сумм элементов столбцов}
      For j := 1 to M do {цикл по столбцам матрицы}
        begin
          S[j] := 0; {обнуление суммы элементов j-го столбца}
          For i := 1 to n do S[j] := S[j] + A[i, j] {накопление суммы}
        end;
    End; { of SumCol }
  {--------------------------------------------}
  Procedure OutResult; {описание процедуры вывода результатов}
    Begin
      Write( 'О т в е т : Суммы элементов столбцов равны ');
      For j := 1 to M do Write(S[j] : 5 : 1); WriteLn; ReadLn
    End; { of OutResult }
  {--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода исходных данных }
  SumCol; {вызов процедуры вычисления сумм }
  OutResult; {вызов процедуры вывода результатов}
END.

 
QBasic

CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M), S(M) 'Резервирование памяти для матрицы A и вектора S
FOR i = 1 TO N 'Ввод матрицы
  FOR j = 1 TO M
    PRINT "A(" ; i ; ", " ; j ; ") = ";
    INPUT A(i, j)
  NEXT j
NEXT i
FOR j = 1 TO M 'Вычисление сумм элементов столбцов
  S(j) = 0
  FOR i = 1 TO N
    S(j) = S(j) + A(i, j)
  NEXT i
NEXT j
PRINT "О т в е т : Суммы элементов столбцов равны ";
FOR j = 1 TO M
  PRINT S(j);
NEXT j : PRINT
END

 

 

Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной матрице A(N, M) максимальное по величине число.

 

Тест

 

Данные

Результат

N=2 

M=3

A=

K=3

 

Демонстрация

Школьный АЯ

алг Количество максимумов(арг цел N,M, арг цел таб А[1:N,1:M], рез цел K)
нач цел i, j, Amax
  Amax := A[1, 1] | Поиск максимального элемента матрицы
  нц для i от 1 до N
    нц для j от 1 до M
      если A[i, j] > Amax
        то Amax := A[i, j]
      все
    кц
  кц 
 
  K := 0 | подсчет количества вхождени