Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab2_3;
- Uses
- System.SysUtils;
- Type
- TMatrix = Array of Array of Integer;
- Const
- MIN_SIZE_MATRIX = 1;
- MAX_SIZE_MATRIX = 10;
- MIN_VALUE = -100;
- MAX_VALUE = 100;
- Procedure PrintCondition();
- Begin
- Writeln('Найти наибольшую сумму модулей элементов строк заданной матрицы');
- End;
- Function ReadNum(Min, Max: Integer): Integer;
- Var
- Num: Integer;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Try
- Readln(Num);
- Except
- Write('Некорректный ввод! Введите значение еще раз: ');
- IsCorrect := False;
- End;
- If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
- Begin
- Write('Недопустимое значение! Введите значение еще раз: ');
- IsCorrect := False;
- End;
- Until (IsCorrect);
- ReadNum := Num;
- End;
- Procedure InputMatrixFromConsole(Var Matrix: TMatrix; N, M: Integer);
- Var
- I, J, Buf: Integer;
- Begin
- SetLength(Matrix, N, M);
- For I := 0 to High(Matrix) Do
- For J := 0 to High(Matrix[0]) Do
- Begin
- Writeln('Введите элементы матрицы: ');
- Buf := ReadNum(MIN_VALUE, MAX_VALUE);
- Matrix[I, J] := Buf;
- End;
- End;
- Function FindMaxSumOfRowElements(Matrix: TMatrix): Integer;
- Var
- MaxSum, Sum: Integer;
- I, J: Integer;
- Begin
- MaxSum := 0;
- For I := 0 To High(Matrix) Do
- Begin
- Sum := 0;
- For J := 0 to High(Matrix[0]) do
- Sum := Sum + Abs(Matrix[I, J]);
- If Sum > MaxSum Then
- MaxSum := Sum;
- End;
- FindMaxSumOfRowElements := MaxSum;
- End;
- Function ReadFile(Path: String; Var Matrix: TMatrix): Boolean;
- Var
- I, J, Buf, N, M: Integer;
- IsFileCorrect: Boolean;
- InputFile: TextFile;
- Begin
- IsFileCorrect := True;
- If FileExists(Path) Then
- Begin
- AssignFile(InputFile, Path);
- Try
- Reset(InputFile);
- Except
- Writeln('Не удалось открыть файл');
- IsFileCorrect := False;
- End;
- If IsFileCorrect Then
- Begin
- Try
- Read(InputFile, N);
- Except
- Writeln('Количество строк введено некорректно!');
- IsFileCorrect := False;
- End;
- If Not Eoln(InputFile) Or EoF(InputFile) Then
- Begin
- Writeln('В первой строке должно содержаться только количество строк, остальные данные должны находиться ниже!');
- IsFileCorrect := False;
- End;
- If IsFileCorrect And (N < MIN_SIZE_MATRIX) Or (N > MAX_SIZE_MATRIX) Then
- Begin
- Writeln('Недопустимое количество строк!');
- IsFileCorrect := False;
- End;
- If IsFileCorrect Then
- Begin
- Try
- Read(InputFile, M);
- Except
- Writeln('Количество столбцов введено некорректно!');
- IsFileCorrect := False;
- End;
- If Not Eoln(InputFile) Or EoF(InputFile) Then
- Begin
- Writeln('Во второй строке должно содержаться только количество столбцов, остальные данные должны находиться ниже!');
- IsFileCorrect := False;
- End;
- If IsFileCorrect And (M < MIN_SIZE_MATRIX) Or (M > MAX_SIZE_MATRIX) Then
- Begin
- Writeln('Недопустимое количество столбцов!');
- IsFileCorrect := False;
- End;
- End;
- SetLength(Matrix, N, M);
- I := 0;
- While (IsFileCorrect And (I < N)) Do
- Begin
- J := 0;
- While (IsFileCorrect And (J < M)) Do
- Begin
- Try
- Read(InputFile, Buf);
- Except
- Writeln('Элементы матрицы введены некорректно!');
- IsFileCorrect := False;
- End;
- If IsFileCorrect And Eoln(InputFile) And Not (J = High(Matrix[I])) Then
- Begin
- Writeln('Все элементы матрицы должны быть записаны в виде матрицы');
- IsFileCorrect := False;
- End;
- If IsFileCorrect And (Buf < MIN_VALUE) Or (Buf > MAX_VALUE) Then
- Begin
- Writeln('Элементы матрицы не входят в диапазон допустимых значений!');
- IsFileCorrect := False;
- End;
- Matrix[I][J] := Buf;
- Inc(J);
- End;
- If IsFileCorrect And (Not Eoln(InputFile) Or EoF(InputFile)) And Not (I = High(Matrix)) Then
- Begin
- Writeln('Все элементы матрицы должны быть записаны в виде матрицы');
- IsFileCorrect := False;
- End;
- Inc(I);
- End;
- End;
- If IsFileCorrect And Not EoF(InputFile) Then
- Begin
- Writeln('Некорректный ввод матрицы!');
- IsFileCorrect := False;
- End;
- CloseFile(InputFile);
- End
- Else
- Begin
- Writeln('Файла по данному пути не существует!');
- IsFileCorrect := False;
- End;
- ReadFile := IsFileCorrect;
- End;
- Procedure InputDataFromFile(Var Matrix: TMatrix);
- Var
- PathFile: String;
- IsInputFromFileSuccessfully: Boolean;
- Begin
- Writeln('Данные в файле должны содержать:', #10, 'Натуральное число - количество строк ', #10, 'Натуральное число - количество столбцов ', MIN_SIZE_MATRIX, ' до ', MAX_SIZE_MATRIX, #10, 'Элементы матрицы, записанные в виде матрицы, допустимые значения для которых от ', MIN_VALUE, ' до ', MAX_VALUE);
- Repeat
- Write('Введите путь к файлу с его раширением: ');
- Readln(PathFile);
- IsInputFromFileSuccessfully := ReadFile(PathFile, Matrix);
- Until IsInputFromFileSuccessfully;
- End;
- Procedure InputData(Var Matrix: TMatrix);
- Var
- Choice, N, M: Integer;
- Begin
- Writeln('Выберите вариант ввода:', #10#13, '1. Ввод из консоли', #10#13, '2. Ввод из файла');
- Choice := ReadNum(1,2);
- If Choice = 1 Then
- Begin
- Writeln('Введите размер строк матрицы: ');
- N := ReadNum(MIN_SIZE_MATRIX, MAX_SIZE_MATRIX);
- Writeln('Введите размер столбцов матрицы: ');
- M := ReadNum(MIN_SIZE_MATRIX, MAX_SIZE_MATRIX);
- InputMatrixFromConsole(Matrix, N, M);
- End
- Else
- InputDataFromFile(Matrix);
- End;
- Procedure OutputDataToFile(Sum: Integer);
- Var
- IsPathCorrect: Boolean;
- Path: String;
- OutputFile: TextFile;
- Begin
- Writeln('Для вывода введите путь к файлу и его имя (например, F:\Projects\Matrix\Имя файла.txt). Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)');
- Repeat
- IsPathCorrect := True;
- Write('Введите путь: ');
- Readln(Path);
- If Path = '' Then
- IsPathCorrect := False
- Else
- Begin
- AssignFile(OutputFile, Path);
- Try
- Rewrite(OutputFile);
- Except
- Writeln('Не удалось вывести в Файл');
- IsPathCorrect := False;
- End;
- End;
- Until IsPathCorrect;
- Writeln(OutputFile,'Наибольшая сумма модулей элементов строк матрицы:', Sum);
- CloseFile(OutputFile);
- Writeln('Вывод данных... успешно!');
- End;
- Procedure OutputData(Sum: Integer);
- Var
- Choice: Integer;
- Begin
- Writeln('Выберите вариант вывода:', #10#13, '1. Вывод в консоль', #10#13, '2. Вывод в файл');
- Choice := ReadNum(1,2);
- If Choice = 1 Then
- Writeln('Наибольшая сумма модулей элементов строк матрицы:', Sum)
- Else
- OutputDataToFile(Sum);
- End;
- Var
- Matrix: TMatrix;
- Sum: Integer;
- Begin
- PrintCondition();
- InputData(Matrix);
- Sum := FindMaxSumOfRowElements(Matrix);
- OutputData(Sum);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement