Advertisement
Vladislav8653

4.4 delphi

Apr 3rd, 2023
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 10.12 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.Menus;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Edit1: TEdit;
  12.     Edit2: TEdit;
  13.     StringGrid1: TStringGrid;
  14.     Label1: TLabel;
  15.     Label2: TLabel;
  16.     Label3: TLabel;
  17.     Label4: TLabel;
  18.     Button1: TButton;
  19.     OpenDialog1: TOpenDialog;
  20.     SaveDialog1: TSaveDialog;
  21.     MainMenu1: TMainMenu;
  22.     PopupMenu1: TPopupMenu;
  23.     N1: TMenuItem;
  24.     N2: TMenuItem;
  25.     N3: TMenuItem;
  26.     N5: TMenuItem;
  27.     procedure Edit1Change(Sender: TObject);
  28.     procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  29.     procedure Button1Click(Sender: TObject);
  30.     procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  31.     procedure Edit2Change(Sender: TObject);
  32.     procedure N5Click(Sender: TObject);
  33.     procedure N2Click(Sender: TObject);
  34.     procedure N3Click(Sender: TObject);
  35.   private
  36.     { Private declarations }
  37.   public
  38.     { Public declarations }
  39.   end;
  40.  
  41. var
  42.   Form1: TForm1;
  43.   N : Integer;
  44.   Arr : Array of Integer;
  45.   IsCorrect, IsFileOpen : Boolean;
  46.   Path, Result : String;
  47.  
  48. implementation
  49.  
  50. {$R *.dfm}
  51.  
  52.  
  53. procedure Swap (var Arr : Array of Integer; I, J : Integer);
  54. Var
  55.     Temp : Integer;
  56. Begin
  57.     Temp := Arr[I];
  58.     Arr[I] := Arr[J];
  59.     Arr[J] := Temp;
  60. End;
  61.  
  62. Function NextSet (var Arr : Array of Integer; N : Integer) : Boolean;
  63. Var
  64.     I, J, K, L, R : Integer;
  65.     AnythingElse : Boolean;
  66. Begin
  67.     AnythingElse := True;
  68.     J := N - 2;
  69.     While ((J <> -1) and (Arr[J] >= Arr[J + 1])) Do
  70.     begin
  71.         Dec(J);
  72.     end;
  73.     If (J = -1) then
  74.         AnythingElse := False;
  75.     If AnythingElse then
  76.     Begin
  77.         K := N - 1;
  78.         While (Arr[J] >= Arr[K]) Do
  79.         begin
  80.             Dec(K);
  81.         end;
  82.         Swap(Arr, J, K);
  83.         L := J + 1;
  84.         R := N - 1;
  85.         While (L < R) Do
  86.         Begin
  87.             Swap(Arr, L, R);
  88.             Inc(L);
  89.             Dec(R);
  90.         End;
  91.     End;
  92.     NextSet := AnythingElse;
  93. End;
  94.  
  95.  
  96.  
  97. procedure TForm1.Button1Click(Sender: TObject);
  98. Const
  99.     WIDE = 82;
  100.     HEIGHT = 35;
  101.     SCROLLBAR = 20;
  102. Var
  103.      I, J, Number, K : Integer;
  104.      Str, Element: String;
  105.      IsSmthWrong : Boolean;
  106. begin
  107.     If IsCorrect then
  108.     begin
  109.         IsSmthWrong := True;
  110.         SetLength(Arr, N);
  111.         StringGrid1.ColCount := N + 1;
  112.         StringGrid1.Width := WIDE * 6 +  + SCROLLBAR;
  113.         If N < 5 then
  114.         Begin
  115.             //StringGrid1.Height := HEIGHT;
  116.             StringGrid1.ScrollBars := ssVertical;
  117.             case N of
  118.                 1: StringGrid1.Width := WIDE * 2 + 1;
  119.                 2: StringGrid1.Width := WIDE * 3;
  120.                 3: StringGrid1.Width := WIDE * 4 - 10;
  121.                 4: StringGrid1.Width := WIDE * 5  + SCROLLBAR;
  122.             end;
  123.         End;
  124.         For I := 0 to StringGrid1.RowCount - 1 do
  125.             For J := 0 to StringGrid1.ColCount - 1 do
  126.                 StringGrid1.Cells[J, I] := '';
  127.  
  128.         Str := Trim(Edit2.Text);
  129.         Str := Str + ' ';
  130.         I := 1;
  131.         K := 0;
  132.         try
  133.             While (I <> (Length(Str) + 1)) and (IsSmthWrong) Do
  134.             Begin
  135.                 If (Str[I] <> ' ') then
  136.                     Element := Element + Str[I]
  137.                 else
  138.                 Begin
  139.                     Number := StrToInt(Element);
  140.                     try
  141.                         Arr[K] := Number;
  142.                     except
  143.                         IsSmthWrong := False;
  144.                     end;
  145.                     Inc(K);
  146.                     Element := '';
  147.                 End;
  148.                 Inc(I);
  149.                 If ((K) > N) then
  150.                 begin
  151.                     MessageBox(Form1.Handle, Pchar('Вы ввели больше ' + Edit1.Text + ' элементов.'), 'Ошибка', MB_ICONSTOP);
  152.                     IsSmthWrong := False;
  153.                     Edit2.Text := '';
  154.                     StringGrid1.Visible := False;
  155.                 end;
  156.             End;
  157.         except
  158.             Edit2.Text := '';
  159.             IsSmthWrong := False;
  160.             StringGrid1.Visible := False;
  161.             MessageBox(Form1.Handle, Pchar('Проверьте последовательность, там должны быть только положительные цифры.'), 'Ошибка', MB_ICONSTOP);
  162.         end;
  163.  
  164.         If ((K) < N) and IsSmthWrong then
  165.         begin
  166.             MessageBox(Form1.Handle, Pchar('Вы ввели меньше ' + Edit1.Text + ' элементов.'), 'Ошибка', MB_ICONSTOP);
  167.             IsSmthWrong := False;
  168.             Edit2.Text := '';
  169.             StringGrid1.Visible := False;
  170.         end;
  171.  
  172.         If IsSmthWrong then
  173.         Begin
  174.             For I := 0 To High(Arr) - 1 do
  175.                 For J :=  I + 1 To High(Arr)  do
  176.                     If (Arr[J] < Arr[I]) then
  177.                         Swap(Arr, J, I);
  178.  
  179.             StringGrid1.Cells[0, 0] := '1: ';
  180.             Result := Result + StringGrid1.Cells[0, 0];
  181.             For J := 1 To (N) Do
  182.             Begin
  183.                 StringGrid1.Cells[J, 0] := InttoStr(Arr[J - 1]);
  184.                 Result := Result + StringGrid1.Cells[J, 0] + ' ';
  185.             End;
  186.             Result := Result + #13#10;
  187.             StringGrid1.Visible := True;
  188.             I := 1;
  189.             While (NextSet(Arr, N)) Do
  190.             begin
  191.                 StringGrid1.RowCount := StringGrid1.RowCount + 1;
  192.                 //StringGrid1.Height := StringGrid1.Height + HEIGHT;
  193.                 StringGrid1.Cells[0, I] := IntToStr(I + 1) + ': ';
  194.                 Result := Result + StringGrid1.Cells[0, I];
  195.                 For J := 1 To (N) Do
  196.                 Begin
  197.                     StringGrid1.Cells[J, I] := InttoStr(Arr[J - 1]);
  198.                     Result := Result + StringGrid1.Cells[J, I] + ' ';
  199.                 End;
  200.                 StringGrid1.Cells[0, I] := IntToStr(I + 1) + ':';
  201.                 Inc(I);
  202.                 Result := Result + #13#10;
  203.             end;
  204.             StringGrid1.Visible := True;
  205.             N3.Enabled := True;
  206.         End;
  207.     end;
  208. end;
  209.  
  210. procedure TForm1.Edit1Change(Sender: TObject);
  211. begin
  212.     IsCorrect := True;
  213.     StringGrid1.Visible := False;
  214.     N3.Enabled := False;
  215.     StringGrid1.RowCount := 1;
  216.     try
  217.         N := StrToInt(Edit1.Text);
  218.     except
  219.         IsCorrect := False;
  220.     end;
  221.     If (Edit1.Text <> '') and (Edit2.Text <> '') then
  222.         Button1.Enabled := True
  223.     else
  224.         Button1.Enabled := False;
  225. end;
  226.  
  227.  
  228. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  229. begin
  230.     If (Key = #13) and (Button1.Enabled) then
  231.         Button1.Click;
  232.     If (Not(Key In ['2'..'5', #08, #46])) Then
  233.         Key := #0;
  234. end;
  235.  
  236. procedure TForm1.Edit2Change(Sender: TObject);
  237. begin
  238.     If (Edit1.Text <> '') and (Edit2.Text <> '') then
  239.         Button1.Enabled := True
  240.     else
  241.         Button1.Enabled := False;
  242.     StringGrid1.RowCount := 1;
  243.     N3.Enabled := False;
  244. end;
  245.  
  246. procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
  247. begin
  248.     If (Key = #13) and (Button1.Enabled) then
  249.         Button1.Click;
  250.     If (Not(Key In ['0'..'9', #08, #46, #32])) Then
  251.         Key := #0;
  252. end;
  253.  
  254. procedure TForm1.N5Click(Sender: TObject);
  255. begin
  256.     Application.MessageBox('Арефин Владислав гр.251004', 'Разрабочик', 0);
  257. end;
  258.  
  259.  
  260.  
  261.  
  262. Function CheckFileData(Num: String): Boolean;
  263. Const
  264.     MAX_LIM = 5;
  265.     MIN_LIM = 2;
  266. Var
  267.     NewNum: Integer;
  268.     IsCorrect: Boolean;
  269. Begin
  270.     NewNum := 0;
  271.     IsCorrect := True;
  272.     Try
  273.         NewNum := StrToInt(Num);
  274.     Except
  275.         MessageBox(Form1.Handle, Pchar('Проверьте корректность данных.'), 'Ошибка', MB_ICONSTOP);
  276.         IsCorrect := False;
  277.     End;
  278.     If(IsCorrect And ((NewNum > MAX_LIM) Or (NewNum < MIN_LIM))) Then
  279.     Begin
  280.         Num := IntToStr(NewNum);
  281.         MessageBox(Form1.Handle, Pchar('Недопустимое значение!'), 'Ошибка', MB_ICONSTOP);
  282.         IsCorrect := False;
  283.     End;
  284.     CheckFileData := IsCorrect;
  285. End;
  286.  
  287. Function Open (): String;
  288. Begin
  289.     With Form1 Do
  290.     Begin
  291.         If OpenDialog1.Execute Then
  292.         Begin
  293.             Path := OpenDialog1.FileName;
  294.             IsFileOpen := True;
  295.         End
  296.         Else
  297.             IsFileOpen := False;
  298.     End;
  299.     Open := Path;
  300. End;
  301.  
  302. Function TakeDataFromFile( Var FileOutput: TextFile): String;
  303. Var
  304.     IsRight : Boolean;
  305.     Str : String;
  306. Begin
  307.     IsRight := True;
  308.     Try
  309.         Readln(FileOutput, Str);
  310.         IsRight := CheckFileData(Str);
  311.     Except
  312.     End;
  313.     If(Not(IsRight)) Then
  314.         TakeDataFromFile := ''
  315.     Else
  316.         TakeDataFromFile := Str;
  317. End;
  318.  
  319. Function Take2FromFile(Var FileOutput: TextFile): String;
  320. Var
  321.     IsRight : Boolean;
  322.     Str : String;
  323. Begin
  324.     IsRight := True;
  325.     Try
  326.         Readln(FileOutput, Str);
  327.     Except
  328.         IsRight := False;
  329.     End;
  330.      If(Not(IsRight)) Then
  331.         Take2FromFile := ''
  332.     Else
  333.         Take2FromFile := Str;
  334.  
  335. End;
  336.  
  337.  
  338.  
  339. procedure TForm1.N2Click(Sender: TObject);
  340. Var
  341.     FileInput: TextFile;
  342.     Num : Integer;
  343.     Str1, Str2: String;
  344. begin
  345.     Num := 0;
  346.     Path := Open;
  347.     AssignFile(FileInput, Path);
  348.     Reset(FileInput);
  349.     If(IsFileOpen) Then
  350.     Begin
  351.         Str1 := TakeDataFromFile(FileInput);
  352.         Str2 := Take2FromFile(FileInput);
  353.     End;
  354.     if (Length(Str1) > 0) then
  355.     Begin
  356.         Edit1.Text := Str1;
  357.     End
  358.     Else
  359.         Edit1.Text := #0;
  360.     if (Length(Str2) > 0) and ((Length(Str1) > 0))then
  361.     Begin
  362.         Edit2.Text := Str2;
  363.     End
  364.     Else
  365.         Edit2.Text := #0;
  366.     CloseFile(FileInput);
  367. end;
  368.  
  369.  
  370. procedure TForm1.N3Click(Sender: TObject);
  371. Var
  372.     FileOutput: TextFile;
  373. begin
  374.     Path := Open;
  375.     If (IsFileOpen) Then
  376.     Begin
  377.         AssignFile(FileOutput, Path);
  378.         Rewrite(FileOutput);
  379.         Write(FileOutput, Result);
  380.         Application.MessageBox('Запись файла выполнена успешно.', 'Результат', 0);
  381.         CloseFile(FileOutput);
  382.     End;
  383. end;
  384.  
  385.  
  386.  
  387.  
  388.  
  389. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement