Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program L2_3_D;
- Uses
- System.SysUtils;
- Type
- TArray = Array of Array of Integer;
- Function ReadingExcept(I, J : Integer) : Integer; // функция для того, чтобы при ошибке ввода с файла ты вписывал данные с клавиатуры
- Var
- Number : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите ', I+1, ' ' , J+1, ' элемент массива: ');
- Try
- Readln(Number);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- ReadingExcept := Number;
- End;
- Procedure OutputTaskEssence(); //выводит суть задания
- Begin
- Writeln('Данная программа находит наибольшую сумму модулей элементов строк матрицы.');
- End;
- Function SizeRowConsole() : Integer; //ввод строк с консоли
- Var
- IsCorrect : Boolean;
- SizeI : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите количество строк в матрице');
- Try
- Readln(SizeI);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- If (SizeI < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- SizeRowConsole := SizeI;
- End;
- Function SizeColumnConsole() : Integer; //ввод столбцов с консоли
- Var
- IsCorrect : Boolean;
- SizeJ : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите количество столбцов в матрице');
- Try
- Readln(SizeJ);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- If (SizeJ < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- SizeColumnConsole := SizeJ;
- End;
- Function PathChoice() : String; //выбор файла
- Var
- TFile : TextFile;
- Path : String;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла: ');
- Try
- Readln(Path);
- AssignFile(TFile, Path);
- Reset(TFile);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- End;
- Until IsCorrect;
- Writeln('Файл успешно открыт!');
- PathChoice := Path;
- CloseFile(TFile);
- End;
- Function InputSizeRowFromFile(Path : String; var TextF : TextFile) : Integer; //ввод кол-ва строк с файла
- Var
- SizeI : Integer;
- IsCorrect : Boolean;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- IsCorrect := True;
- Writeln('Запись количества строк...');
- Try
- Readln(TextF, SizeI);
- Except
- IsCorrect := False;
- End;
- If ((SizeI < 1) Or (IsCorrect = False)) Then
- Begin
- Writeln('Ошибка! Неверный ввод размера! Введите данные с клавиатуры.');
- SizeI := SizeRowConsole();
- End;
- Writeln('Количество строк: ', SizeI);
- CloseFile(TextF);
- InputSizeRowFromFile := SizeI;
- End;
- Function SizeColumnFile(Path : String; var TextF : TextFile) : Integer; //ввод кол-ва столбцов с файла
- Var
- SizeJ : Integer;
- Line : String;
- IsCorrect : Boolean;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- Readln(TextF, Line);
- IsCorrect := True;
- Writeln('Запись количества столбцов...');
- Try
- Readln(TextF, SizeJ);
- Except
- IsCorrect := False;
- End;
- If ((SizeJ < 1) Or (IsCorrect = False)) Then
- Begin
- Writeln('Ошибка! Неверный ввод размера! Введите данные с клавиатуры.');
- SizeJ := SizeColumnConsole();
- End;
- Writeln('Количество столбцов: ', SizeJ);
- CloseFile(TextF);
- SizeColumnFile := SizeJ;
- End;
- Function MatrixReadFromFile(Path : String; SizeI, SizeJ : Integer; var TextF : TextFile; Matrix : TArray) : TArray; //ввод самой матрицы с файла
- Var
- I, J, Correct : Integer;
- Line : String;
- IsCorrect : Boolean;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- Dec(SizeI);
- Dec(SizeJ);
- IsCorrect := True;
- Readln(TextF, Line);
- Readln(TextF, Line);
- Writeln('Запись матрицы...');
- For I := 0 To (SizeI) Do
- Begin
- For J := 0 To (SizeJ) Do
- Begin
- Try
- Read(TextF, Matrix[I][J])
- Except
- IsCorrect := False;
- Writeln(' Неверный ввод данных! Введите элемент матрицы с размером ', I+1, ' ', J+1, ' с клавиатуры.');
- Matrix[I][J] := ReadingExcept(I, J);
- End;
- End;
- End;
- CloseFile(TextF);
- Writeln('Вывод матрицы: ');
- For I := 0 To SizeI Do
- Begin
- For J := 0 To SizeJ Do
- Write(Matrix[I][J], ' ');
- Writeln;
- End;
- MatrixReadFromFile := Matrix;
- End;
- Function MatrixCount(const Arr : TArray) : Integer;
- Begin
- // ТУТ ПРОИСХОДЯТ САМИ РАССЧЕТЫ
- MatrixCount := 0;
- End;
- Procedure Output(Result : Integer); //вывод ответа
- Var
- TextF : TextFile;
- Path : String;
- IsCorrect : Boolean;
- Begin
- Writeln('Максимальная сумма модулей элементов строк: ', Result);
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла для вывода: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- End;
- Until IsCorrect;
- Append(TextF);
- Writeln(TextF);
- Writeln(TextF, 'Максимальная сумма модулей элементов строк: ', Result);
- CloseFile(TextF);
- Writeln('Данные записаны в файл.');
- Readln;
- End;
- Function InputFromFile() : TArray; //алгос для считывания с файла
- Var
- Path : String;
- SizeI, SizeJ, MaxRes : Integer;
- TextF : TextFile;
- Matrix : TArray;
- Begin
- Writeln('При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, на второй - количество столбцов, а далее с новой строки прописывается сама матрица.');
- Path := PathChoice();
- SizeI := InputSizeRowFromFile(Path, TextF);
- SizeJ := SizeColumnFile(Path, TextF);
- SetLength(Matrix, SIzeI, SizeJ);
- Matrix := MatrixReadFromFile(Path, SizeI, SizeJ, TextF, Matrix);
- InputFromFile := Matrix;
- End;
- Function MatrixReadConsole(SizeI, SizeJ : Integer; Matrix : TArray) : TArray; //считывание самой матрицы с консоли
- Var
- IsCorrect : Boolean;
- I, J : Integer;
- Begin
- Dec(SizeI);
- Dec(SizeJ);
- For I := 0 To SizeI Do
- Begin
- For J := 0 To SizeJ Do
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите элемент с индексом ', I+1,',', J+1);
- Try
- Readln(Matrix[I][J]);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- Write(Matrix[I][J], ' ');
- End;
- Writeln;
- End;
- MatrixReadConsole := Matrix;
- End;
- Function InputFromConsole() : TArray; //алгос для считывания с консоли
- Var
- SizeI, SizeJ, MaxSum : Integer;
- Matrix : TArray;
- Begin
- SizeI := SizeRowConsole();
- SizeJ := SizeColumnConsole();
- SetLength(Matrix, SizeI, SizeJ);
- Matrix := MatrixReadConsole(SizeI, SizeJ, Matrix);
- InputFromConsole := Matrix;
- End;
- Function SourceChoice() : TArray; //выбор откуда считывать. файл или консоль
- Var
- ChoiceNumber : Integer;
- IsCorrect : Boolean;
- Matrix : TArray;
- Begin
- Writeln('Выберите, откуда будут вводиться данные:');
- Repeat
- IsCorrect := True;
- Writeln('Введите 0, если с консоли; введите 1, если с файла.');
- Try
- Readln(ChoiceNumber);
- Except
- IsCorrect := False;
- End;
- If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
- Begin
- Writeln('Неверный ввод данных!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- If (ChoiceNumber = 0) Then
- Matrix := InputFromConsole()
- Else
- Matrix := InputFromFile();
- SourceChoice := Matrix;
- End;
- Var //сам мейн
- MaxRes : Integer;
- Matrix : TArray;
- Begin
- OutputTaskEssence(); //это выводит суть задания
- Matrix := SourceChoice(); // это считывание матрицы
- MaxRes := MatrixCount(Matrix); // это рассчеты
- Output(MaxRes); //это вывод результата
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement