15 апреля 2012 г.

Логическая игра.


Логическая игра.

Напишем не совсем то что обещал, но все же игру логическо-математического типа если можно так сказать. Наша программа будет угадывать загаданное вами число.






первое число указывает на кол-во попыток угадывания через тире указано число предложенное программой. Здесь применен новый компонент 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.



В следующем уроке опишу подробности и разбор игры.

Комментариев нет:

Отправить комментарий