TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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

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

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

 
Номер теста Проверяемый случай Данные Результат
N Матрица А Otvet
1 Является 3 ''Магический квадрат''
2 Не является 2 ''Не магический квадрат ''
 
Демонстрация
Школьный АЯ
алг Магический квадрат (арг цел 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 до N 
      S:=S+A[i, j] 
    кц 
    если S<>St                 |сравнение суммы элементов текущего 
      то Flag:="Нет"           |столбца с эталонной суммой 
      иначе j:=j+1 
    все 
  кц
  если Flag="Да" 
    то S:=0 | вычисление суммы элементов побочной диагонали 
      нц для i от 1 до N 
        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 
  InputOutput; {Вызов процедуры ввода-вывода } 
  MagicOrNot(Flag); {Вызов процедуры решения задачи } 
  If Flag then WriteLn('Это магический квадрат.') 
          else WriteLn('Это не магический квадрат.'); 
  ReadLn 
END.
 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz