Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Множества

Автор: status 17.05.2007 23:20

Помогите пожалуйста решить задачу : Вводятся 6 чисел, не превышающих 49. Программа также генерирует 6 различных чисел от 1 до 49 и сообщает, сколько из них пользователь угадал.

Автор: Артемий 18.05.2007 1:08

В чем затруднение?Для генерации используй randomize; random(49);

Автор: status 18.05.2007 2:09

Вводить числа я так понимаю лучше в 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;



Если да, то как эти числа сравнить с ведёнными и покозать результат? unsure.gif

Автор: status 19.05.2007 15:30

cray.gif

Автор: status 21.05.2007 20:48

help me please!

Автор: Артемий 21.05.2007 21:12

А обязательно нужно работать с формой?Командная строка нельзя?

Автор: volvo 21.05.2007 23:11

Цитата
Вводить числа я так понимаю лучше в ListBox?
Зачем же ListBox? Memo удобнее будет...

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;


Автор: status 24.05.2007 3:16

...и сообщает, сколько из них пользователь угадал.


это можно определить через Memo а то я с этой компонентой никогда не работал?

Автор: volvo 24.05.2007 3:47

Тогда вот так:

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;

Автор: status 24.05.2007 15:42

Благодарю за помощь!