unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,math, StdCtrls;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    function Pohoge(e:real):real;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form3: TForm3;
  i,ab,bc,ac,vidp,curl,mark,lpr:integer;
  bigest,lang,s1:string;
  cosmas:array[0..90]of extended;
  vincos:extended;
  vals,mm:array[0..2]of integer;
  f1:textfile;
implementation

{$R *.dfm}

function TForm3.Pohoge(e:real):real;
var
epsilon:real;
iv:integer;
begin
epsilon:=abs(abs(e)-cosmas[0]);
result:=0;
for iv:=1 to 90 do
begin
if epsilon>abs(abs(e)-cosmas[iv]) then
begin
result:=iv;
epsilon:=abs(abs(e)-cosmas[iv]);
end;
end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
curl:=0;
randomize;
{mm[0]:=0;
mm[1]:=0;
mm[2]:=0;
mark:=0;
lpr:=random(29)+10;
lpr:=trunc(lpr/10);
lpr:=lpr-1;
mm[lpr]:=1;}
button4.Hide;
button3.Hide;
label1.Caption:='';
label2.Hide;
edit1.Hide;
label3.Caption:='';

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
vidp:=200;
case curl{/lpr}+1 of
1:while (vidp>150)or(vidp<60) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if MaxIntValue(vals)=ab then bigest:='ab';
if MaxIntValue(vals)=bc then bigest:='bc';
if MaxIntValue(vals)=ac then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
2:while (vidp<20)or(vidp>60) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if MinIntValue(vals)=ab then bigest:='ab';
if MinIntValue(vals)=bc then bigest:='bc';
if MinIntValue(vals)=ac then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
3:while (vidp<60)or(vidp>80) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if ((minintvalue(vals)=bc)and(maxintvalue(vals)=ac))or
((minintvalue(vals)=ac)and(maxintvalue(vals)=bc)) then bigest:='ab';
if ((minintvalue(vals)=ac)and(maxintvalue(vals)=ab))or
((minintvalue(vals)=ab)and(maxintvalue(vals)=ac)) then bigest:='bc';
if ((minintvalue(vals)=bc)and(maxintvalue(vals)=ab))or
((minintvalue(vals)=ab)and(maxintvalue(vals)=bc)) then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
end;
button3.Show;
label2.Show;
edit1.Show;
button2.Hide;
//if mm[lpr]=0 then
if lang='ua' then
case curl{/lpr}+1 of
1:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти найбільший кут.';
2:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти найменший кут.';
3:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти середній кут.';
end
else
if lang='en' then
case curl{/lpr}+1 of
1:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find largest angle.';
2:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find smallest angle.';
3:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find average angle.';
end
else
if lang='ru' then
case curl{/lpr}+1 of
1:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Найти наибольший угол.';
2:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти наименший угол.';
3:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти средний угол.';
end;

writeln(f1,label1.caption);
//edit1.Text:=inttostr(vidp);
end;

