Advertisement
deced

Untitled

Oct 14th, 2020 (edited)
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.93 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. function GetMatrixItem(I, J: Integer): Integer;
  10. var
  11.     Ret: Integer;
  12.     IsCorrect: Boolean;
  13. begin
  14.     repeat
  15.         Writeln('Введите значение элемента матрицы [', I, ',', J, ']');
  16.         IsCorrect := true;
  17.         try
  18.             Readln(Ret)
  19.         except
  20.             IsCorrect := false;
  21.             Writeln('Значение матрицы должно быть числом')
  22.         end;
  23.     until IsCorrect;
  24.     GetMatrixItem := Ret;
  25. end;
  26.  
  27. function GetMatrixSize(): Integer;
  28. var
  29.     Ret: Integer;
  30.     IsCorrect: Boolean;
  31. begin
  32.     Ret := 0;
  33.     repeat
  34.         Writeln('Введите размер матрицы ');
  35.         IsCorrect := true;
  36.         try
  37.             Readln(Ret)
  38.         except
  39.             IsCorrect := false;
  40.             Writeln('Размер матрицы должен быть числом')
  41.         end;
  42.         if ((((Ret < 2) or (Ret > 10000)) or (Ret mod 2 = 1)) and IsCorrect)
  43.         then
  44.         begin
  45.             Writeln('Размер матрицы должен быть кратен двум и принадлежать промежутку от 2 до 10000');
  46.             IsCorrect := false
  47.         end;
  48.     until IsCorrect;
  49.     GetMatrixSize := Ret;
  50. end;
  51.  
  52. procedure PrintMatrix(MatrixToPrint: Matrix);
  53. var
  54.     I, J: Integer;
  55. begin
  56.     for I := 0 to High(MatrixToPrint) do
  57.     begin
  58.         for J := 0 to High(MatrixToPrint) do
  59.             Write(MatrixToPrint[I, J]:6);
  60.         Writeln;
  61.     end;
  62. end;
  63.  
  64. function GetInputType(): String;
  65. var
  66.     Ret: string;
  67.     IsCorrect: Boolean;
  68. begin
  69.     repeat
  70.         Writeln('Выберите способ задания матрицы файл/консоль (ф/к)');
  71.         Read(Ret);
  72.         if (Ret = 'ф') or (Ret = 'Ф') then
  73.         begin
  74.             Ret := 'File';
  75.             IsCorrect := true;
  76.         end
  77.         else if (Ret = 'к') or (Ret = 'К') then
  78.         begin
  79.             Ret := 'Console';
  80.             IsCorrect := true;
  81.         end;
  82.         Readln;
  83.     until IsCorrect;
  84.     GetInputType := Ret;
  85. end;
  86.  
  87. function GetMatrix(): Matrix;
  88. var
  89.     RetMatrix: Matrix;
  90.     I, J, Size: Integer;
  91.     InputType: string;
  92.     IsCorrect: Boolean;
  93.     FilePath: string;
  94.     MatrixFile: TextFile;
  95. begin
  96.     Size := GetMatrixSize();
  97.     SetLength(RetMatrix, Size, Size);
  98.     InputType := GetInputType();
  99.     dec(Size);
  100.     if (InputType = 'Console') then
  101.         for I := 0 to Size do
  102.             for J := 0 to Size do
  103.                 RetMatrix[I, J] := GetMatrixItem(I, J)
  104.     else if (InputType = 'File') then
  105.     begin
  106.         repeat
  107.             IsCorrect := true;
  108.             Writeln('Введите абсолютный путь к файлу ');
  109.             Readln(FilePath);
  110.             if not(FileExists(FilePath)) then
  111.             begin
  112.                 Writeln('Файл не найден, попробуйте ещё раз');
  113.                 IsCorrect := false;
  114.             end;
  115.         until IsCorrect;
  116.         AssignFile(MatrixFile, FilePath);
  117.         Reset(MatrixFile);
  118.         for I := 0 to Size do
  119.         begin
  120.             for J := 0 to Size do
  121.                 try
  122.                     Read(MatrixFile, RetMatrix[I, J]);
  123.                 except
  124.                     Writeln('Значения матрицы должны быть числами ')
  125.                 end;
  126.             Readln(MatrixFile);
  127.         end;
  128.  
  129.     end;
  130.     Writeln('Исходная матрица ');
  131.     PrintMatrix(RetMatrix);
  132.     GetMatrix := RetMatrix;
  133. end;
  134.  
  135. function GetMatrixPart(Matr: Matrix; I, J, Size: Integer): Matrix;
  136. var
  137.     Ret: Matrix;
  138.     indexI, indexJ: Integer;
  139. begin
  140.     SetLength(Ret, Size, Size);
  141.     for indexI := 0 to High(Ret) do
  142.         for indexJ := 0 to High(Ret) do
  143.             Ret[indexI, indexJ] := Matr[indexI + I, indexJ + J];
  144.     GetMatrixPart := Ret;
  145. end;
  146.  
  147. procedure InsertMatrix(MainMatriix, ToInsert: Matrix; I, J: Integer);
  148. var
  149.     indexI, indexJ: Integer;
  150. begin
  151.     for indexI := 0 to High(ToInsert) do
  152.         for indexJ := 0 to High(ToInsert) do
  153.             MainMatriix[indexI + I, indexJ + J] := ToInsert[indexI, indexJ];
  154. end;
  155.  
  156. procedure Swap(ToSwap: Matrix);
  157. var
  158.     Ret, Matrix1, Matrix2, Matrix3, Matrix4: Matrix;
  159.     HalfSize: Integer;
  160. begin
  161.     HalfSize := Length(ToSwap) div 2;
  162.     Matrix1 := GetMatrixPart(ToSwap, 0, 0, HalfSize);
  163.     Matrix2 := GetMatrixPart(ToSwap, 0, HalfSize, HalfSize);
  164.     Matrix3 := GetMatrixPart(ToSwap, HalfSize, 0, HalfSize);
  165.     Matrix4 := GetMatrixPart(ToSwap, HalfSize, HalfSize, HalfSize);
  166.     InsertMatrix(ToSwap, Matrix1, HalfSize, HalfSize);
  167.     InsertMatrix(ToSwap, Matrix2, HalfSize, 0);
  168.     InsertMatrix(ToSwap, Matrix3, 0, 0);
  169.     InsertMatrix(ToSwap, Matrix4, 0, HalfSize);
  170.     Writeln('Матрица после смещения');
  171.     PrintMatrix(ToSwap);
  172. end;
  173.  
  174. begin
  175.     Swap(GetMatrix());
  176. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement