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

InputOutput; {Вызов процедуры ввода-вывода }

  MagicOrNot(Flag); {Вызов процедуры решения задачи } 

If Flag then WriteLn('Это магический квадрат.')

          else WriteLn('Это не магический квадрат.'); 

  ReadLn 

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 "Исходная матрица: " : PRINT 

FOR i = 1 TO N 

  FOR j = 1 TO N 

    PRINT A(i, j); 

  NEXT j : PRINT 

NEXT i : PRINT

Standard = 0 'вычисление суммы-эталона Standard 

FOR i = 1 TO N 

   Standard = Standard + A(i, i) 

NEXT i

Flag = 1 : i = 1 

WHILE (i <= N) AND (Flag = 1) 'вычисление сумм элементов строк 

  S = 0 

  FOR j = 1 TO N 

    S = S + A(i, j) 

  NEXT j 

  IF S <> Standard THEN Flag = 0 ELSE i = i + 1 

WEND

j = 1 

WHILE (j <= N) AND (Flag = 1) 'вычисление сумм элементов столбцов 

  S = 0 

  FOR i = 1 TO N 

    S = S + A(i, j) 

  NEXT i 

  IF S <> Standard THEN Flag = 0 ELSE j = j + 1 

WEND

IF Flag = 1 THEN 

  S = 0 'вычисление суммы элементов побочной диагонали 

  FOR i = 1 TO N 

    S = S + A(i, N + 1 - i) 

  NEXT i 

END IF  

IF S <> Standard THEN Flag = 0

IF Flag = 1 THEN PRINT "Это магический квадрат." 

  ELSE PRINT "Это не магический квадрат." 

END IF : PRINT 

END

Пример 6.4. Дана матрица a(n, n). Если хотя бы один элемент строки матрицы отрицателен, то все элементы этой строки заменить нулями. Тест

Данные

Результат

N

Матрица А

Матрица А

3

Демонстрация

Начало формы

Конец формы

Школьный АЯ  (в этом алгоритме отражены процессы  ввода  исходных данных и вывода результатов )

алг Модификация(арг цел N, арг рез 

                вещ таб A[1:N, 1:N])

  дано | N>0

  надо | элементы строк, содержащих отрица-

       | тельные числа, заменены на нули

нач цел i, j, лит Flag

  ввод N

  нц для i от 1 до N

    нц для j от 1 до N

       ввод A[i,j]

    кц

  кц

  нц для i от 1 до N | цикл по строкам 

    j := 1; Flag := "Нет"

    нц пока (j<=N) и (Flag = "Нет") |цикл до 

       если A[i, j]<0    |первого отрицат.

         то Flag := "Да" |элемента строки

         иначе j:=j+1

       все

    кц

    если Flag = "Да" |обнуление строки

      то нц для j от 1 до N

          A[i, j]:=0

         кц

    все

  кц

  нц для i от 1 до N

    нц для j от 1 до N

       вывод A[i,j]

    кц

  кц

кон

Блок-схема (фрагмент)

Исполнение алгоритма

 

Обозначение проверяемого условия:  (j<=N) и (Flag = "Нет")=> (1)

i

Flag

j

(1)

A[i,j]<0

Flag="Да"

A[i,j]

1

"Нет"  "Да"

1  2  1  2  3

+  +  -(кц)

-  +

+

A[1,1]=0  A[1,2]=0  A[1,3]=0

2

"Нет"

1  2  3  4

+  +  +  -(кц)

-  -  -

-

 

3

"Нет"  "Да"

1  1  2  3

+  -(кц)

+

+

A[3,1]=0  A[3,2]=0  A[3,3]=0

Turbo Pascal

Program Modify;

 Uses Crt;

 Var A       : Array[1..10, 1..10] of Real;

     N, i, j : Integer;

{-------------------------------------}

Procedure InputOutput; {описание процедуры ввода-вывода матрицы}

 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; ClrScr;

   WriteLn(’ Исходная матрица :’); WriteLn;

   For i := 1 to N do

     begin

       For j := 1 to N do Write(A[i, j] : 5 : 1);

       WriteLn

     end; WriteLn

 End; { of InputOutput }

{-------------------------------------------}

Procedure Line(Var i : Integer);         {описание процедуры обработки}