Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика алгоритмизации и программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
517.53 Кб
Скачать

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

 

Пример 6.3. Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы).

Система тестов

 

Номер теста

Проверяемый случай

Данные

Результат

N

Матрица А

Otvet

1

Является

3

''Магический квадрат''

2

Не является

2

''Не магический квадрат ''