Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачник по программированию.doc
Скачиваний:
25
Добавлен:
03.11.2018
Размер:
1.94 Mб
Скачать

Глава 3. Алгоритмы, реализуемые с помощью вложенных циклов типа для

Язык

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

Алгоритмический язык

нц для i от A1 до B1

тело внешнего цикла

. . . . . .

нц для j от A2 до B2

тело внутреннего цикла

. . . . . .

кц

. . . . . .

Кц

Pascal

For i := A1 to B1 do

begin . . . . . .

For j := A2 to B2 do

begin

. . . . . .

end;

. . . . . .

end;

Вложенные циклы типа для особенно часто используются при обработке матриц

(двумерных массивов, прямоугольных таблиц) и векторов (одномерных массивов,

линейных таблиц):

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

Тест

Данные

Результат

N=2

M=2

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.

Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной

матрице A(N, M) максимальное по величине число.

Тест

Данные

Результат

N=2

M=3

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 | подсчет количества вхождений Amax

нц для i от 1 до N

нц для j от 1 до M

если A[i, j] = Amax

то K := K+1

все

кц

кц

кон

Turbo Pascal

Program NumberOfMaximums;

Uses Crt;

Type Mas = Array [1..10, 1..10] of Integer;

Var A : Mas;

N, M, K, Amax, i, j : Integer; {K - искомый результат}

{--------------------------------------------}

Procedure InputOutput(Var A : Mas);

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 );

WriteLn;

end; WriteLn;

End; { of InputOutput }

{--------------------------------------------}

Procedure MaxElement(Var A : Mas; Var Amax : Integer);

Begin {описание процедуры поиска Amax}

Amax := A[1, 1];

For i := 1 to N do

For j := 1 to M do

If A[i, j] > Amax then Amax := A[i, j];

End; {of MaxElement}

{--------------------------------------------}

Procedure HowMuch(Var A : Mas; K : Integer);

Begin {описание процедуры подсчета числа вхождений Amax}

K:=0;

For i := 1 to N do

For j := 1 to M do

if A[i, j] = Amax then K := K+1;

WriteLn('Максимальное число ', Amax : 3, ' встречается ', K, ' раз(a)'); ReadLn;

End; {of HowMuch}

{--------------------------------------------}

BEGIN

InputOutput(A); {Вызов процедуры ввода-вывода матрицы}

MaxElement(A, Amax); {Вызов процедуры поиска макс. элемента}

HowMuch(A, K); {Вызов процедуры подсчета числа вхождений максимального элемента }

END.