Advertisement
THOMAS_SHELBY_18

Lab2_3(Delphi)

Oct 22nd, 2023 (edited)
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.06 KB | Source Code | 0 0
  1. Program Lab2_3;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TMatrix = Array of Array of Integer;
  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.         If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
  27.         Begin
  28.             Write('Недопустимое значение! Введите значение еще раз: ');
  29.             IsCorrect := False;
  30.         End;
  31.     Until (IsCorrect);
  32.     GetNum := Num;
  33. End;
  34.  
  35. Function CheckFile(Path: String; Var InputInt: Integer): Boolean;
  36. Var
  37.     IsFileCorrect: Boolean;
  38.     InputFile: TextFile;
  39.  
  40. Const
  41.     MIN_N = 1;
  42.     MAX_N = 10;
  43.  
  44. Begin
  45.     IsFileCorrect := True;
  46.     If FileExists(Path) Then
  47.     Begin
  48.         AssignFile(InputFile, Path);
  49.         Try
  50.             Reset(InputFile);
  51.         Except
  52.             Writeln('Не удалось открыть файл!');
  53.             IsFileCorrect := False;
  54.         End;
  55.          If IsFileCorrect And Not(EoF(InputFile)) Then
  56.         Begin
  57.             Try
  58.                 Read(InputFile, InputInt);
  59.             Except
  60.                 Writeln('Данные в файле представлены в неправильном формате!');
  61.                 IsFileCorrect := False;
  62.             End;
  63.         End;
  64.  
  65.         If IsFileCorrect And Not(EoF(InputFile)) Then
  66.         Begin
  67.             Writeln('Данные в файле представлены в неправильном формате!');
  68.             IsFileCorrect := False;
  69.         End;
  70.  
  71.         If IsFileCorrect And ((InputInt < MIN_N) Or (InputInt > MAX_N)) Then
  72.         Begin
  73.             Writeln('Значение выходит за возможные пределы!');
  74.             IsFileCorrect := False;
  75.         End;
  76.         CloseFile(InputFile);
  77.     End
  78.     Else
  79.     Begin
  80.         Writeln('Файла по данному пути не существует!');
  81.         IsFileCorrect := False;
  82.     End;
  83.     CheckFile := IsFileCorrect;
  84. End;
  85.  
  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. Begin
  97.     Write('Выберите вариант ввода:', #10, '1. Ввод из консоли', #10, '2. Ввод из файла', #10, 'Использовать вариант: ');
  98.     Choice := GetNum(1,2);
  99.  
  100.     If Choice = 1 Then
  101.     Begin
  102.         Writeln('Введите порядок матрицы N от ', MIN_N, ' до ', MAX_N, ': ');
  103.         Num := GetNum(MIN_N, MAX_N);
  104.     End
  105.     Else
  106.     Begin
  107.         Writeln('Данные в файле должны содержать натуральное число - порядок матрицы N от ', MIN_N, ' до ', MAX_N, ': ');
  108.         Repeat
  109.             Write('Введите путь к файлу с его раширением: ');
  110.             Readln(PathFile);
  111.             IsInputFromFileSuccessfully := CheckFile(PathFile, Num);
  112.         Until IsInputFromFileSuccessfully;
  113.     End;
  114.     InputN := Num;
  115. End;
  116.  
  117. Procedure FillMatrix(Var Matrix: TMatrix);
  118. Var
  119.     I, J, Counter: Integer;
  120. Begin
  121.  
  122.     I := 0;
  123.     Counter := 1;
  124.  
  125.     Repeat
  126.         If I Mod 2 = 0 Then
  127.         Begin
  128.             For J := 0 To High(Matrix[I]) Do
  129.             Begin
  130.                 Matrix[I][J] := Counter;
  131.                 Inc(Counter);
  132.             End;
  133.         End
  134.         Else
  135.         Begin
  136.             For J := High(Matrix[I]) DownTo 0 Do
  137.             Begin
  138.                 Matrix[I][J] := Counter;
  139.                 Inc(Counter);
  140.             End;
  141.         End;
  142.         Inc(I);
  143.     Until (I > High(Matrix));
  144. End;
  145.  
  146. Procedure OutputMatrix (Var Matrix: TMatrix);
  147. Var
  148.     I, J, Choice: Integer;
  149.     OutputFile: TextFile;
  150.     Path: String;
  151.     IsPathCorrect: Boolean;
  152. Begin
  153.     Write('Выберите вариант вывода:', #10, '1. Вывод в консоль', #10, '2. Вывод в файл', #10, 'Использовать вариант: ');
  154.     Choice := GetNum(1,2);
  155.  
  156.     If Choice = 1 Then
  157.     Begin
  158.         Writeln('Результат:');
  159.         For I := 0 To High(Matrix) Do
  160.         Begin
  161.             For J := 0 To High(Matrix[I]) Do
  162.             Begin
  163.                 Write(Matrix[I][J]:5);
  164.             End;
  165.             Writeln(#10);
  166.         End;
  167.     End
  168.     Else
  169.     Begin
  170.     Writeln('Для вывода введите путь к файлу и его имя (например, F:\Projects\Matrix\Имя файла.txt). Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)');
  171.         Repeat
  172.             IsPathCorrect := True;
  173.             Write('Введите путь: ');
  174.             Readln(Path);
  175.             If Path = '' Then
  176.                 IsPathCorrect := false
  177.             Else
  178.             Begin
  179.                 AssignFile(OutputFile, Path);
  180.                 Try
  181.                     Rewrite(OutputFile);
  182.                 Except
  183.                     Writeln('Не удалось вывести в Файл');
  184.                     IsPathCorrect := False;
  185.                 End;
  186.             End;
  187.         Until IsPathCorrect;
  188.  
  189.         For I := 0 To High(Matrix) Do
  190.         Begin
  191.             For J := 0 To High(Matrix[I]) Do
  192.             Begin
  193.                 Write(OutputFile, Matrix[I][J]:5);
  194.             End;
  195.             Writeln(OutputFile, #10);
  196.         End;
  197.         CloseFile(OutputFile);
  198.         Writeln('Вывод данных...  успешно!');
  199.     End;
  200. End;
  201.  
  202. Begin
  203. Writeln('Данная программа заполнит матрицу чисел "змейкой"');
  204. N := InputN;
  205. SetLength(Matrix, N, N);
  206. FillMatrix(Matrix);
  207. OutputMatrix(Matrix);
  208. Readln;
  209. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement