Advertisement
Guest User

Untitled

a guest
Oct 15th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.41 KB | None | 0 0
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils, Windows;
  7.  
  8. const
  9.    ErrorMessage = 'Ошибка! Элементы матрицы должны находится задаваться целыми числами в диапазоне [-2147483648, ..., -1, 0, 1, ..., 2147483648]';
  10.  
  11. type
  12.    MatrixArray = array of array of Integer;
  13.  
  14.  
  15. //Функция для проверки на существование файла
  16. function IsCorrectName(FileName: String): Boolean;
  17. begin
  18.    if FileExists(FileName) then
  19.       IsCorrectName := True
  20.    else
  21.    begin
  22.       Writeln('Файла с данным названием не существует в папке в данной программой, перепроверьте название файла и введите снова четко следуя инструкциям');
  23.       IsCorrectName := False;
  24.    end;
  25. end;
  26.  
  27. //Функция для проверки на квадратную матрицу
  28. function OrderOfMatrix(var Input: TextFile): Integer; //Если квадратная возвращает порядок если нет возвращает порядок 0
  29. var
  30.    i, NumOfThisLine, Hit, Order: Integer;
  31.    SquareControl: Boolean;
  32.    NumOfColumn : String;
  33. begin
  34.    Read(Input, NumOfColumn);
  35.    Order := Length(StringReplace(NumOfColumn, ' ', '', [rfReplaceAll, rfIgnoreCase]));  //WTF
  36.    SquareControl := False;
  37.    i := 0;
  38.    Reset(Input);
  39.    while (i < Order) do
  40.    begin
  41.       NumOfThisLine := 0;
  42.       while (not seekEOLN(Input)) do
  43.       begin
  44.          try
  45.             Read(Input, Hit);
  46.          except
  47.             Writeln(ErrorMessage);
  48.          end;
  49.          inc(NumOfThisLine);
  50.       end;
  51.       inc(i);
  52.       Readln(Input);
  53.       if (NumOfThisLine = Order) then        
  54.          SquareControl := True
  55.       else
  56.       begin
  57.          Writeln('В вашей матрице нехватает элементов, пожалуйста, добавьте элементы и запустите программу снова');
  58.          i := Order + 1;
  59.          SquareControl := False
  60.       end;
  61.    end;
  62.    if SquareControl then
  63.       OrderOfMatrix := Order
  64.    else
  65.       OrderOfMatrix := 0;
  66. end;
  67.  
  68.  
  69. //Функция для заполнения массива
  70. function InfToArray(var Input: TextFile; Order: Integer): MatrixArray;
  71. var
  72.    i, j, Iteration: Integer;
  73.    InfArray: MatrixArray;
  74. begin
  75.    Reset(Input);
  76.    SetLength(InfArray, Order, Order);
  77.    Iteration := Order - 1;
  78.    for i := 0 to Iteration do
  79.    begin
  80.       for j := 0 to Iteration do
  81.       begin
  82.          Read(Input, InfArray[i][j]);
  83.       end;
  84.       Readln(Input);
  85.    end;
  86.    InfToArray := InfArray;
  87. end;
  88.  
  89.  
  90. //Функция для подсчета суммы согласно заданной формуле
  91. function MatrixSum(Matrix: MatrixArray; Order: Integer): Integer;
  92. var
  93.    i, Sum, j, Iteration: Integer;
  94. begin
  95.    SetLength(Matrix, Order, Order);
  96.    Iteration := Order - 1;
  97.    Sum := 0;
  98.    for i := 0 to Iteration do
  99.    begin
  100.       if (i <= Iteration - i) then
  101.          for j:= i to Iteration - i do
  102.             Sum := Sum + Matrix[i][j]
  103.       else
  104.          for j:= i downto Iteration - i do
  105.             Sum := Sum + Matrix[i][j]
  106.    end;
  107.    MatrixSum := Sum;
  108. end;
  109.  
  110.  
  111. //Основное тело
  112. var
  113.   Matrix: MatrixArray;
  114.   Order: Integer;
  115.   FileName: String;
  116.   Input: TextFile;
  117. begin
  118.    SetConsoleCP(1251);
  119.    SetConsoleOutputCP(1251);
  120.    Writeln('Здравствуйте, данная программа принимает матрицу и возвращает сумму заданных в условии элементов');
  121.    Writeln('Пожалуйста, введите название файла в котором находится матрица. ПРИМЕР Example.txt');
  122.    repeat
  123.       Readln(FileName);
  124.    until IsCorrectName(FileName);
  125.    AssignFile(Input, FileName);
  126.    Reset(Input);
  127.    Order := OrderOfMatrix(Input);
  128.    if (Order <> 0) then
  129.    begin
  130.       SetLength(Matrix, Order, Order);
  131.       Matrix := InfToArray(Input, Order);
  132.       Writeln(MatrixSum(Matrix, Order));
  133.    end
  134.    else
  135.    begin
  136.       Writeln('Ваша матрица не является квадратной, кол-во строк не соответсвует кол-ву столбцов');
  137.       Writeln('Пожалуйста, исправьте это и запустите программу снова');
  138.    end;
  139.    Readln;
  140. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement