Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program laba2_3;
- uses
- System.SysUtils;
- type
- TwoDimensionalArray = Array of Array of Integer;
- function InputOrder(): Integer;
- var
- Order: Integer;
- IsCorrect: Boolean;
- begin
- Writeln('Введите порядок матрицы (от 2 до 6)');
- repeat
- IsCorrect := True;
- try
- Readln(Order);
- except
- Writeln('Введите целое число!');
- IsCorrect := False;
- end;
- if (IsCorrect) and ((Order < 2) or (Order > 6)) then
- begin
- Writeln('Некорректные данные. Введите длину из указанного диапазона');
- IsCorrect := False;
- end;
- until IsCorrect;
- InputOrder := Order;
- end;
- procedure InputMatrix(var Matrix: TwoDimensionalArray);
- var
- I, J: Integer;
- IsCorrect: Boolean;
- begin
- for I := 0 to High(Matrix) do
- for J := 0 to High(Matrix) do
- begin
- repeat
- Writeln('Введите элемент матрицы а', i + 1, j + 1);
- IsCorrect := True;
- try
- Readln(Matrix[I][J]);
- except
- Writeln('Введите натуральное число!');
- IsCorrect := False;
- end;
- if (IsCorrect) and (Matrix[I][J] < 1) then
- begin
- Writeln('Введите натуральное число!');
- IsCorrect := False;
- end;
- until IsCorrect;
- end;
- end;
- procedure PrintMatrix(Matrix: TwoDimensionalArray);
- var
- I, J: Integer;
- begin
- Writeln('Ваша матрица:');
- for I := 0 to High(Matrix) do
- begin
- for J := 0 to High(Matrix) do
- begin
- Write(Matrix[I][J], ' ');
- end;
- Writeln;
- end;
- end;
- procedure CalcSumStrings(Matrix: TwoDimensionalArray; var SumStrings: Array of Integer);
- var
- I, J, Sum: Integer;
- begin
- for I := 0 to High(Matrix) do
- begin
- Sum := 0;
- for J := 0 to High(Matrix) do
- begin
- Sum := Sum + Matrix[I][J];
- SumStrings[I] := Sum;
- end;
- end;
- end;
- procedure CalcSumColumns(Matrix: TwoDimensionalArray; var SumColumns: Array of Integer);
- var
- I, J, Sum: Integer;
- begin
- for J := 0 to High(Matrix) do
- begin
- Sum := 0;
- for I := 0 to High(Matrix) do
- begin
- Sum := Sum + Matrix[I][J];
- SumColumns[J] := Sum;
- end;
- end;
- end;
- function CalcSumMainDiagonal(Matrix: TwoDimensionalArray): Integer;
- var
- I, Sum: Integer;
- begin
- Sum := 0;
- for I := 0 to High(Matrix) do
- begin
- Sum := Sum + Matrix[I][I];
- end;
- CalcSumMainDiagonal := Sum;
- end;
- function CalcSumSelfDiagonal(Matrix: TwoDimensionalArray): Integer;
- var
- I, Sum: Integer;
- begin
- Sum := 0;
- for I := 0 to High(Matrix) do
- begin
- Sum := Sum + Matrix[I][High(Matrix) - I];
- end;
- CalcSumSelfDiagonal := Sum;
- end;
- procedure CheckMagicSquare(MainDiagonal: Integer;SelfDiagonal: Integer; SumStrings: Array of Integer; SumColumns: Array of Integer );
- var
- I, Range: Integer;
- Equal: Boolean;
- begin
- I := 0;
- Equal := True;
- Range := High(SumStrings) + 1;
- while (I < Range) and (Equal) do
- begin
- if (MainDiagonal = SelfDiagonal) and (MainDiagonal = SumStrings[I]) and (MainDiagonal = SumColumns[I]) then
- begin
- Equal := True;
- end
- else
- begin
- Writeln('Данная матрица НЕ ЯВЛЯЕТСЯ магическим квадратом');
- Equal := False;
- end;
- I := I + 1;
- end;
- if Equal then
- begin
- Writeln('Данная матрица ЯВЛЯЕТСЯ магическим квадратом');
- end;
- end;
- //Main
- var
- Order, MainDiagonal, SelfDiagonal: Integer;
- Matrix: TwoDimensionalArray;
- SumStrings, SumColumns: Array of Integer;
- begin
- Writeln('Дана квадратная матрица А порядка n.');
- Writeln('Программа проверяет, равны ли суммы элементов матрицы по строкам,');
- Writeln('столбцам, главной и побочной диагоналям между собой,');
- Writeln('т.е. является ли матрица магическим квадратом.');
- Writeln;
- Order := InputOrder();
- SetLength(Matrix, Order, Order);
- InputMatrix(Matrix);
- PrintMatrix(Matrix);
- SetLength(SumStrings, Order);
- CalcSumStrings(Matrix, SumStrings);
- SetLength(SumColumns, Order);
- CalcSumColumns(Matrix, SumColumns);
- MainDiagonal := CalcSumMainDiagonal(Matrix);
- SelfDiagonal := CalcSumSelfDiagonal(Matrix);
- CheckMagicSquare(MainDiagonal,SelfDiagonal,SumStrings,SumColumns);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement