HunteryS

Untitled

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