HunteryS

Laba2_3 variant 3

Oct 22nd, 2024
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.41 KB | None | 0 0
  1. Program MatrixRowSum;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TMatrix = Array Of Array Of Real;
  8.  
  9. Var
  10.     N: Integer;
  11.     Matrix: TMatrix;
  12.  
  13. Function GetNum(Min, Max: Integer): Integer;
  14. Var
  15.     Num: Integer;
  16.     IsCorrect: Boolean;
  17. Begin
  18.     Repeat
  19.         IsCorrect := True;
  20.         Try
  21.             Readln(Num);
  22.         Except
  23.             Write('Некорректный ввод! Введите значение еще раз: ');
  24.             IsCorrect := False;
  25.         End;
  26.  
  27.         If IsCorrect And ((Num < Min) Or (Num > Max)) Then
  28.         Begin
  29.             Write('Недопустимое значение! Введите значение еще раз: ');
  30.             IsCorrect := False;
  31.         End;
  32.     Until IsCorrect;
  33.     GetNum := Num;
  34. End;
  35.  
  36. Function CheckFile(Path: String; Var InputInt: Integer): Boolean;
  37. Var
  38.     IsFileCorrect: Boolean;
  39.     InputFile: TextFile;
  40.  
  41. Const
  42.     MIN_N = 1;
  43.     MAX_N = 10;
  44.  
  45. Begin
  46.     IsFileCorrect := True;
  47.     If FileExists(Path) Then
  48.     Begin
  49.         AssignFile(InputFile, Path);
  50.         Try
  51.             Reset(InputFile);
  52.         Except
  53.             Writeln('Не удалось открыть файл!');
  54.             IsFileCorrect := False;
  55.         End;
  56.         If IsFileCorrect Then
  57.         Begin
  58.             Try
  59.                 Read(InputFile, InputInt);
  60.             Except
  61.                 Writeln('Данные в файле представлены в неправильном формате!');
  62.                 IsFileCorrect := False;
  63.             End;
  64.         End;
  65.  
  66.         If IsFileCorrect And Not(EoF(InputFile)) Then
  67.         Begin
  68.             Writeln('Данные в файле представлены в неправильном формате!');
  69.             IsFileCorrect := False;
  70.         End;
  71.  
  72.         If IsFileCorrect And ((InputInt < MIN_N) Or (InputInt > MAX_N)) Then
  73.         Begin
  74.             Writeln('Значение выходит за возможные пределы!');
  75.             IsFileCorrect := False;
  76.         End;
  77.         CloseFile(InputFile);
  78.     End
  79.     Else
  80.     Begin
  81.         Writeln('Файла по данному пути не существует!');
  82.         IsFileCorrect := False;
  83.     End;
  84.     CheckFile := IsFileCorrect;
  85. End;
  86.  
  87. Function InputN(): Integer;
  88. Var
  89.     Choice, Num: Integer;
  90.     PathFile: String;
  91.     IsInputFromFileSuccessfully: Boolean;
  92.  
  93. Const
  94.     MIN_N = 1;
  95.     MAX_N = 10;
  96.  
  97. Begin
  98.     Write('Выберите вариант ввода:', #10, '1. Ввод из консоли', #10, '2. Ввод из файла',
  99.         #10, 'Использовать вариант: ');
  100.     Choice := GetNum(1, 2);
  101.  
  102.     If Choice = 1 Then
  103.     Begin
  104.         Writeln('Введите порядок матрицы N от ', MIN_N, ' до ', MAX_N, ': ');
  105.         Num := GetNum(MIN_N, MAX_N);
  106.     End
  107.     Else
  108.     Begin
  109.         Writeln('Данные в файле должны содержать натуральное число - порядок матрицы N от', MIN_N, ' до ', MAX_N, ': ');
  110.         Repeat
  111.             Write('Введите путь к файлу с его расширением: ');
  112.             Readln(PathFile);
  113.             IsInputFromFileSuccessfully := CheckFile(PathFile, Num);
  114.         Until IsInputFromFileSuccessfully;
  115.     End;
  116.     InputN := Num;
  117. End;
  118.  
  119. Procedure FillMatrixFromKeyboard(Var Matrix: TMatrix; N: Integer);
  120. Var
  121.     I, J: Integer;
  122.     IsCorrect: Boolean;
  123. Begin
  124.     SetLength(Matrix, N, N);
  125.     For I := 0 To High(Matrix) Do
  126.     Begin
  127.         For J := 0 To High(Matrix) Do
  128.         Begin
  129.             Write('Введите элемент [', I + 1, ',', J + 1, ']: ');
  130.             Repeat
  131.                 IsCorrect := True;
  132.                 Try
  133.                     Readln(Matrix[I][J]);
  134.                 Except
  135.                     IsCorrect := False;
  136.                     Writeln('Ошибка! Некорректное значение');
  137.                 End;
  138.             Until IsCorrect;
  139.         End;
  140.     End;
  141. End;
  142.  
  143. Procedure FillMatrixFromFile(Var Matrix: TMatrix; N: Integer; FilePath: String);
  144. Var
  145.     InputFile: TextFile;
  146.     I, J, Correct: Integer;
  147.     IsCorrect : Boolean;
  148. Begin
  149.     SetLength(Matrix, N, N);
  150.     AssignFile(InputFile, FilePath);
  151.     Reset(InputFile);
  152.     For I := 0 To High(Matrix) Do
  153.         For J := 0 To High(Matrix) Do
  154.         Begin
  155.             IsCorrect := True;
  156.             Try
  157.                 Read(InputFile, Matrix[I][J]);
  158.             Except
  159.                 IsCorrect := False;
  160.                 Writeln('Неверный ввод данных! Исправьте элемент матрицы с адресом ', I+1, ' и ', J+1, ' и перезапустите программу');
  161.                 Correct := 0;
  162.                 While (Correct = 0) Do
  163.                 Readln;
  164.             End;
  165.         End;
  166.     CloseFile(InputFile);
  167. End;
  168.  
  169. Function CountRowsWithSumGreaterThanOne(Const Matrix: TMatrix; N: Integer): Integer;
  170. Var
  171.     I, J: Integer;
  172.     Sum: Real;
  173. Begin
  174.     Result := 0;
  175.     For I := 0 To High(Matrix) Do
  176.     Begin
  177.         Sum := 0;
  178.         For J := 0 To High(Matrix) Do
  179.             Sum := Sum + Abs(Matrix[I][J]);
  180.         If Sum > 1 Then
  181.             Inc(Result);
  182.     End;
  183. End;
  184.  
  185. Procedure OutputMatrix(Const Matrix: TMatrix; N: Integer);
  186. Var
  187.     I, J: Integer;
  188. Begin
  189.     Writeln('Матрица:');
  190.     For I := 0 To High(Matrix) Do
  191.     Begin
  192.         For J := 0 To High(Matrix) Do
  193.         Begin
  194.             Write(Matrix[I][J]:8:3);
  195.         End;
  196.         Writeln;
  197.     End;
  198. End;
  199.  
  200. Procedure OutputResult(Const Matrix: TMatrix; N, Count: Integer);
  201. Var
  202.     OutputFile: TextFile;
  203.     Path: String;
  204.     I, J: Integer;
  205. Begin
  206.     Write('Введите путь к выходному файлу: ');
  207.     Readln(Path);
  208.     AssignFile(OutputFile, Path);
  209.     Rewrite(OutputFile);
  210.  
  211.     Writeln(OutputFile, 'Матрица:');
  212.     For I := 0 To High(Matrix) Do
  213.     Begin
  214.         For J := 0 To N - 1 Do
  215.             Write(OutputFile, Matrix[I][J]:8:3);
  216.         Writeln(OutputFile);
  217.     End;
  218.  
  219.     Writeln(OutputFile, 'Количество строк с суммой модулей элементов больше 1: ', Count);
  220.  
  221.     CloseFile(OutputFile);
  222.     Writeln('Результат и матрица успешно записаны в файл ', Path);
  223. End;
  224.  
  225. Procedure ProcessMatrixTask;
  226. Var
  227.     N, Count, InputChoice: Integer;
  228.     Matrix: TMatrix;
  229.     FilePath: String;
  230. Begin
  231.     Writeln('Данная программа подсчитает количество строк в матрице, сумма модулей элементов которых больше 1.');
  232.  
  233.     N := InputN;
  234.  
  235.     Writeln('Выберите способ заполнения матрицы:', #10, '1. Заполнение из консоли', #10, '2. Заполнение из файла');
  236.     InputChoice := GetNum(1, 2);
  237.  
  238.     If InputChoice = 1 Then
  239.         FillMatrixFromKeyboard(Matrix, N)
  240.     Else
  241.     Begin
  242.         Write('Введите путь к файлу с элементами матрицы: ');
  243.         Readln(FilePath);
  244.         FillMatrixFromFile(Matrix, N, FilePath);
  245.     End;
  246.  
  247.     OutputMatrix(Matrix, N);
  248.     Count := CountRowsWithSumGreaterThanOne(Matrix, N);
  249.     Writeln('Количество строк с суммой модулей элементов больше 1: ', Count);
  250.     OutputResult(Matrix, N, Count);
  251. End;
  252.  
  253. Begin
  254.     ProcessMatrixTask;
  255.     Readln;
  256. End.
  257.  
Advertisement
Add Comment
Please, Sign In to add comment