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


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


QBasic

CLS : INPUT "Введите целое K = ", K 
PRINT "Введите целочисленную матрицу А" 
INPUT "Количество строк - ", N 
INPUT "Количество столбцов - ", M 
DIM A(N, M) 
FOR i = 1 TO N 
  FOR j = 1 TO M 
    PRINT "A(" ; i ; ", " ; j ; ") = " ; 
    INPUT A(i, j) 
  NEXT j 
NEXT i : CLS 
PRINT "Исходная матрица " 
FOR i = 1 TO N 
  FOR j = 1 TO M 
    PRINT A(i, j); 
  NEXT j : PRINT 
NEXT i : PRINT
Flag = 0 : j = 1 
WHILE (j <= M) AND (Flag = 0) 'цикл по столбцам с прерыванием 
  JMax = A(1, j) 
  FOR i = 2 TO N 'цикл нахождения JMax 
    IF A(i, j) > JMax THEN JMax = A(i, j) 
  NEXT i 
  IF K = JMax THEN Flag = 1 ELSE j = j + 1 'условие прерывания 
WEND 
PRINT "О т в е т : число"; K; 
IF Flag = 1 THEN 
    PRINT "встречается"; 
  ELSE PRINT "не встречается"; 
END IF 
PRINT " среди максимальных элементов столбцов матрицы" 
END
 

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