Логическая игра.
Напишем не совсем то что обещал, но все же игру логическо-математического типа если можно так сказать. Наша программа будет угадывать загаданное вами число.
первое число указывает на кол-во попыток угадывания через тире указано число предложенное программой. Здесь применен новый компонент listbox1 находится рядом с радиокнопкой.
вот код:
implementation
{$R *.dfm}
const size=100000;
procedure TForm1.CheckBox1Click(Sender: TObject);
var i,sred,niz,verh,n,obr:integer; found:boolean;
a:array[1..size] of integer;
begin
for i:=1 to size do
a[i]:=i;
n:=0;
verh:=1;
niz:=size;
found:=false;
repeat
sred:=trunc((niz-verh)/2)+verh;
i:=a[sred];
inc(n);
if MessageDlg('Это число'+' '+inttostr(i)+'?',mtConfirmation, [mbYes,mbNo],0)=mryes then
found:=true
else
if MessageDlg('Это число меньше'+' '+inttostr(i)+'?',mtConfirmation, [mbYes,mbNo],0)=mryes then
niz:=sred-1
else verh:=sred+1;
listbox1.Items.Add(inttostr(n)+'-'+inttostr(i));
until(verh>niz) or found;
MessageDlg('Ура!!! Ваше число '+' '+inttostr(i) ,mtInformation,[mbok],0);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
label1.Caption:='Загадайте любое число от 1'+ ' '+'до'+ ' '+inttostr(size);
end;
end.
Вот код для консольного приложения:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
windows,
classes;
const size=100000;
var i,sred,niz,verh,n,obr:integer; found:boolean;
a:array[1..size] of integer;
s : string; rez : TstringList;
begin
rez:=TstringList.Create;
writeln('Make a number from 1 '+ ' '+'to'+ ' '+inttostr(size));
writeln('Enter Y if ready');
readln(s);
if (s='Y') or (s='y') then
for i:=1 to size do
a[i]:=i;
n:=0;
verh:=1;
niz:=size;
found:=false;
repeat
sred:=trunc((niz-verh)/2)+verh;
i:=a[sred];
inc(n);
writeln('Your number'+' '+inttostr(i)+'?'+ ' '+ 'Yes/No');
readln(s);
if (s='Y') or (s='y') then found:=true
else
writeln('This number is smaller'+' '+inttostr(i)+'?'+ ' '+ 'Yes/No');
readln(s);
if (s='Y') or (s='y') then niz:=sred-1
else verh:=sred+1;
rez.Add(inttostr(n)+'-'+inttostr(i));
until(verh>niz) or found;
writeln('Found your number '+' '+inttostr(i));
// выводим таблицу угадывания
for i:=0 to rez.Count-1 do
writeln(rez[i]);
rez.Free;
sleep(5000);
end.
В следующем уроке опишу подробности и разбор игры.
Комментариев нет:
Отправить комментарий