Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project2;
- {$APPTYPE CONSOLE}
- uses
- SysUtils, Windows;
- const
- ErrorMessage = 'Ошибка! Элементы матрицы должны находится задаваться целыми числами в диапазоне [-2147483648, ..., -1, 0, 1, ..., 2147483648]';
- type
- MatrixArray = array of array of Integer;
- //Функция для проверки на существование файла
- function IsCorrectName(FileName: String): Boolean;
- begin
- if FileExists(FileName) then
- IsCorrectName := True
- else
- begin
- Writeln('Файла с данным названием не существует в папке в данной программой, перепроверьте название файла и введите снова четко следуя инструкциям');
- IsCorrectName := False;
- end;
- end;
- //Функция для проверки на квадратную матрицу
- function OrderOfMatrix(var Input: TextFile): Integer; //Если квадратная возвращает порядок если нет возвращает порядок 0
- var
- i, NumOfThisLine, Hit, Order: Integer;
- SquareControl: Boolean;
- NumOfColumn : String;
- begin
- Read(Input, NumOfColumn);
- Order := Length(StringReplace(NumOfColumn, ' ', '', [rfReplaceAll, rfIgnoreCase])); //WTF
- SquareControl := False;
- i := 0;
- Reset(Input);
- while (i < Order) do
- begin
- NumOfThisLine := 0;
- while (not seekEOLN(Input)) do
- begin
- try
- Read(Input, Hit);
- except
- Writeln(ErrorMessage);
- end;
- inc(NumOfThisLine);
- end;
- inc(i);
- Readln(Input);
- if (NumOfThisLine = Order) then
- SquareControl := True
- else
- begin
- Writeln('В вашей матрице нехватает элементов, пожалуйста, добавьте элементы и запустите программу снова');
- i := Order + 1;
- SquareControl := False
- end;
- end;
- if SquareControl then
- OrderOfMatrix := Order
- else
- OrderOfMatrix := 0;
- end;
- //Функция для заполнения массива
- function InfToArray(var Input: TextFile; Order: Integer): MatrixArray;
- var
- i, j, Iteration: Integer;
- InfArray: MatrixArray;
- begin
- Reset(Input);
- SetLength(InfArray, Order, Order);
- Iteration := Order - 1;
- for i := 0 to Iteration do
- begin
- for j := 0 to Iteration do
- begin
- Read(Input, InfArray[i][j]);
- end;
- Readln(Input);
- end;
- InfToArray := InfArray;
- end;
- //Функция для подсчета суммы согласно заданной формуле
- function MatrixSum(Matrix: MatrixArray; Order: Integer): Integer;
- var
- i, Sum, j, Iteration: Integer;
- begin
- SetLength(Matrix, Order, Order);
- Iteration := Order - 1;
- Sum := 0;
- for i := 0 to Iteration do
- begin
- if (i <= Iteration - i) then
- for j:= i to Iteration - i do
- Sum := Sum + Matrix[i][j]
- else
- for j:= i downto Iteration - i do
- Sum := Sum + Matrix[i][j]
- end;
- MatrixSum := Sum;
- end;
- //Основное тело
- var
- Matrix: MatrixArray;
- Order: Integer;
- FileName: String;
- Input: TextFile;
- begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Writeln('Здравствуйте, данная программа принимает матрицу и возвращает сумму заданных в условии элементов');
- Writeln('Пожалуйста, введите название файла в котором находится матрица. ПРИМЕР Example.txt');
- repeat
- Readln(FileName);
- until IsCorrectName(FileName);
- AssignFile(Input, FileName);
- Reset(Input);
- Order := OrderOfMatrix(Input);
- if (Order <> 0) then
- begin
- SetLength(Matrix, Order, Order);
- Matrix := InfToArray(Input, Order);
- Writeln(MatrixSum(Matrix, Order));
- end
- else
- begin
- Writeln('Ваша матрица не является квадратной, кол-во строк не соответсвует кол-ву столбцов');
- Writeln('Пожалуйста, исправьте это и запустите программу снова');
- end;
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement