HunteryS

Laba2_3 variant 2

Oct 22nd, 2024
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.35 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.  
  170. Function CountRowsWithSumGreaterThanOne(Const Matrix: TMatrix; N: Integer): Integer;
  171. Var
  172.     I, J: Integer;
  173.     Sum: Real;
  174. Begin
  175.     Result := 0;
  176.     For I := 0 To High(Matrix) Do
  177.     Begin
  178.         Sum := 0;
  179.         For J := 0 To High(Matrix) Do
  180.             Sum := Sum + Abs(Matrix[I][J]);
  181.         If Sum > 1 Then
  182.             Inc(Result);
  183.     End;
  184. End;
  185.  
  186. Procedure OutputMatrix(Const Matrix: TMatrix; N: Integer);
  187. Var
  188.     I, J: Integer;
  189. Begin
  190.     Writeln('Матрица:');
  191.     For I := 0 To High(Matrix) Do
  192.     Begin
  193.         For J := 0 To High(Matrix) Do
  194.         Begin
  195.             Write(Matrix[I][J]:8:3);
  196.         End;
  197.         Writeln;
  198.     End;
  199. End;
  200.  
  201. Procedure OutputResult(Const Matrix: TMatrix; N, Count: Integer);
  202. Var
  203.     OutputFile: TextFile;
  204.     Path: String;
  205.     I, J: Integer;
  206. Begin
  207.     Write('Введите путь к выходному файлу: ');
  208.     Readln(Path);
  209.     AssignFile(OutputFile, Path);
  210.     Rewrite(OutputFile);
  211.  
  212.     Writeln(OutputFile, 'Матрица:');
  213.     For I := 0 To High(Matrix) Do
  214.     Begin
  215.         For J := 0 To N - 1 Do
  216.             Write(OutputFile, Matrix[I][J]:8:3);
  217.         Writeln(OutputFile);
  218.     End;
  219.  
  220.     Writeln(OutputFile, 'Количество строк с суммой модулей элементов больше 1: ', Count);
  221.  
  222.     CloseFile(OutputFile);
  223.     Writeln('Результат и матрица успешно записаны в файл ', Path);
  224. End;
  225.  
  226. Var
  227.     Count: Integer;
  228.     InputChoice: Integer;
  229.     FilePath: String;
  230.  
  231. Begin
  232.     Writeln('Данная программа подсчитает количество строк в матрице, сумма модулей элементов которых больше 1.');
  233.     N := InputN;
  234.  
  235.  
  236.     Writeln('Выберите способ заполнения матрицы:', #10, '1. Заполнение из консоли', #10, '2. Заполнение из файла');
  237.     InputChoice := GetNum(1, 2);
  238.  
  239.     If InputChoice = 1 Then
  240.     Begin
  241.         FillMatrixFromKeyboard(Matrix, N);
  242.     End
  243.     Else
  244.     Begin
  245.         Write('Введите путь к файлу с элементами матрицы: ');
  246.         Readln(FilePath);
  247.         FillMatrixFromFile(Matrix, N, FilePath);
  248.     End;
  249.  
  250.     OutputMatrix(Matrix, N);
  251.     Count := CountRowsWithSumGreaterThanOne(Matrix, N);
  252.     Writeln('Количество строк с суммой модулей элементов больше 1: ', Count);
  253.     OutputResult(Matrix, N, Count);
  254.     Readln;
  255. End.
  256.  
Advertisement
Add Comment
Please, Sign In to add comment