[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 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
 

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]