Алгоритмы, реализуемые с помощью вложенных циклов типа ДЛЯ
Язык
Схемы вложенных циклов типа для
Школьный АЯ
нц для 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 J
. . . . . .
NEXT I
Вложенные циклы типа для особенно часто используются при обработке матриц (двумерных массивов, прямоугольных таблиц) и векторов (одномерных массивов, линейных таблиц):
Пример 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.
QBasicCLS
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 iFOR j = 1 TO M 'Вычисление сумм элементов столбцов
S(j) = 0
FOR i = 1 TO N
S(j) = S(j) + A(i, j)
NEXT i
NEXT jPRINT "О т в е т : Суммы элементов столбцов равны ";
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, AmaxAmax := A[1, 1] | Поиск максимального элемента матрицынц для i от 1 до Nнц для j от 1 до Mесли A[i, j] > Amax
то Amax := A[i, j]всекцкцK := 0 | подсчет количества вхождени