Помогите пожалуйста решить задачу : Вводятся 6 чисел, не превышающих 49. Программа также генерирует 6 различных чисел от 1 до 49 и сообщает, сколько из них пользователь угадал.
В чем затруднение?Для генерации используй randomize; random(49);
Вводить числа я так понимаю лучше в ListBox?
если я правильно понимаю то код генериции 6 различных чисел :
const N=6; M=49;
var M:set of 1..M;
A:byte;
begin
Randomize;
M:=[];
for i:=1 to N do
begin
repeat
A:=Random(M)+1
until not(A in M);
M:=M+[A]
end;
end;
help me please!
А обязательно нужно работать с формой?Командная строка нельзя?
procedure TForm1.ButtonClick(Sender: TObject);
const N=6; M=49;
var
userSet, setM: set of 1 .. M;
A, i: byte;
begin
Randomize;
setM:=[];
for i:=1 to N do begin
repeat
A:=Random(M)+1
until not(A in setM);
setM := setM+[A];
end;
// Мемо должен быть заполнен перед нажатием кнопки,
// причем все числа должны быть проверены на корректность
// Здесь проверяется только равенство "выигрышной комбинации"
userSet := [];
for i := 0 to Memo2.Lines.Count - 1 do
Include(userSet, StrToInt(Memo2.Lines[i]));
if userset = setm then ShowMessage('Yes !!!')
else ShowMessage('No');
end;
...и сообщает, сколько из них пользователь угадал.
это можно определить через Memo а то я с этой компонентой никогда не работал?
Тогда вот так:
procedure TForm1.Button1Click(Sender: TObject);
const N=6; M=49;
var
setM: set of 1 .. M;
A, i: byte;
amount: integer;
begin
Randomize;
setM:=[];
for i:=1 to N do begin
repeat
A:=Random(M)+1
until not(A in setM);
setM := setM+[A];
end;
amount := 0;
for i := 0 to Memo1.Lines.Count - 1 do
if StrToInt(Memo1.Lines[i]) in setM then inc(amount);
Showmessage(inttostr(amount) + ' совпадений ... ');
end;
Благодарю за помощь!