unit ListMaxSuccess2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; RadioGroup1: TRadioGroup; CheckBox1: TCheckBox; Label5: TLabel; Button1: TButton; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; A: file of Integer; res: integer; W: integer; //общее количество проигранных монет F: file of integer; implementation procedure PMaxSuccess10; const V = 2000000000; //максимальная продолжительность игры var P: integer; //начальное количество монет N: boolean; //цифра, выбранная игроком K: integer; //количество сделанных ходов Z: integer; //количество монет у игрока R: boolean; //случайная цифра, загаданная компьютером Max: integer; //номер хода для максимального выигрыша S: integer; //максимальный выигрыш begin P:=0; case Form1.RadioGroup1.ItemIndex of 0: P:=10; 1: P:=20; 2: P:=30; 3: P:=40; 4: P:=50; 5: P:=100; end; if StrToInt(Form1.Edit1.Text)= 1 then N := true else N := false; K := 0; max := 0; Z := P; S := P; W := 0; AssignFile(F,'Success'); AssignFile(A, 'AllSuccess'); {$I-} Reset(A); {$I+} res:=IOResult; if res<>0 then begin Rewrite(A); Write(A,W); end; Read(A,W); CloseFile(A); if Form1.CheckBox1.State = cbChecked then Rewrite(F); while (Z > 0) and (K < V) do begin K := K+1; if Random(2) = 1 then R := true else R := false; if R = N then Z := Z + 1 else Z := Z - 1; if Z>S then begin S := Z; Max := K; end; if (Form1.CheckBox1.State = cbChecked) and (K<=10000000) then Write(F,Z); end; if Form1.CheckBox1.State = cbChecked then CloseFile(F); if Form1.CheckBox1.State = cbChecked then Form1.Button1.Enabled := True else Form1.Button1.Enabled := False; if K < V then Form1.Label2.Caption := 'Вы проиграли все свои '+ IntToStr(P)+ ' монет' + #13 + 'Число сделанных ходов равно: ' + IntToStr(K) else Form1.Label2.Caption := 'Удивительно! Вы не проиграли свои '+ IntToStr(P)+ ' монет до конца игры!'+#13+ 'Число сделанных ходов равно: ' + IntToStr(K) +#13+ 'Число ваших монет в конце игры: '+ IntToStr(Z); if Max >0 then Form1.Label3.Caption := 'У вас было максимальное количество монет: ' + IntToStr(S)+' ,'+ #13+ 'когда число сделанных ходов было равно: ' + IntToStr(Max)+#13+ #13+ 'Именно тогда вам надо было окончить игру!' + #13 + 'Именно тогда вы могли получить максимальный выигрыш: ' +IntToStr(S-P) + #13 + #13 + 'Ваш максимальный выигрыш в этой игре: ' + IntToStr(S-P) + #13 + 'Ваше первоначальное количество монет возросло бы при этом в '+ FloatToStr(S/P) + ' раз' else Form1.Label3.Caption := 'Вы имели ' + IntToStr(P) + ' монет, ' + #13 + 'когда число сделанных ходов было равно: ' + IntToStr(Max) + #13 + 'Вы имели полную неудачу в этой игре.'+ #13 + 'Лучше было вообще не начинать эту игру, ' + 'не делать ни одного хода.'+ #13 + #13 + 'Ваш максимальный выигрыш в этой игре равен: '+ IntToStr(S-P); if K < V then W := W + P else W := W + P - Z; if W >= 0 then Form1.Label5.Caption:='Вы проиграли всего: '+IntToStr(W) else Form1.Label5.Caption:='Ваш выигрыш: '+IntToStr(-W); Rewrite(A); Write(A,W); CloseFile(A); Form1.Edit1.Text:=''; Form1.Edit1.SetFocus; end; {$R *.dfm} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin // Key - символ, соответствующий нажатой клавише. // Если символ недопустимый, то процедура заменяет его // на символ с кодом 0. В результате этого символ в поле // редактирования не появляется и у пользователя создается // впечатление, что программа не реагирует на нажатие некоторых // клавиш. if length(Form1.Edit1.Text)>0 then case Key of #8 : ; // #13: PMaxSuccess10; // остальные символы - запрещены else Key :=Chr(0); // символ не отображать end else case Key of '0','1', #8 : begin Label2.Caption := ''; Label3.Caption := ''; Edit1.SetFocus; end; // остальные символы - запрещены else Key :=Chr(0); // символ не отображать end; end; procedure TForm1.FormActivate(Sender: TObject); begin AssignFile(A, 'AllSuccess'); {$I-} Reset(A); {$I+} res:=IOResult; if res<>0 then begin Rewrite(A); Write(A,W); end; Read(A,W); if W >= 0 then Form1.Label5.Caption:='Вы проиграли всего: '+IntToStr(W) else Form1.Label5.Caption:='Ваш выигрыш: '+IntToStr(-W); CloseFile(A); end; procedure TForm1.Button1Click(Sender: TObject); var G: TextFile; Z: integer; K: integer; begin AssignFile(G, 'Atheist.txt'); Rewrite(G); Reset(F); K:=0; Writeln(G, Label2.Caption); Writeln(G, Label3.Caption); Label2.Caption:=''; Label3.Caption:=''; While not EOF(F) do begin K:=K+1; Read(F,Z); Writeln(G, 'K='+IntToStr(K)+' Z='+IntToStr(Z)); end; Writeln(G, Label2.Caption); Writeln(G, Label3.Caption); Label2.Caption:='Ход игры записан в файл Atheist.txt'; Button1.Enabled:=False; Edit1.SetFocus; CloseFile(F); CloseFile(G); end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin Edit1.SetFocus; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin Edit1.SetFocus; end; begin Randomize(); end.