Пример 6.2.
Дана целочисленная матрица A(N, M). Определить,
встречается ли заданное целое K среди
максимальных элементов столбцов этой
матрицы.
Система тестов
Номер
теста
Проверяемый
случай
Данные
Результат
K
N
M
Матрица А
Otvet
1
Встречается
5
3
3
''Встречается''
2
Не встречается
1
2
2
''Не встречается''
Демонстрация
Школьный АЯ
алг Да или Нет(арг цел N,M,K, арг цел табA[1:N, 1:M], рез лит Otvet)
дано | N, M >0
нач цел i, j, JMax, лит Flag
Flag:="Нет"; j:=1
нц пока(j<=M) и (Flag="Нет")
| цикл по столбцам с прерыванием
JMax:=A[1,j]
нц для i от 2 до N | цикл нахождения JMax
еслиA[i,j]>JMaxто JMax:=A[i, j]
всекц
еслиK=JMax | условие прерывания цикла
то Flag:="Да"
иначе j:=j+1
все
кц
если Flag="Да"
то Otvet := "Встречается"
иначе Otvet := "Не встречается"
все
кон
Блок-схема (фрагмент)
Исполнение алгоритма
Обозначение проверяемого условия: (j<=M) и (Flag = "Нет" )
=> (1)
N теста
Flag
j
(1)
Jmax
I
A[i,j]>Jmax
K=Jmax
1
"Нет"
1
+
1 4
2 3
+ -
-
"Да"
2
+ -(кц)
5
2 3
- -
+
2
"Нет"
1 2 3
+ + -(кц)
2 1 2
2 2
- +
- -
Turbo Pascal
Program Checking;
Uses Crt;
Var A : Array[1..10, 1..10] of Integer;
N, M, i, j : Integer;
K : Integer; {заданное число}
JMax : Integer; {максимальный элемент столбца}
Flag : Boolean;
{---------------------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода}
Begin
ClrScr;
Write('Введите целое K = '); ReadLn(K); WriteLn;
WriteLn('Введите целочисленную матрицу А');
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; ClrScr;
WriteLn('Исходная матрица :'); WriteLn;
For i := 1 to N do
begin
For j := 1 to M do Write(A[i, j] : 4);
WriteLn
end; WriteLn;
End; { of InputOutput }
{--------------------------------------------}
Procedure YesOrNot(Var Flag:Boolean); {описание процедуры решения задачи}
Begin
Flag:=FALSE; j:=1;
While (j<=M) and not Flag do {цикл по столбцам с прерыванием}
begin JMax:=A[1, j];
For i := 2 to N do {цикл нахождения JMax}
If A[i, j]>JMax then JMax:=A[i, j];
If K=JMax then Flag:=TRUE else j:=j+1 {условие прерывания}
end;
End;
{--------------------------------------------}
BEGIN
InputOutput; {вызов процедуры ввода-вывода исходных данных}
YesOrNot(Flag); {вызов процедуры решения задачи}
Write('О т в е т : число ', K );
If Flag then Write(' встречается')
else Write(' не встречается');
WriteLn(' среди максимальных элементов столбцов матрицы');
ReadLn
END.