procedure TForm3.Button3Click(Sender: TObject);
var
uservidp:integer;
begin
curl:=curl+1;
button3.Hide;
button4.Show;
edit1.Enabled:=false;
button3.Hide;
uservidp:=0;
if edit1.Text<>'' then uservidp:=strtoint(edit1.Text);
writeln(f1,'vidp:',uservidp);
writeln(f1,'');
if (uservidp=vidp)or(uservidp=vidp-1)or(uservidp=vidp+1) then begin
if lang='ua' then
s1:='Вірно!'
else
if lang='en' then
s1:='True!'
else
if lang='ru' then
s1:='Верно!';
label3.Caption:=s1;
mark:=mark+4;
writeln(f1,'!!!OK!!!');
writeln(f1,'');
end
else begin
if lang='ua' then
s1:='Помилка! Правильна відповідь: '
else
if lang='en' then
s1:='Error! Correct answer: '
else
if lang='ru' then
s1:='Ошибка! Правильный ответ: ';
label3.caption:=s1+inttostr(vidp);
writeln(f1,'!!!ERROR!!!');
writeln(f1,'');
end;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
{randomize;
while mm[lpr]=1 do
begin
lpr:=random(29)+10;
lpr:=trunc(lpr/10);
lpr:=lpr-1;
end;
mm[lpr]:=1;}
edit1.Text:='';
button4.Hide;
button3.Show;
edit1.Enabled:=true;
label3.Caption:='';
if curl=3 then begin
if mark=0 then mark:=1;
if lang='ua' then
s1:='Ваша оцінка :'
else
if lang='en' then
s1:='Your mark :'
else
if lang='ru' then
s1:='Ваша оценка :';
label3.Caption:=s1+inttostr(mark);
writeln(f1,'!!!'+label2.caption+'!!!');
button3.Hide;
edit1.Enabled:=false;
end
else
begin
vidp:=200;
//correct;
case curl{/lpr}+1 of
1:begin
while (vidp>150)or(vidp<60) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if MaxIntValue(vals)=ab then bigest:='ab';
if MaxIntValue(vals)=bc then bigest:='bc';
if MaxIntValue(vals)=ac then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
end;
2:begin
while (vidp<20)or(vidp>60) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if MinIntValue(vals)=ab then bigest:='ab';
if MinIntValue(vals)=bc then bigest:='bc';
if MinIntValue(vals)=ac then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
end;
3:begin
while (vidp>150)or(vidp<55) do begin
randomize;
ab:=random(100)+1;
bc:=random(100)+1;
ac:=random(100)+1;
vals[0]:=ab;
vals[1]:=bc;
vals[2]:=ac;
if ((minintvalue(vals)=bc)and(maxintvalue(vals)=ac))or
((minintvalue(vals)=ac)and(maxintvalue(vals)=bc)) then bigest:='ab';
if ((minintvalue(vals)=ac)and(maxintvalue(vals)=ab))or
((minintvalue(vals)=ab)and(maxintvalue(vals)=ac)) then bigest:='bc';
if ((minintvalue(vals)=bc)and(maxintvalue(vals)=ab))or
((minintvalue(vals)=ab)and(maxintvalue(vals)=bc)) then bigest:='ac';
for i:=0 to 90 do cosmas[i]:=trunc(cos(degtorad(i))*100)/100;
if bigest='ab' then vincos:=(ac*ac+bc*bc-ab*ab)/(2*ac*bc);
if bigest='bc' then vincos:=(ac*ac+ab*ab-bc*bc)/(2*ac*ab);
if bigest='ac' then vincos:=(ab*ab+bc*bc-ac*ac)/(2*ab*bc);
vidp:=trunc(pohoge(vincos));
if vincos<0 then vidp:=180-vidp;
end;
end;
end;
if lang='ua' then
case curl{/lpr}+1 of
1:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти найбільший кут.';
2:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти найменший кут.';
3:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Знайти середній кут.';
end
else
if lang='en' then
case curl{/lpr}+1 of
1:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find largest angle.';
2:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find smallest angle.';
3:label1.Caption:='Given: АВ='+inttostr(ab)+'сm, АС='+inttostr(ac)
+'сm, ВС='+inttostr(bc)+'сm. Find average angle.';
end
else
if lang='ru' then
case curl{/lpr}+1 of
1:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Найти наибольший угол.';
2:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Найти наименший угол.';
3:label1.Caption:='Дано: АВ='+inttostr(ab)+'см, АС='+inttostr(ac)
+'см, ВС='+inttostr(bc)+'см. Найти средний угол.';
end;
writeln(f1,label1.caption);
end;
end;

procedure TForm3.FormShow(Sender: TObject);
begin
if lang='ua' then
begin
button1.Caption:='Закрити';
button2.Caption:='Старт';
button3.Caption:='Перевірка';
button4.Caption:='Продовження';
end
else
if lang='en' then
begin
button1.Caption:='Close';
button2.Caption:='Start';
button3.Caption:='Check';
button4.Caption:='Next';
end
else
if lang='ru' then
begin
button1.Caption:='Закрить';
button2.Caption:='Старт';
button3.Caption:='Проверка';
button4.Caption:='Продолжить';
end;
if fileexists('statistic.txt')<>true then begin
assignfile(f1,'statistic.txt');
rewrite(f1);
end
else begin
assignfile(f1,'statistic.txt');
append(f1);
end;
writeln(f1,'Zadacha');
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
closefile(f1);
end;

end.
