Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program MatrixRowSum;
- Uses
- System.SysUtils;
- Type
- TMatrix = Array Of Array Of Real;
- Var
- N: Integer;
- Matrix: TMatrix;
- Function GetNum(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;
- GetNum := Num;
- End;
- Function CheckFile(Path: String; Var InputInt: Integer): Boolean;
- Var
- IsFileCorrect: Boolean;
- InputFile: TextFile;
- Const
- MIN_N = 1;
- MAX_N = 10;
- 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, InputInt);
- Except
- Writeln('Данные в файле представлены в неправильном формате!');
- IsFileCorrect := False;
- End;
- End;
- If IsFileCorrect And Not(EoF(InputFile)) Then
- Begin
- Writeln('Данные в файле представлены в неправильном формате!');
- IsFileCorrect := False;
- End;
- If IsFileCorrect And ((InputInt < MIN_N) Or (InputInt > MAX_N)) Then
- Begin
- Writeln('Значение выходит за возможные пределы!');
- IsFileCorrect := False;
- End;
- CloseFile(InputFile);
- End
- Else
- Begin
- Writeln('Файла по данному пути не существует!');
- IsFileCorrect := False;
- End;
- CheckFile := IsFileCorrect;
- End;
- Function InputN(): Integer;
- Var
- Choice, Num: Integer;
- PathFile: String;
- IsInputFromFileSuccessfully: Boolean;
- Const
- MIN_N = 1;
- MAX_N = 10;
- Begin
- Write('Выберите вариант ввода:', #10, '1. Ввод из консоли', #10, '2. Ввод из файла',
- #10, 'Использовать вариант: ');
- Choice := GetNum(1, 2);
- If Choice = 1 Then
- Begin
- Writeln('Введите порядок матрицы N от ', MIN_N, ' до ', MAX_N, ': ');
- Num := GetNum(MIN_N, MAX_N);
- End
- Else
- Begin
- Writeln('Данные в файле должны содержать натуральное число - порядок матрицы N от', MIN_N, ' до ', MAX_N, ': ');
- Repeat
- Write('Введите путь к файлу с его расширением: ');
- Readln(PathFile);
- IsInputFromFileSuccessfully := CheckFile(PathFile, Num);
- Until IsInputFromFileSuccessfully;
- End;
- InputN := Num;
- End;
- Procedure FillMatrixFromKeyboard(Var Matrix: TMatrix; N: Integer);
- Var
- I, J: Integer;
- IsCorrect: Boolean;
- Begin
- SetLength(Matrix, N, N);
- For I := 0 To High(Matrix) Do
- Begin
- For J := 0 To High(Matrix) Do
- Begin
- Write('Введите элемент [', I + 1, ',', J + 1, ']: ');
- Repeat
- IsCorrect := True;
- Try
- Readln(Matrix[I][J]);
- Except
- IsCorrect := False;
- Writeln('Ошибка! Некорректное значение');
- End;
- Until IsCorrect;
- End;
- End;
- End;
- Procedure FillMatrixFromFile(Var Matrix: TMatrix; N: Integer; FilePath: String);
- Var
- InputFile: TextFile;
- I, J, Correct: Integer;
- IsCorrect : Boolean;
- Begin
- SetLength(Matrix, N, N);
- AssignFile(InputFile, FilePath);
- Reset(InputFile);
- For I := 0 To High(Matrix) Do
- For J := 0 To High(Matrix) Do
- Begin
- IsCorrect := True;
- Try
- Read(InputFile, Matrix[I][J]);
- Except
- IsCorrect := False;
- Writeln('Неверный ввод данных! Исправьте элемент матрицы с адресом ', I+1, ' и ', J+1, ' и перезапустите программу');
- Correct := 0;
- While (Correct = 0) Do
- Readln;
- End;
- End;
- CloseFile(InputFile);
- End;
- Function CountRowsWithSumGreaterThanOne(Const Matrix: TMatrix; N: Integer): Integer;
- Var
- I, J: Integer;
- Sum: Real;
- Begin
- Result := 0;
- For I := 0 To High(Matrix) Do
- Begin
- Sum := 0;
- For J := 0 To High(Matrix) Do
- Sum := Sum + Abs(Matrix[I][J]);
- If Sum > 1 Then
- Inc(Result);
- End;
- End;
- Procedure OutputMatrix(Const Matrix: TMatrix; N: Integer);
- 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]:8:3);
- End;
- Writeln;
- End;
- End;
- Procedure OutputResult(Const Matrix: TMatrix; N, Count: Integer);
- Var
- OutputFile: TextFile;
- Path: String;
- I, J: Integer;
- Begin
- Write('Введите путь к выходному файлу: ');
- Readln(Path);
- AssignFile(OutputFile, Path);
- Rewrite(OutputFile);
- Writeln(OutputFile, 'Матрица:');
- For I := 0 To High(Matrix) Do
- Begin
- For J := 0 To N - 1 Do
- Write(OutputFile, Matrix[I][J]:8:3);
- Writeln(OutputFile);
- End;
- Writeln(OutputFile, 'Количество строк с суммой модулей элементов больше 1: ', Count);
- CloseFile(OutputFile);
- Writeln('Результат и матрица успешно записаны в файл ', Path);
- End;
- Procedure ProcessMatrixTask;
- Var
- N, Count, InputChoice: Integer;
- Matrix: TMatrix;
- FilePath: String;
- Begin
- Writeln('Данная программа подсчитает количество строк в матрице, сумма модулей элементов которых больше 1.');
- N := InputN;
- Writeln('Выберите способ заполнения матрицы:', #10, '1. Заполнение из консоли', #10, '2. Заполнение из файла');
- InputChoice := GetNum(1, 2);
- If InputChoice = 1 Then
- FillMatrixFromKeyboard(Matrix, N)
- Else
- Begin
- Write('Введите путь к файлу с элементами матрицы: ');
- Readln(FilePath);
- FillMatrixFromFile(Matrix, N, FilePath);
- End;
- OutputMatrix(Matrix, N);
- Count := CountRowsWithSumGreaterThanOne(Matrix, N);
- Writeln('Количество строк с суммой модулей элементов больше 1: ', Count);
- OutputResult(Matrix, N, Count);
- End;
- Begin
- ProcessMatrixTask;
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment