MaksNew

Untitled

Oct 30th, 2020
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.18 KB | None | 0 0
  1. program Lab2_4;
  2.  
  3. uses
  4.     System.SysUtils;
  5.  
  6. type
  7.     Matrix = array of array of Integer;
  8.  
  9. var
  10.     MainMatrix: Matrix;
  11.     Order: Integer;
  12.     Path: String;
  13.     Count: Integer;
  14.     Zero: array of Integer;
  15.  
  16. function IsFileCorrect(var Path: String; Order: Integer): Boolean;
  17. var
  18.     ISize, JSize, Num: Integer;
  19.     IsCorrect: Boolean;
  20.     MatrixFile: TextFile;
  21. begin
  22.     ISize := 0;
  23.     JSize := 0;
  24.     IsCorrect := true;
  25.     AssignFile(MatrixFile, Path);
  26.     Reset(MatrixFile);
  27.     while not(SeekEof(MatrixFile)) and IsCorrect do
  28.     begin
  29.         inc(ISize);
  30.         while not(SeekEoln(MatrixFile)) and IsCorrect do
  31.         begin
  32.             try
  33.                 Read(MatrixFile, Num);
  34.             except
  35.                 IsCorrect := false;
  36.             end;
  37.             inc(JSize);
  38.         end;
  39.         Readln(MatrixFile);
  40.         if (JSize <> Order) then
  41.             IsCorrect := false;
  42.         JSize := 0;
  43.     end;
  44.     if ISize <> Order then
  45.         IsCorrect := false;
  46.     CloseFile(MatrixFile);
  47.     result := IsCorrect;
  48. end;
  49.  
  50. function FilePath(Order: Integer): String;
  51. var
  52.     Path: String;
  53.     IsCorrect: Boolean;
  54. begin
  55.     repeat
  56.         Writeln('Введите абсолютный путь к файлу ');
  57.         Readln(Path);
  58.         IsCorrect := false;
  59.         if FileExists(Path) then
  60.         begin
  61.             if IsFileCorrect(Path, Order) then
  62.                 IsCorrect := true
  63.             else
  64.                 Writeln('Проверьте данные в файле. Это должны быть числа, записанные в виде матрицы. Порядок матрицы должен соответствовать введённому.');
  65.         end
  66.         else
  67.             Writeln('Файл не найден');
  68.  
  69.     until IsCorrect;
  70.     result := Path;
  71. end;
  72.  
  73. function InputOrder(): Integer;
  74. var
  75.     Order: Integer;
  76.     IsCorrect: Boolean;
  77. begin
  78.     repeat
  79.         Writeln('Введите порядок матрицы: ');
  80.         IsCorrect := true;
  81.         try
  82.             Readln(Order)
  83.         except
  84.             IsCorrect := false;
  85.             Writeln('Порядок матрицы должен быть числом')
  86.         end;
  87.         if ((Order < 1) or (Order > 10000))and IsCorrect then
  88.         begin
  89.             Writeln('Размер матрицы должен принадлежать промежутку от 2 до 10000');
  90.             IsCorrect := false
  91.         end;
  92.  
  93.     until IsCorrect;
  94.     result := Order;
  95. end;
  96.  
  97. procedure FileToMatrix(var MainMatrix:Matrix; Order: Integer; var Path: String);
  98. var
  99.     I, J: Integer;
  100.     MatrixFile: TextFile;
  101. begin
  102.     SetLength(MainMatrix, Order, Order);
  103.     AssignFile(MatrixFile, Path);
  104.     Reset(MatrixFile);
  105.     for I := 0 to Order-1 do
  106.     begin
  107.         for J := 0 to Order-1 do
  108.         Read(MatrixFile, MainMatrix[I, J]);
  109.         Readln(MatrixFile);
  110.     end;
  111.     CloseFile(MatrixFile);
  112. end;
  113.  
  114. function Output(): String;
  115. var
  116.     Patho: String;
  117.     IsCorrect: Boolean;
  118. begin
  119.     IsCorrect := false;
  120.     repeat
  121.         Writeln('Введите директорию, в которую хотите сохранить матрицу');
  122.         Readln(Patho);
  123.         if DirectoryExists(Patho) then
  124.             IsCorrect := true
  125.         else
  126.             Writeln('Такой директории не существует.Попробуйте ещё раз');
  127.     until IsCorrect;
  128.     Result := Patho;
  129. end;
  130.  
  131. procedure ConditionToFile(Count: Integer);
  132. var
  133.     I, J: Integer;
  134.     OutputFile: TextFile;
  135.     Directory: String;
  136. begin
  137.     Directory := Output();
  138.     AssignFile(OutputFile, Directory + '\output.txt');
  139.     Rewrite(OutputFile);
  140.      Write(OutputFile, 'Количество столбцов матрицы, в которых имеются нулевые элементы: ' , count);
  141.     Writeln(OutputFile);
  142.     Writeln('Матрица сохранена по указанному пути');
  143.     CloseFile(OutputFile);
  144.     Write;
  145. end;
  146.  
  147. procedure PrintMatrix(MainMatrix: Matrix);
  148. var
  149.     I, J: Integer;
  150. begin
  151.     for I := 0 to High(MainMatrix) do
  152.     begin
  153.         for J := 0 to High(MainMatrix) do
  154.             Write(MainMatrix[I, J]:6);
  155.             Writeln;
  156.     end;
  157.     Writeln;
  158. end;
  159.  
  160. procedure PrintResult(Count: Integer);
  161. begin
  162.     Writeln('Количество столбцов матрицы, в которых имеются нулевые элементы: ', count);
  163. end;
  164.  
  165. function Condition(MainMatrix: Matrix; Order: Integer; Count:Integer): Integer;
  166. var
  167. I, J:Integer;
  168.  
  169. begin
  170.     for I := 0 to Order do
  171.     begin
  172.     J := 0;
  173.         while J < Order do
  174.         begin
  175.             if MainMatrix[J][I] = 0 then
  176.             begin
  177.             Inc(Count);
  178.             J := 3;
  179.             end;
  180.         Inc(J);
  181.     end;
  182.     end;
  183.     PrintResult(Count);
  184.     Result := Count;
  185. end;
  186.  
  187. begin
  188.     Order := InputOrder();
  189.     Path := FilePath(Order);
  190.     FileToMatrix(MainMatrix, Order, Path);
  191.     Writeln('Матрица, для которой производились вычисления: ');
  192.     PrintMatrix(MainMatrix);
  193.     Count := Condition(MainMatrix, Order, Count);
  194.     ConditionToFile(Count);
  195.     Readln;
  196.  
  197. end.
Advertisement
Add Comment
Please, Sign In to add comment