Advertisement
Vladislav8653

gta с русской музыкой

Feb 25th, 2023
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 15.06 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.     StringGrid1: TStringGrid;
  12.     Edit1: TEdit;
  13.     Edit2: TEdit;
  14.     Label1: TLabel;
  15.     Label2: TLabel;
  16.     Label3: TLabel;
  17.     Button1: TButton;
  18.     MainMenu1: TMainMenu;
  19.     PopupMenu1: TPopupMenu;
  20.     OpenDialog1: TOpenDialog;
  21.     SaveDialog1: TSaveDialog;
  22.     N1: TMenuItem;
  23.     N2: TMenuItem;
  24.     N3: TMenuItem;
  25.     N4: TMenuItem;
  26.     N5: TMenuItem;
  27.     procedure Button1Click(Sender: TObject);
  28.     procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
  29.     procedure Edit2Change(Sender: TObject);
  30.     procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  31.     procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  32.     procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  33.       const Value: string);
  34.     procedure Edit1Change(Sender: TObject);
  35.     procedure N4Click(Sender: TObject);
  36.     procedure N5Click(Sender: TObject);
  37.     procedure N2Click(Sender: TObject);
  38.     procedure N3Click(Sender: TObject);
  39.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  40.   private
  41.     { Private declarations }
  42.   public
  43.     { Public declarations }
  44.   end;
  45.  
  46.  
  47. var
  48.   Form1: TForm1;
  49.   Path, Result : String;
  50.   IsFileOpen, Flag, FlagButton : Boolean;
  51. Const
  52.     BAD = 100000;
  53.  
  54. implementation
  55.  
  56. {$R *.dfm}
  57.  
  58.  
  59. procedure TForm1.Button1Click(Sender: TObject);
  60. var
  61.     X, N, B, I, Sum : Integer;
  62.     Arr : Array of Integer;
  63. begin
  64.     Try
  65.         X := StrToInt(Edit1.Text);
  66.     Except
  67.         Application.MessageBox('Проверьте исходные данные.', 'Ошибка', MB_ICONSTOP);
  68.         Edit1.Text := '';
  69.     End;
  70.     Try
  71.         N := StrToInt(Edit2.Text);
  72.     Except
  73.         Application.MessageBox('Проверьте исходные данные.', 'Ошибка', MB_ICONSTOP);
  74.         Edit2.Text := '';
  75.     End;
  76.     SetLength(Arr, N);
  77.     Sum := 0;
  78.     For I := Low(Arr) to High(Arr) do
  79.     Begin
  80.         If Length(StringGrid1.Cells[I, 0]) <> 0 then
  81.             Arr[I]:= StrToInt(StringGrid1.Cells[I,0])
  82.         else
  83.             Arr[I] := 0;
  84.     End;
  85.     B := Arr[N - 1];
  86.     For I := (N - 2) Downto 0 Do
  87.     Begin
  88.         B := Arr[I] + (B * X);
  89.     End;
  90.     Label3.Visible := true;
  91.     Label3.Caption := 'Ответ: ' + IntToStr(B);
  92.     Result := Label3.Caption;
  93.     N3.Enabled := true;
  94. end;
  95.  
  96.  
  97.  
  98. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  99. begin
  100.     If ((Key = #13) And (Button1.Enabled)) Then
  101.         Button1.Click;
  102.     If (Not(Key In ['0'..'9', #08, #46, '-'])) Then
  103.         Key := #0;
  104.     If (Length(Edit1.Text) = 0) then
  105.         If (Not(Key In ['1'..'9', #08, #46, '-'])) Then
  106.             Key := #0;
  107.     If (Length(Edit1.Text) <> 0) and (Key = '-')then
  108.         Key := #0;
  109.     If Key = '.' then
  110.         Key := #0;
  111. end;
  112.  
  113. procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  114.   const Value: string);
  115. Var
  116.     I, J : Integer;
  117. begin
  118.     N3.Enabled := False;
  119.     Label3.Visible := False;
  120.     FlagButton := true;
  121.     for I := 0 to StringGrid1.RowCount - 1 do
  122.         for J := 0 to StringGrid1.ColCount - 1 do
  123.             If Length(StringGrid1.Cells[J, I]) = 0 Then
  124.                 FlagButton := false;
  125.     If not(flag)then
  126.         Button1.Enabled := False;
  127.     If (Length(Edit1.Text) <> 0) and (Length(Edit2.Text) <> 0) and (FlagButton = true) then
  128.         Button1.Enabled := True;
  129. end;
  130.  
  131.  
  132. procedure TForm1.Edit1Change(Sender: TObject);
  133. begin
  134.     N3.Enabled := False;
  135.     If (Length(Edit1.Text) = 0)then
  136.         Button1.Enabled := False;
  137.     If (Length(Edit1.Text) <> 0) and (Length(Edit2.Text) <> 0) and (FlagButton = true) then
  138.         Button1.Enabled := True;
  139.     Label3.Visible := False;
  140.  
  141. end;
  142.  
  143. procedure TForm1.Edit2Change(Sender: TObject);
  144. var
  145.     N, I, J: Integer;
  146. const
  147.     MAX = 3;
  148.     STEP = 81;
  149.     THREE_CELLS = 246;
  150.     HEIGHT = 57;
  151.     STEP_H = 35;
  152.     LEFT = 10;  
  153.     STEP_L2 = 45;
  154.     STEP_L1 = 83;
  155. begin
  156.     if Edit2.Text <> '' then
  157.     Begin
  158.         N := StrToInt(Edit2.Text);
  159.         StringGrid1.ColCount := N;
  160.         StringGrid1.Width := THREE_CELLS;
  161.         StringGrid1.Height := HEIGHT;
  162.         StringGrid1.Left := LEFT;
  163.         if N = 3 then
  164.             StringGrid1.Height := STEP_H;
  165.         if N = 2 then
  166.         Begin
  167.             StringGrid1.Width := THREE_CELLS - STEP;
  168.             StringGrid1.Height := STEP_H;
  169.             StringGrid1.Left := LEFT + STEP_L2;
  170.         End;
  171.         if N = 1 then
  172.         Begin //нахуя я это делал, это не надо было. N никогда не равно 1..
  173.             StringGrid1.Width := THREE_CELLS - STEP - STEP;
  174.             StringGrid1.Height := STEP_H;
  175.             StringGrid1.Left := LEFT + STEP_L1;
  176.         End;
  177.         StringGrid1.Visible := True;
  178.     End
  179.     Else
  180.         StringGrid1.Visible := False;
  181.     N3.Enabled := False;
  182.     If (Length(Edit2.Text) = 0)then
  183.         Button1.Enabled := False;
  184.     If (Length(Edit2.Text) <> 0) and (Length(Edit2.Text) <> 0) and (FlagButton = true) then
  185.         Button1.Enabled := True;
  186.     Label3.Visible := False;
  187.     for I := 0 to StringGrid1.RowCount - 1 do
  188.         for J := 0 to StringGrid1.ColCount - 1 do
  189.             StringGrid1.Cells[J, I] := '';
  190. end;
  191.  
  192. procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
  193. begin
  194.     If ((Key = #13) And (Button1.Enabled)) Then
  195.         Button1.Click;
  196.     If (Not(Key In ['0'..'9', #08, #46])) Then
  197.         Key := #0;
  198.     if (Length(Edit2.Text) = 0) then
  199.         If (Not(Key In ['2'..'9', #08, #46])) Then
  200.             Key := #0;
  201.     If Key = '.' then
  202.         Key := #0;
  203. end;
  204.  
  205. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  206. begin
  207.     CanClose := MessageBox(Form1.Handle, 'Вы уверены, что хотите выйти?', 'Выход', MB_YESNO + MB_ICONQUESTION)=ID_YES;
  208. end;
  209.  
  210. procedure TForm1.N4Click(Sender: TObject);
  211. begin
  212.      Application.MessageBox('Программа вычисляет многочлен А1*x + А2*x^2 + А3*x^3 + ... + АN*x^N.'#13#10'Диапазон X: -9999...99999'#13#10'Диапазон N: 2...99999'#13#10'Диапазон элементов массива: -9999...99999'#13#10'Внимание! Все вводимые числа целого типа.', 'Инструкция', 0);
  213. end;
  214.  
  215. procedure TForm1.N5Click(Sender: TObject);
  216. begin
  217.     Application.MessageBox('Арефин Владислав гр.251004', 'Разрабочик', 0);
  218. end;
  219.  
  220.  
  221. procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
  222. const   // тут я сделал ввод онли integer цифр, тк мне впадлу делать real
  223.     MAX = 4;
  224. begin
  225.     If (Not(Key In ['0'..'9', #08, #46,',','-'])) Then
  226.         Key := #0;
  227.     With Sender As TStringGrid Do
  228.     Begin
  229.         If (Length(StringGrid1.Cells[Col, Row]) <> 0) and (Key = '-') then
  230.             Key := Char(0);
  231.         If (Length(StringGrid1.Cells[Col, Row]) > MAX) then
  232.             If (Not(Key In [#08, #46])) Then
  233.                 Key := #0;
  234.         If (Length(StringGrid1.Cells[Col, Row]) = 0) and (Key = '0') then
  235.             Key := Char(0);
  236.         If Key = '.' then
  237.             Key := #0;
  238.     End;
  239. end;
  240.  
  241.  
  242.  
  243.  
  244. Function CheckFileDataForXandArr(Num: String): Boolean;
  245. Const
  246.     MAX_LIM = 99999;
  247.     MIN_LIM = -9999;
  248. Var
  249.     NewNum: Integer;
  250.     IsCorrect: Boolean;
  251. Begin
  252.     NewNum := 0;
  253.     IsCorrect := True;
  254.     Num := Trim (Num);
  255.     Try
  256.         NewNum := StrToInt(Num);
  257.     Except
  258.         MessageBox(Form1.Handle, Pchar('Не получилось преобразовать X к целочисленному типу данных. Проверьте корректность данных.'), 'Ошибка', MB_ICONSTOP);
  259.         IsCorrect := False;
  260.     End;
  261.     If(IsCorrect And ((NewNum > MAX_LIM) Or (NewNum < MIN_LIM))) Then
  262.     Begin
  263.         Num := IntToStr(NewNum);
  264.         MessageBox(Form1.Handle, Pchar('X вне разрешенного диапазона! Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  265.         IsCorrect := False;
  266.     End;
  267.     CheckFileDataForXAndArr := IsCorrect;
  268. End;
  269.  
  270. Function CheckFileDataForN(Num: String): Boolean;
  271. Const
  272.     MAX_LIM = 99999;
  273.     MIN_LIM = 2;
  274. Var
  275.     NewNum: Integer;
  276.     IsCorrect: Boolean;
  277. Begin
  278.     NewNum := 0;
  279.     IsCorrect := True;
  280.     Num := Trim (Num);
  281.     Try
  282.         NewNum := StrToInt(Num);
  283.     Except
  284.         MessageBox(Form1.Handle, Pchar('Не получилось преобразовать N к целочисленному типу данных. Проверьте корректность данных.'), 'Ошибка', MB_ICONSTOP);
  285.         IsCorrect := False;
  286.     End;
  287.     If(IsCorrect And ((NewNum > MAX_LIM) Or (NewNum < MIN_LIM))) Then
  288.     Begin
  289.         Num := IntToStr(NewNum);
  290.         MessageBox(Form1.Handle, Pchar('N вне разрешенного диапазона! Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  291.         IsCorrect := False;
  292.     End;
  293.     CheckFileDataForN := IsCorrect;
  294. End;
  295.  
  296.  
  297. Function Open (): String;
  298. Begin
  299.     With Form1 Do
  300.     Begin
  301.         If OpenDialog1.Execute Then
  302.         Begin
  303.             Path := OpenDialog1.FileName;
  304.             IsFileOpen := True;
  305.         End
  306.         Else
  307.             IsFileOpen := False;
  308.     End;
  309.     Open := Path;
  310. End;
  311.  
  312. Function TakeDataFromFile1(Number1: String; Var FileOutput: TextFile): String;
  313. Var            // x
  314.     IsRight: Boolean;
  315. Begin
  316.     IsRight := True;
  317.     Try
  318.         Readln(FileOutput, Number1);
  319.         Number1 := Trim (Number1);
  320.         IsRight := CheckFileDataForXAndArr(Number1);
  321.     Except
  322.     End;
  323.     If(Not(IsRight)) Then
  324.         TakeDataFromFile1 := ''
  325.     Else
  326.         TakeDataFromFile1 := Number1;
  327. End;
  328.  
  329. Function TakeDataFromFile2(Number2: String; Var FileOutput: TextFile): String;
  330. Var               //N
  331.     IsRight : Boolean;
  332. Begin
  333.     IsRight := True;
  334.     Try
  335.         Readln(FileOutput, Number2);
  336.         Number2 := Trim (Number2);
  337.         IsRight := CheckFileDataForN(Number2);
  338.     Except
  339.     End;
  340.     If(Not(IsRight)) Then
  341.         TakeDataFromFile2 := ''
  342.     Else
  343.         TakeDataFromFile2 := Number2;
  344. End;
  345.  
  346. type
  347.     TArray = Array of Integer;
  348.     TStr = Array of String[5];
  349.  
  350. function SeparateString (Str : String) : TStr;
  351. Var
  352.     StrArr : TStr;
  353.     I, K : Integer;
  354.     Flag : Boolean;
  355. Begin
  356.     K := 0;
  357.     SetLength(StrArr, (Str.Length div 2) + 1);
  358.     For I := 0 To Str.Length div 2 do
  359.         StrArr[i] := '';
  360.     I := 1;
  361.     While I <= Str.Length Do
  362.     begin
  363.         Flag := true;
  364.         While (Str[I] <> ' ') and (I <= Str.Length) Do
  365.         Begin
  366.             StrArr[K] := StrArr[K] + Str[I];
  367.             Inc(I);
  368.             Flag := False;
  369.         End;
  370.         If Not(Flag) then
  371.             Inc(K);
  372.         If Flag then
  373.             Inc(I);
  374.     end;
  375.     I := 1;
  376.     K := 0;
  377.     While Str[I] <> '' Do
  378.     Begin
  379.         If Str[I] = ' ' then
  380.             Inc(K);
  381.         Inc(I);
  382.     End;
  383.     SetLength(StrArr, K + 1);
  384.     Result := StrArr;
  385. End;
  386.  
  387.  
  388. function ConvertStringToArray (StringGridColCount : Integer; Var FileOutput: TextFile) : TArray;
  389. Var
  390.     I: Integer;
  391.     Arr : TArray;
  392.     Str : String;
  393.     StrArr : TStr;
  394. Const
  395.     MIN = -9999;
  396.     MAX = 99999;
  397. Begin
  398.     Readln(FileOutput, Str);
  399.     SetLength(Arr, StringGridColCount);
  400.     for I := Low(Arr) to High(Arr) do
  401.         Arr[I] := 0;
  402.     Str := Trim(Str);
  403.     StrArr := SeparateString (Str);
  404.     If (High(StrArr) + 1 <> StringGridColCount) then
  405.     begin
  406.         SetLength (Arr, 1);
  407.         Arr[0] := BAD;
  408.         MessageBox(Form1.Handle, Pchar('Количество элементов массива не совпадает с заявленным. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  409.         ConvertStringToArray := Arr;
  410.         Exit
  411.     end;
  412.     try
  413.         For I := Low(Arr) to High(Arr) do
  414.             Arr[I] := StrToInt (StrArr[I]);
  415.     except
  416.         SetLength (Arr, 1);
  417.         Arr[0] := BAD;
  418.         MessageBox(Form1.Handle, Pchar('Не удалось преобразовать исходные данные в целочисленный тип. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  419.         ConvertStringToArray := Arr;
  420.         Exit
  421.     end;
  422.     For I := Low(Arr) to High(Arr) do
  423.         If (Arr[I] > MAX) or (Arr[I] < MIN) then
  424.         begin
  425.             SetLength (Arr, 1);
  426.             Arr[0] := BAD;
  427.             MessageBox(Form1.Handle, Pchar('Исходные данные выходят за границы допустимых. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  428.             ConvertStringToArray := Arr;
  429.         end;
  430.     ConvertStringToArray := Arr;
  431. End;
  432.  
  433.  
  434.  
  435.  
  436.  
  437. procedure TForm1.N2Click(Sender: TObject);
  438. Var
  439.     FileInput: TextFile;
  440.     Num, I: Integer;
  441.     Str1, Str2 : String;
  442.     Arr : TArray;
  443. begin
  444.     Num := 0;
  445.     Path := Open;
  446.     AssignFile(FileInput, Path);
  447.     Reset(FileInput);
  448.     If(IsFileOpen) Then
  449.     Begin
  450.         Str1 := TakeDataFromFile1(IntToStr(Num), FileInput);
  451.         if Str1 <> '' then
  452.             Str2 := TakeDataFromFile2(IntToStr(Num), FileInput);
  453.     End;
  454.     if Not((Str1 = '') or (Str2 = '')) then
  455.     Begin
  456.         Edit1.Text := Str1;
  457.         Edit2.Text := Str2;
  458.     End
  459.     Else
  460.     Begin
  461.         Edit1.Text := #0;
  462.         Edit2.Text := #0;
  463.     End;
  464.     if (Str1 <> '') and (Str2 <> '') then
  465.         Begin
  466.             Arr := ConvertStringToArray(StrToInt(Str2), FileInput);
  467.             if (Arr[0] <> BAD) then
  468.             Begin
  469.                 for I := Low(Arr) to High(Arr) do
  470.                 Begin
  471.                     StringGrid1.Cells[I, 0] := IntToStr(Arr[I]);
  472.                     Button1.Enabled := true;
  473.                 End;
  474.             End
  475.             else
  476.             Begin
  477.                 for I := Low(Arr) to StrToInt(Str2) - 1 do
  478.                 Begin
  479.                     StringGrid1.Cells[I, 0] := '';
  480.                 End;
  481.                  Edit1.Text := '';
  482.                  Edit2.Text := '';
  483.             End;
  484.  
  485.         End;
  486.     CloseFile(FileInput);
  487. end;
  488.  
  489. procedure TForm1.N3Click(Sender: TObject);
  490. Var
  491.     FileOutput: TextFile;
  492.     IsCorrect : Boolean;
  493. begin
  494.     IsCorrect := True;
  495.     Path := Open;
  496.     If (IsFileOpen) Then
  497.     Begin
  498.         try
  499.             AssignFile(FileOutput, Path);
  500.             Rewrite(FileOutput);
  501.             Write(FileOutput, Result);
  502.         except
  503.             IsCorrect := False;
  504.             Application.MessageBox('Запись в файл не удалась.', 'Ошибка', MB_ICONSTOP);
  505.         end;
  506.         if IsCorrect then
  507.         Begin
  508.             Application.MessageBox('Запись файла выполнена успешно.', 'Результат', 0);
  509.             CloseFile(FileOutput);
  510.             Label2.Caption := '';
  511.             Edit1.Text := '';
  512.             Edit2.Text := '';
  513.         End;
  514.     End;
  515. end;
  516.  
  517.  
  518.  
  519.  
  520.  
  521. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement