Advertisement
Vernon_Roche

Задание 3 Delphi (Лабораторная работа 2)

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