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

Другие записи

10.06.2016. Пример 5.3. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зенит" игроки одинакового роста.
Система тестов  Обозначения:   N -  количество игроков в команде "Спартак";   M -  количество игроков в команде "Зенит";   S(N) - массив ростов игроков команды "Спартак" (см);   Z(N) - массив ростов…
10.06.2016. Пример 5.4. Из партии шин отобрать две шины, диаметры которых отличаются не более, чем на D см, а вес — не более, чем на W грамм.
Система тестов N теста Проверяемый случай Данные Результат N шины Диаметр Вес Допуски Otvet диам. вес 1 Есть такие шины 1 2 3 4 103 100 99 101 98 100 101 99  1  1 "2-я…