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

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

Начало формы

Конец формы

Школьный АЯ

алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet)

    дано | N>0

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

  St:=0              | вычисление суммы элементов главной диагонали 

  нц для i от 1 до N | в качестве эталонной суммы St 

    St:=St+A[i, i] 

  кц

  Flag:="Да"; i:=1 

  нц пока (i<=N) и (Flag="Да") | вычисление сумм элементов строк 

    S:=0 

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

      S:=S+A[i, j] 

    кц 

    если S<>St | сравнение суммы элементов текущей строки с эталонной 

      то Flag:="Нет" 

      иначе i:=i+1 

    все 

  кц

  j:=1 

  нц пока (j<=N) и (Flag="Да") | вычисление сумм элементов столбцов 

    S:=0 

    нц для i от 1 до

      S:=S+A[i, j] 

    кц 

    если S<>St                 |сравнение суммы элементов текущего 

      то Flag:="Нет"           |столбца с эталонной суммой 

      иначе j:=j+1 

    все 

  кц

  если Flag="Да" 

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

      нц для i от 1 до

        S:=S+A[i, N+1-i] 

      кц 

      если S<>St | сравнение суммы с эталонной 

        то Flag:="Нет" 

      все 

  все 

  если Flag="Да" 

    то Otvet := "Это магический квадрат." 

    иначе Otvet := "Это не магический квадрат." 

  все 

кон

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

Вычисление суммы   элементов главной   диагонали в качестве   эталонной суммы

Вычисление сумм   элементов строк и   сравнение их с   эталонной суммой          

 

Блок-схема (продолжение)

 

Вычисление сумм 

элементов столбцов

и сравнение их с 

эталонной суммой 

 

 

 

 

Вычисление суммы 

элементов побочной 

диагонали и сравнение 

ее с эталонной суммой

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

 

(в таблице отражен только конечный результат работы циклов типа для, в которых вычисляются суммы)  Обозначения проверяемых условий:  (i<=N) и (Flag = "ДА" )=> (1)  (j<=N) и (Flag = "ДА" )=> (2)   Flag = "ДА"  => (3)

 

  теста

St

Flag

i

(1)

j

(2)

(3)

S

S<>St

Otvet

1

6

"Да"

1  2  3  1,2,3  1,2,3  1,2,3  1,2,3

+  +  +

1,2,3  1,2,3  1,2,3  1  2  3

    

+  +  +

    

+

6  6  6  6  6  6  6

-  -  -  -  -  -  -

    

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

2

4

"Да"  "Нет"

1

+  -(кц)

1,2  1

-(кц)

-

3

+

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

Turbo Pascal

Program MagicSquare; 

Uses Crt; 

Var A : Array [1..20, 1..20] of Integer; 

    i, j, N : Integer; 

    Standard, S : Integer; {Standard - сумма-эталон, S - текущая сумма

    Flag : Boolean; 

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

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

      WriteLn 

    end; WriteLn 

End; { of InputOutput } 

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

Procedure MagicOrNot(Var Flag : Boolean);          {описание процедуры, }

                 {в которой выясняется, является ли квадрат "магическим"} 

 Begin   {вычисление суммы элементов главной диагонали} 

         {в качестве эталонной суммы} 

  Standard:=0; 

  For i := 1 to N do Standard := Standard + A[i,i];

  Flag:=TRUE; i:=1; 

  While (i<=N) and Flag do {вычисление сумм элементов строк

    begin 

      S:=0; 

      For j := 1 to N do S := S+A[i, j]; 

      If S<>Standard then Flag := FALSE else i:=i+1 

    end;

  j:=1; 

  While (j<=N) and Flag do {вычисление сумм элементов столбцов

    begin 

      S:=0; 

      For i := 1 to N do S:=S+A[i, j]; 

      If S<>Standard then Flag := FALSE else j := j+1 

    end;

  If Flag then 

    begin 

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

      For i := 1 to N do S := S+A[i, N+1-i]; 

      If S<>Standard then Flag := FALSE; 

    end; 

End; 

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

BEGIN