Advertisement
Vanya_Shestakov

laba2.4 (Delphi)

Oct 11th, 2020 (edited)
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.35 KB | None | 0 0
  1. program laba2_4;
  2. uses
  3.     System.SysUtils;
  4.  
  5. type
  6.     TwoDimensionalArray = Array of Array of Double;
  7.  
  8. function InputOrderFromConsole(): Integer; Forward;
  9. function InputMatrixFromConsole(): Double; Forward;
  10.  
  11.  
  12. function InputPath(): String;
  13. var
  14.     Path: String;
  15.     IsCorrect: Boolean;
  16. begin
  17.     repeat
  18.         IsCorrect := True;
  19.         Readln(Path);
  20.  
  21.         if not FileExists(Path) then
  22.         begin
  23.             IsCorrect := False;
  24.             Writeln('Файл не найден! Введите абсолютную ссылку на файл');
  25.         end;
  26.     until IsCorrect;
  27.     InputPath := Path;
  28. end;
  29.  
  30. function InputOrderFromFile(Path: String): Integer;
  31. var
  32.     Order: Integer;
  33.     Flag: Boolean;
  34.     InputFile: TextFile;
  35. begin
  36.     AssignFile(InputFile, Path);
  37.     Reset(InputFile);
  38.     Flag := True;
  39.  
  40.     Writeln('Порядок матрицы считывается из файла...');
  41.     try
  42.         Readln(InputFile, Order);
  43.     except
  44.         Flag := False;
  45.         Order := InputOrderFromConsole();
  46.     end;
  47.  
  48.     if (Flag) and ((Order < 2) or (Order > 6)) then
  49.     begin
  50.         Order := InputOrderFromConsole();
  51.     end;
  52.  
  53.     CloseFile(InputFile);
  54.     InputOrderFromFile := Order;
  55. end;
  56.  
  57. function InputOrderFromConsole(): Integer;
  58. var
  59.     Order: Integer;
  60.     IsCorrect: Boolean;
  61. begin
  62.     Writeln('В вашем файле вписан некорректный порядок матрицы. Введите порядок из косоли!');
  63.  
  64.     repeat
  65.         IsCorrect := True;
  66.         try
  67.             Readln(Order);
  68.         except
  69.             Writeln('Введите целое число!');
  70.             IsCorrect := False;
  71.         end;
  72.  
  73.         if (IsCorrect) and ((Order < 2) or (Order > 6)) then
  74.         begin
  75.             Writeln('Некорректные данные. Введите порядок из диапазона [2;6]');
  76.             IsCorrect := False;    
  77.         end;
  78.     until IsCorrect;
  79.     InputOrderFromConsole := Order;
  80. end;
  81.  
  82. procedure InputMatrixFromFile(var Matrix: TwoDimensionalArray; Path: String);
  83. var
  84.     I, J: Integer;
  85.     IsCorrect: Boolean;
  86.     InputFile: TextFile;
  87. begin
  88.     AssignFile(InputFile, Path);
  89.     Reset(InputFile);
  90.     Readln(InputFile);
  91.  
  92.     Writeln('Матрица считывается из файла');
  93.     for I := 0 to High(Matrix) do
  94.     begin
  95.         for J := 0 to High(Matrix) do
  96.         begin
  97.             try
  98.                 Read(InputFile, Matrix[I][J]);
  99.             except
  100.                 Writeln('В вашем файле некорректный элемент матрицы a', i + 1, j + 1, '. Введите его из консоли!');
  101.                 Matrix[I][J] := InputMatrixFromConsole();
  102.                 Read(InputFile);
  103.             end;
  104.         end;
  105.         Readln(InputFile);
  106.     end;
  107.     CloseFile(InputFile);
  108. end;
  109.  
  110. function InputMatrixFromConsole(): Double;
  111. var
  112.     Element: Double;
  113.     IsCorrect: Boolean;
  114. begin
  115.     repeat
  116.         IsCorrect := True;
  117.         try
  118.             Readln(Element);
  119.         except
  120.             Writeln('Введите число!');
  121.             IsCorrect := False;
  122.         end;
  123.     until IsCorrect;
  124.     InputMatrixFromConsole := Element;    
  125. end;
  126.  
  127. procedure PrintMatrix(Matrix: TwoDimensionalArray);
  128. var
  129.     I, J: Integer;
  130. begin
  131.     for I := 0 to High(Matrix) do
  132.     begin
  133.         for J := 0 to High(Matrix) do
  134.         begin
  135.             Write(FormatFloat('0.####',Matrix[I][J]), '  ');
  136.         end;
  137.         Writeln;
  138.     end;
  139. end;
  140.  
  141. procedure DoInsertionSort(var Matrix: TwoDimensionalArray);
  142. var
  143.     I, J, K: Integer;
  144.     Current: Double;
  145.  
  146. begin
  147.     for I := 0 to High(Matrix) do
  148.     begin
  149.         for J := 0 to High(Matrix) do
  150.         begin
  151.             Current := Matrix[I][J];
  152.             K := J;
  153.  
  154.             while (K > 0) and (Current < Matrix[I][K - 1]) do
  155.             begin
  156.                  Matrix[I][K] := matrix[I][K - 1];
  157.                  K := K - 1;
  158.             end;
  159.             Matrix[I][K] := Current;
  160.         end;
  161.     end;
  162. end;
  163.  
  164. procedure DoBubbleSortForStrings(var Matrix: TwoDimensionalArray);
  165. var
  166.     I, J, K: Integer;
  167.     Temp: Double;
  168.  
  169. begin
  170.     for K := 0 to High(Matrix) do
  171.     begin
  172.         for I := 0 to High(Matrix) - 1 do
  173.         begin
  174.             if Matrix[I][High(Matrix)] > Matrix[I + 1][High(Matrix)] then
  175.             begin
  176.                 for J := 0 to High(Matrix) do
  177.                 begin
  178.                     Temp := Matrix[I][J];
  179.                     Matrix[I][J] := Matrix[I + 1][J];
  180.                     Matrix[I + 1][J] := Temp;
  181.                 end;
  182.             end;
  183.         end;
  184.     end;
  185. end;
  186.  
  187. procedure OutputToFile(Matrix: TwoDimensionalArray; Path: String);
  188. var
  189.     OutputFile: TextFile;
  190.     I, J: Integer;
  191. begin
  192.     AssignFile(OutputFile, Path);
  193.     Reset(OutputFile);
  194.     Rewrite(OutputFile);
  195.  
  196.     for I := 0 to High(Matrix) do
  197.     begin
  198.         for J := 0 to High(Matrix) do
  199.         begin
  200.             Write(OutputFile, FormatFloat('0.####',Matrix[I][J]), '  ');
  201.         end;
  202.         Writeln(OutputFile);
  203.     end;
  204.     CloseFile(OutputFile);
  205.     Writeln('Данные успешно записаны в файл!');
  206. end;
  207.  
  208. procedure Main();
  209. var
  210.     Order: Integer;
  211.     Matrix: TwoDimensionalArray;
  212.     PathInput, PathOutput: String;
  213. begin
  214.     Writeln('Дана матрица A порядка n.');
  215.     Writeln('Программа отсортировывает строки матрицы');
  216.     Writeln('в порядке возрастания наибольших элементов в каждой строке.');
  217.     Writeln('(Порядок матрицы должен быть в диапазоне целых чисел от 2 до 6)');
  218.     Writeln;
  219.  
  220.     Writeln('Введите абсолютную ссылку на файл ввода');
  221.     PathInput := InputPath();
  222.     Writeln('Введите абсолютную ссылку на файл вывода');
  223.     PathOutput := InputPath();
  224.  
  225.     Order := InputOrderFromFile(PathInput);
  226.     SetLength(Matrix, Order, Order);
  227.     InputMatrixFromFile(Matrix, PathInput);
  228.     Writeln('Исходная матрица:');
  229.     PrintMatrix(Matrix);
  230.  
  231.     DoInsertionSort(Matrix);
  232.     Writeln('Отсортированная матрица:');
  233.     PrintMatrix(Matrix);
  234.  
  235.     OutputToFile(Matrix, PathOutput);
  236.     Readln;
  237. end;
  238.  
  239. begin
  240.     Main;
  241. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement