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]';
- InstructionForOrder = 'Ошибка! Порядок матрицы должен задаваться натуральным числом в диапазоне [1, ..., 2147483648]';
- type
- MatrixArray = array of array of Integer;
- //Функция для проверки на существование файла
- function IsCorrectName(): String;
- var
- FileName: String;
- begin
- Writeln('Пожалуйста, введите название файла в котором находится матрица. ПРИМЕР Example');
- Readln(FileName);
- FileName := FileName + '.txt';
- if FileExists(FileName) then
- IsCorrectName := FileName
- else
- begin
- Writeln('Файла с данным названием не существует в папке в данной программой, перепроверьте название файла и введите снова четко следуя инструкциям');
- IsCorrectName := '';
- end;
- end;
- //Функция для проверки на квадратную матрицу
- function OrderOfMatrix(var Input: TextFile): Integer; //Если квадратная возвращает порядок если нет возвращает порядок 0
- var
- i, NumOfThisLine, Hit, Order: Integer;
- SquareControl: Boolean;
- Symbol: String;
- begin
- Order := 0;
- while (not SeekEOF(input)) do
- begin
- Readln(Input, Symbol);
- inc(Order)
- end;
- 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
- begin
- Writeln('Ваша матрица не является квадратной, кол-во строк не соответсвует кол-ву столбцов');
- Writeln('Пожалуйста, исправьте это и запустите программу снова');
- OrderOfMatrix := 0;
- end;
- end;
- //Функция для заполнения массива через файл
- function InfFileToArray(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;
- InfFileToArray := InfArray;
- end;
- //Функция для подсчета порядка матрицы (при вводе матрицы через консоль)
- function IsOrder(): Integer;
- var
- Order: Integer;
- IsCorrect: Boolean;
- begin
- Writeln('Пожалуйста, введите порядок матрицы');
- IsCorrect := False;
- repeat
- try
- Readln(Order);
- if (Order > 0) then
- IsCorrect := True;
- except
- Writeln(InstructionForOrder);
- end;
- until IsCorrect;
- IsOrder := Order;
- end;
- //Функция для заполнения матрицы через консоль
- function InfConsoleToArray(Order: Integer): MatrixArray;
- var
- i, j, Iteration: Integer;
- IsCorrect: Boolean;
- Matrix: MatrixArray;
- begin
- Iteration := Order - 1;
- SetLength(Matrix, Order, Order);
- for i := 0 to Iteration do
- begin
- Writeln('Пожалуйста, введите элементы ', i + 1, ' строки');
- for j := 0 to Iteration do
- repeat
- try
- Read(Matrix[i][j]); //если записать 5 элементов то прочитает только 4
- IsCorrect := True;
- if j = Iteration then
- Writeln;
- except
- Writeln(ErrorMessage);
- IsCorrect := False;
- end;
- until IsCorrect;
- end;
- InfConsoleToArray := Matrix;
- 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;
- //Функция для вывода суммы в файл и в консоль
- procedure Output(Sum: Integer);
- var
- Output: TextFile;
- FileName: String;
- begin
- Writeln('Пожалуйста, введите имя файла в который необходимо записать результат выполнения программы. ПРИМЕР: Example');
- Readln(FileName);
- FileName := FileName + '.txt';
- AssignFile(Output, FileName);
- Rewrite(Output);
- Writeln(Output, Sum);
- CloseFile(Output);
- end;
- var
- Matrix: MatrixArray;
- Order, Sum: Integer;
- FileName, Choise: String;
- Input: TextFile;
- IsCorrectChoise: Boolean;
- begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Writeln('Здравствуйте, данная программа принимает матрицу и возвращает сумму заданных в условии элементов');
- Writeln('Через что вы бы хотели вводить данные?');
- IsCorrectChoise := False;
- repeat
- Writeln('Для ввода с файла введите: F' +#13#10 +'Для ввода с консоли введите: C');
- Readln(Choise);
- if Choise = 'F' then
- begin
- FileName := IsCorrectName;
- if FileName <> '' then
- begin
- AssignFile(Input, FileName);
- Reset(Input);
- Order := OrderOfMatrix(Input);
- Close(Input);
- if (Order <> 0) then
- begin
- IsCorrectChoise := True;
- SetLength(Matrix, Order, Order);
- Matrix := InfFileToArray(Input ,Order);
- end;
- end
- end
- else
- if Choise = 'C' then
- begin
- IsCorrectChoise := True;
- Order := IsOrder();
- SetLength(Matrix, Order, Order);
- Matrix := InfConsoleToArray(Order);
- end
- else
- Writeln('Вы выбрали некорректный вариант ввода, выбирете снова четко следуя инструкциям');
- until IsCorrectChoise;
- Sum := MatrixSum(Matrix, Order);
- Writeln('Сумма элементов матрицы по заданной формуле: ', Sum);
- Output(Sum);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement