Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.61 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.    InstructionForOrder = 'Îøèáêà! Ïîðÿäîê ìàòðèöû äîëæåí çàäàâàòüñÿ íàòóðàëüíûì ÷èñëîì â äèàïàçîíå [1, ..., 2147483648]';
  11.  
  12. type
  13.    MatrixArray = array of array of Integer;
  14.  
  15.  
  16. //Ôóíêöèÿ äëÿ ïðîâåðêè íà ñóùåñòâîâàíèå ôàéëà
  17. function IsCorrectName(): String;
  18. var
  19.    FileName: String;
  20. begin
  21.    Writeln('Ïîæàëóéñòà, ââåäèòå íàçâàíèå ôàéëà â êîòîðîì íàõîäèòñÿ ìàòðèöà. ÏÐÈÌÅÐ Example');
  22.    Readln(FileName);
  23.    FileName := FileName + '.txt';
  24.    if FileExists(FileName) then
  25.       IsCorrectName := FileName
  26.    else
  27.    begin
  28.       Writeln('Ôàéëà ñ äàííûì íàçâàíèåì íå ñóùåñòâóåò â ïàïêå â äàííîé ïðîãðàììîé, ïåðåïðîâåðüòå íàçâàíèå ôàéëà è ââåäèòå ñíîâà ÷åòêî ñëåäóÿ èíñòðóêöèÿì');
  29.       IsCorrectName := '';
  30.    end;
  31. end;
  32.  
  33. //Ôóíêöèÿ äëÿ ïðîâåðêè íà êâàäðàòíóþ ìàòðèöó
  34. function OrderOfMatrix(var Input: TextFile): Integer; //Åñëè êâàäðàòíàÿ âîçâðàùàåò ïîðÿäîê åñëè íåò âîçâðàùàåò ïîðÿäîê 0
  35. var
  36.    i, NumOfThisLine, Hit, Order: Integer;
  37.    SquareControl: Boolean;
  38.    Symbol: String;
  39. begin
  40.    Order := 0;
  41.    while (not SeekEOF(input)) do
  42.    begin
  43.       Readln(Input, Symbol);
  44.       inc(Order)
  45.    end;
  46.    SquareControl := False;
  47.    i := 0;
  48.    Reset(Input);
  49.    while (i < Order) do
  50.    begin
  51.       NumOfThisLine := 0;
  52.       while (not seekEOLN(Input)) do
  53.       begin
  54.          try
  55.             Read(Input, Hit);
  56.          except
  57.             Writeln(ErrorMessage);
  58.          end;
  59.          inc(NumOfThisLine);
  60.       end;
  61.       inc(i);
  62.       Readln(Input);
  63.       if (NumOfThisLine = Order) then
  64.          SquareControl := True
  65.       else
  66.       begin
  67.          Writeln('Â âàøåé ìàòðèöå íåõâàòàåò ýëåìåíòîâ, ïîæàëóéñòà, äîáàâüòå ýëåìåíòû è çàïóñòèòå ïðîãðàììó ñíîâà');
  68.          i := Order + 1;
  69.          SquareControl := False
  70.       end;
  71.    end;
  72.    if SquareControl then
  73.       OrderOfMatrix := Order
  74.    else
  75.    begin
  76.          Writeln('Âàøà ìàòðèöà íå ÿâëÿåòñÿ êâàäðàòíîé, êîë-âî ñòðîê íå ñîîòâåòñâóåò êîë-âó ñòîëáöîâ');
  77.          Writeln('Ïîæàëóéñòà, èñïðàâüòå ýòî è çàïóñòèòå ïðîãðàììó ñíîâà');
  78.          OrderOfMatrix := 0;
  79.    end;
  80. end;
  81.  
  82.  
  83. //Ôóíêöèÿ äëÿ çàïîëíåíèÿ ìàññèâà ÷åðåç ôàéë
  84. function InfFileToArray(var Input: TextFile; Order: Integer): MatrixArray;
  85. var
  86.    i, j, Iteration: Integer;
  87.    InfArray: MatrixArray;
  88. begin
  89.    Reset(Input);
  90.    SetLength(InfArray, Order, Order);
  91.    Iteration := Order - 1;
  92.    for i := 0 to Iteration do
  93.    begin
  94.       for j := 0 to Iteration do
  95.       begin
  96.          Read(Input, InfArray[i][j]);
  97.       end;
  98.       Readln(Input);
  99.    end;
  100.    InfFileToArray := InfArray;
  101. end;
  102.  
  103. //Ôóíêöèÿ äëÿ ïîäñ÷åòà ïîðÿäêà ìàòðèöû (ïðè ââîäå ìàòðèöû ÷åðåç êîíñîëü)
  104. function IsOrder(): Integer;
  105. var
  106.    Order: Integer;
  107.    IsCorrect: Boolean;
  108. begin
  109.  
  110.    IsCorrect := False;
  111.    repeat
  112.       Writeln('Ïîæàëóéñòà, ââåäèòå ïîðÿäîê ìàòðèöû');
  113.       try
  114.          Readln(Order);
  115.          if (Order > 0) then
  116.             IsCorrect := True;
  117.       except
  118.          Writeln(InstructionForOrder);
  119.       end;
  120.    until IsCorrect;
  121.    IsOrder := Order;
  122. end;
  123.  
  124. //Ôóíêöèÿ äëÿ çàïîëíåíèÿ ìàòðèöû ÷åðåç êîíñîëü
  125. function InfConsoleToArray(Order: Integer): MatrixArray;
  126. var
  127.    i, j, Iteration: Integer;
  128.    IsCorrect: Boolean;
  129.    Matrix: MatrixArray;
  130. begin
  131.    Iteration := Order - 1;
  132.    SetLength(Matrix, Order, Order);
  133.    Writeln('Ïîæàëóéñòà, ââåäèòå ýëåìåíòû ìàòðèöû [¹ñòðîêè, ¹ñòîëáöà]');
  134.    for i := 0 to Iteration do
  135.       for j := 0 to Iteration do
  136.          repeat
  137.             try
  138.                Write('[', i+1, '][', j+1, ']: ');
  139.                Readln(Matrix[i][j]);
  140.                IsCorrect := True;
  141.             except
  142.                Writeln(ErrorMessage);
  143.                IsCorrect := False;
  144.             end;
  145.          until IsCorrect;
  146.    InfConsoleToArray := Matrix;
  147. end;
  148.  
  149.  
  150. //Ôóíêöèÿ äëÿ ïîäñ÷åòà ñóììû ñîãëàñíî çàäàííîé ôîðìóëå
  151. function MatrixSum(Matrix: MatrixArray; Order: Integer): Integer;
  152. var
  153.    i, Sum, j, Iteration: Integer;
  154. begin
  155.    SetLength(Matrix, Order, Order);
  156.    Iteration := Order - 1;
  157.    Sum := 0;
  158.    for i := 0 to Iteration do
  159.    begin
  160.       if (i <= Iteration - i) then
  161.          for j:= i to Iteration - i do
  162.             Sum := Sum + Matrix[i][j]
  163.       else
  164.          for j:= i downto Iteration - i do
  165.             Sum := Sum + Matrix[i][j]
  166.    end;
  167.    MatrixSum := Sum;
  168. end;
  169.  
  170. //Ôóíêöèÿ äëÿ âûâîäà ñóììû â ôàéë è â êîíñîëü
  171. procedure Output(Sum: Integer);
  172. var
  173.    Output: TextFile;
  174.    FileName: String;
  175. begin
  176.    Writeln('Ïîæàëóéñòà, ââåäèòå èìÿ ôàéëà â êîòîðûé íåîáõîäèìî çàïèñàòü ðåçóëüòàò âûïîëíåíèÿ ïðîãðàììû. ÏÐÈÌÅÐ: Example');
  177.    Readln(FileName);
  178.    FileName := FileName + '.txt';
  179.    AssignFile(Output, FileName);
  180.    Rewrite(Output);
  181.    Writeln(Output, Sum);
  182.    CloseFile(Output);
  183.    Writeln('Èíôîðìàöèÿ â ôàéë óñïåøíî çàïèñàíà.');
  184. end;
  185.  
  186. var
  187.   Matrix: MatrixArray;
  188.   Order, Sum: Integer;
  189.   FileName, Choise: String;
  190.   Input: TextFile;
  191.   IsCorrectChoise: Boolean;
  192. begin
  193.    SetConsoleCP(1251);
  194.    SetConsoleOutputCP(1251);
  195.    Writeln('Çäðàâñòâóéòå, äàííàÿ ïðîãðàììà ïðèíèìàåò ìàòðèöó è âîçâðàùàåò ñóììó çàäàííûõ â óñëîâèè ýëåìåíòîâ');
  196.    Writeln('×åðåç ÷òî âû áû õîòåëè ââîäèòü äàííûå?');
  197.    IsCorrectChoise := False;
  198.    repeat
  199.    Writeln('Äëÿ ââîäà ñ ôàéëà ââåäèòå: F' +#13#10 +'Äëÿ ââîäà ñ êîíñîëè ââåäèòå: C');
  200.    Readln(Choise);
  201.    if Choise = 'F' then
  202.    begin
  203.       FileName := IsCorrectName;
  204.       if FileName <> '' then
  205.       begin
  206.          AssignFile(Input, FileName);
  207.          Reset(Input);
  208.          Order := OrderOfMatrix(Input);
  209.          Close(Input);
  210.          if (Order <> 0) then
  211.          begin
  212.             IsCorrectChoise := True;
  213.             SetLength(Matrix, Order, Order);
  214.             Matrix := InfFileToArray(Input ,Order);
  215.          end;
  216.       end
  217.    end
  218.    else
  219.       if Choise = 'C' then
  220.       begin
  221.          IsCorrectChoise := True;
  222.          Order := IsOrder();
  223.          SetLength(Matrix, Order, Order);
  224.          Matrix := InfConsoleToArray(Order);
  225.       end
  226.       else
  227.          Writeln('Âû âûáðàëè íåêîððåêòíûé âàðèàíò ââîäà, âûáèðåòå ñíîâà ÷åòêî ñëåäóÿ èíñòðóêöèÿì');
  228.    until IsCorrectChoise;
  229.    Sum := MatrixSum(Matrix, Order);
  230.    Writeln('Ñóììà ýëåìåíòîâ ìàòðèöû ïî çàäàííîé ôîðìóëå: ', Sum);
  231.    Output(Sum);
  232.    Readln;
  233. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement