Пример 5.2.
Дана целочисленная матрица A(N, N). Определить, имеются ли среди
её элементов, лежащих ниже главной диагонали, отрицательные числа.
Система тестов
Номер
теста
|
Проверяемый
случай
|
Данные
|
Результат
|
N
|
Массив А
|
Otvet
|
1
|
Имеются
|
4
|
1 -1 2 1
2 3 1 0
1 -1 2 -1
-2 1 0 1
|
''Есть отрицательные числа''
|
2
|
Не имеются
|
3
|
1 -1 2
1 0 1
2 1 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
|
"Нет"
|
+
|
1
2
|
+
-(кц)
|
-
|
|
3
|
"Да"
|
+
|
1
2
3
|
+
+
-(кц)
|
-
+
|
|
4
|
|
-(кц)
|
|
|
|
"Есть отрицательные"
|
2
|
2
|
"Нет"
|
+
|
1
2
|
+
-(кц)
|
-
|
|
3
|
|
+
|
1
2
3
|
+
+
-(кц)
|
-
-
|
|
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 }
{--------------------------------------------}
BEGIN
InputOutput(A); {вызов процедуры ввода-вывода данных }
Solution(A); {вызов процедуры поиска решения задачи}
OutResult {вызов процедуры вывода результата }
END.
QBasic
CLS : INPUT "Количество строк и столбцов матрицы = ", N
DIM A(N, N)
FOR i = 1 TO N
FOR j = 1 TO N
PRINT "A(" ; i ; ", " ; j ; ") = " ;
INPUT A(i, j)
NEXT j
NEXT i
CLS : PRINT "Матрица А"
FOR i = 1 TO N
FOR j = 1 TO N
PRINT A(i, j);
NEXT j : PRINT
NEXT i
i = 2 : Flag = 0
WHILE (i < = N) AND (Flag = 0)
j = 1
WHILE (j < i ) AND (Flag = 0)
IF A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1
WEND
i = i + 1
WEND
PRINT : PRINT "О т в е т :"
PRINT "Среди элементов матрицы, лежащих ниже главной диагонали, ";
IF Flag = 1 THEN
PRINT "есть отрицательные."
ELSE PRINT "нет отрицательных."
END IF
END