Advertisement
Vanya_Shestakov

Magic square(Delphi)

Oct 3rd, 2020 (edited)
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.03 KB | None | 0 0
  1. program laba2_3;
  2. uses
  3.     System.SysUtils;
  4. type
  5.     TwoDimensionalArray = Array of Array of Integer;
  6.  
  7. function InputOrder(): Integer;
  8. var
  9.     Order: Integer;
  10.     IsCorrect: Boolean;
  11. begin
  12.     Writeln('Введите порядок матрицы (от 2 до 6)');
  13.     repeat
  14.         IsCorrect := True;
  15.         try
  16.             Readln(Order);
  17.         except
  18.             Writeln('Введите целое число!');
  19.             IsCorrect := False;
  20.         end;
  21.  
  22.         if (IsCorrect) and ((Order < 2) or (Order > 6)) then
  23.         begin
  24.             Writeln('Некорректные данные. Введите длину из указанного диапазона');
  25.             IsCorrect := False;
  26.         end;
  27.     until IsCorrect;
  28.     InputOrder := Order;
  29. end;
  30.  
  31. procedure InputMatrix(var Matrix: TwoDimensionalArray);
  32. var
  33.     I, J: Integer;
  34.     IsCorrect: Boolean;
  35. begin
  36.     for I := 0 to High(Matrix) do
  37.         for J := 0 to High(Matrix) do
  38.         begin
  39.             repeat
  40.                 Writeln('Введите элемент матрицы а', i + 1, j + 1);
  41.                 IsCorrect := True;
  42.                 try
  43.                     Readln(Matrix[I][J]);
  44.                 except
  45.                     Writeln('Введите натуральное число!');
  46.                     IsCorrect := False;
  47.                 end;
  48.  
  49.                 if (IsCorrect) and (Matrix[I][J] < 1) then
  50.                 begin
  51.                     Writeln('Введите натуральное число!');
  52.                     IsCorrect := False;
  53.                 end;
  54.             until IsCorrect;
  55.         end;
  56. end;
  57.  
  58. procedure PrintMatrix(Matrix: TwoDimensionalArray);
  59. var
  60.     I, J: Integer;
  61. begin
  62.     Writeln('Ваша матрица:');
  63.     for I := 0 to High(Matrix) do
  64.     begin
  65.         for J := 0 to High(Matrix) do
  66.         begin
  67.             Write(Matrix[I][J], '  ');
  68.         end;
  69.         Writeln;
  70.     end;
  71. end;
  72.  
  73. procedure CalcSumStrings(Matrix: TwoDimensionalArray; var SumStrings: Array of Integer);
  74. var
  75. I, J, Sum: Integer;
  76.  
  77. begin
  78.     for I := 0 to High(Matrix) do
  79.     begin
  80.         Sum := 0;
  81.         for J := 0 to High(Matrix) do
  82.         begin
  83.             Sum := Sum + Matrix[I][J];
  84.             SumStrings[I] := Sum;
  85.         end;
  86.     end;
  87. end;
  88.  
  89. procedure CalcSumColumns(Matrix: TwoDimensionalArray; var SumColumns: Array of Integer);
  90. var
  91.     I, J, Sum: Integer;
  92.  
  93. begin
  94.     for J := 0 to High(Matrix) do
  95.     begin
  96.         Sum := 0;
  97.         for I := 0 to High(Matrix) do
  98.         begin
  99.             Sum := Sum + Matrix[I][J];
  100.             SumColumns[J] := Sum;
  101.         end;
  102.     end;
  103. end;
  104.  
  105. function CalcSumMainDiagonal(Matrix: TwoDimensionalArray): Integer;
  106. var
  107.     I, Sum: Integer;
  108.  
  109. begin
  110.     Sum := 0;
  111.     for I := 0 to High(Matrix) do
  112.     begin
  113.         Sum := Sum + Matrix[I][I];
  114.     end;
  115.     CalcSumMainDiagonal := Sum;
  116. end;
  117.  
  118. function CalcSumSelfDiagonal(Matrix: TwoDimensionalArray): Integer;
  119. var
  120.     I, Sum: Integer;
  121.  
  122. begin
  123.     Sum := 0;
  124.     for I := 0 to High(Matrix) do
  125.     begin
  126.         Sum := Sum + Matrix[I][High(Matrix) - I];
  127.     end;
  128.     CalcSumSelfDiagonal := Sum;
  129. end;
  130.  
  131. procedure CheckMagicSquare(MainDiagonal: Integer;SelfDiagonal: Integer; SumStrings: Array of Integer; SumColumns: Array of Integer );
  132. var
  133.     I, Range: Integer;
  134.     Equal: Boolean;
  135.  
  136. begin
  137.     I := 0;
  138.     Equal := True;
  139.     Range := High(SumStrings) + 1;
  140.  
  141.     while (I < Range) and (Equal) do
  142.     begin
  143.         if (MainDiagonal = SelfDiagonal) and (MainDiagonal = SumStrings[I]) and (MainDiagonal = SumColumns[I]) then
  144.         begin
  145.             Equal := True;
  146.         end
  147.         else
  148.         begin
  149.             Writeln('Данная матрица НЕ ЯВЛЯЕТСЯ магическим квадратом');
  150.             Equal := False;
  151.         end;
  152.         I := I + 1;
  153.     end;
  154.  
  155.     if Equal then
  156.     begin
  157.         Writeln('Данная матрица ЯВЛЯЕТСЯ магическим квадратом');
  158.     end;
  159.  
  160. end;
  161.  
  162. //Main
  163. var
  164.     Order, MainDiagonal, SelfDiagonal: Integer;
  165.     Matrix: TwoDimensionalArray;
  166.     SumStrings, SumColumns: Array of Integer;
  167. begin
  168.     Writeln('Дана квадратная матрица А порядка n.');
  169.     Writeln('Программа проверяет, равны ли суммы элементов матрицы по строкам,');
  170.     Writeln('столбцам, главной и побочной диагоналям между собой,');
  171.     Writeln('т.е. является ли матрица магическим квадратом.');
  172.     Writeln;
  173.  
  174.     Order := InputOrder();
  175.     SetLength(Matrix, Order, Order);
  176.     InputMatrix(Matrix);
  177.     PrintMatrix(Matrix);
  178.  
  179.     SetLength(SumStrings, Order);
  180.     CalcSumStrings(Matrix, SumStrings);
  181.  
  182.     SetLength(SumColumns, Order);
  183.     CalcSumColumns(Matrix, SumColumns);
  184.  
  185.     MainDiagonal := CalcSumMainDiagonal(Matrix);
  186.     SelfDiagonal := CalcSumSelfDiagonal(Matrix);
  187.  
  188.     CheckMagicSquare(MainDiagonal,SelfDiagonal,SumStrings,SumColumns);
  189.  
  190.     Readln;
  191. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement