Пример 5.2.
Дана целочисленная матрица A(N, N). Определить,
имеются ли среди её элементов, лежащих ниже
главной диагонали, отрицательные числа.
Система тестов
Номер теста
Проверяемый
случай
Данные
Результат
N
Массив А
Otvet
1
Имеются
4
1 -1 2 12
3 1 01-1 2 -1-210 1
''Есть отрицательные
числа''
2
Не имеются
3
1 -1 21 0
121 1
''Нет отрицательных
чисел''
Демонстрация
Школьный АЯ
алг Ниже диагонали (аргцел N, аргцел таб
A[1:N, 1:N], резлит Otvet)начцел i, j, лит Flag
Flag:="Нет"; i:=2
нцпока(i< =N) и (Flag="Нет") | цикл по строкам
j:=1
нцпока(j<i) и (Flag="Нет")
| цикл по элементам строки
еслиA[i, j]<0 | условие прерывания циклов
то Flag:="Да"
иначе j:=j+1 | продвижение по строке
все
кц
i:=i+1 | переход на новую строку
кц еслиFlag="Да"
то Otvet:="Есть отрицательные ниже диагонали"
иначе Otvet:="Нет отрицательных ниже диагонали"
все
кон
Блок-схема (фрагмент)
Исполнение алгоритма
Обозначения проверяемых условий:
(i
<= N) и (Flag = "Нет") => (1)
(j < i) и (Flag = "Нет")
=> (2)
N теста
i
Flag
(1)
j
(2)
A[i]=A[j]
Otvet
1
2
"Нет"
+
12
+-(кц)
-
3
"Да"
+
123
++-(кц)
-+
4
-(кц)
"Есть отрицательные"
2
2
"Нет"
+
12
+-(кц)
-
3
+
123
++-(кц)
--
4
-(кц)
"Нет отрицательных"
Turbo Pascal
Program UnderDiagonal;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Integer;
Var A : Mas;
N, i, j : Integer;
Flag : Boolean;
{-----------------------------------}
Procedure InputOutput(Var A : Mas); {описание процедуры }
Begin {ввода-вывода данных}
ClrScr;
Write('Количество строк и столбцов - '); ReadLn(N);
For i := 1 to N do
For j := 1 to N do
begin Write('A[' , i , ', ' , j , ']= ? ');
ReadLn(A[i, j])
end; WriteLn;
WriteLn('Матрица :');
For i := 1 to N do
begin
For j := 1 to N do Write(A[i, j] : 5);
WriteLn
end; WriteLn
End; { of InputOutput }
{------------------------------------}
Procedure Solution(Var A : Mas); {описание процедуры поиска решения}
Begin
i := 2 ; Flag := FALSE;
While (i<=N) and not Flag do
begin
j:=1;
While (j<i) and not Flag do
If (A[i, j]<0)
then Flag:=TRUE
else j:=j+1;
i:=i+1
end;
End; { of Solution }
{--------------------------------------------}
Procedure OutResult;
Begin
WriteLn('О т в е т :');
Write('Среди элементов, лежащих ниже главной диагонали, ');
If Flag then WriteLn('есть отрицательные.')
else WriteLn('нет отрицательных.');
ReadLn
End; { of OutResult }
{--------------------------------------------}
BEGINInputOutput(A);{вызов процедуры ввода-вывода данных }
Solution(A); {вызов процедуры поиска решения задачи}
OutResult{вызов процедуры вывода результата }
END.