
21.04.2014, 20:48
|
 |
Профессионал
|
|
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
|
|
Цитата:
Сообщение от WishHunter
Народ, помогите, нужна программа. Пользователь вводит количество билетов, и при нажатии кнопки программа выдает рандомно 2 билета из введенного количества. Это вроде не трудно. Но нужно при повторном нажатии этой же кнопки вывести новые 2 рандомных билета, но уже без тех что выдавал в предыдущий раз. И так пока не закончатся билеты. Когда закончатся, при нажатии этой же кнопки вывести сообщение что билеты кончились.
|
По нажатию первой кнопки (Button1) заполняется список билетов, а каждое нажатие второй кнопки (Button2) вынимает из этого списка по 2 билета:
Код:
var
List: TStringList = nil;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
Count, i: Integer;
begin
if InputQuery('', 'Введите количество билетов', s) then
begin
if TryStrToInt(s, Count) and (Count >= 1) then
begin
if Assigned(List) then List.Clear else List := TStringList.Create;
if RandSeed = 0 then Randomize;
for i := 1 to Count do List.Add(IntToStr(i));
end else
begin
MessageDlg('Введено некорректное число билетов', mtError, [mbOK], 0);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s: String;
k: Integer;
begin
if Assigned(List) and (List.Count > 0) then
begin
if List.Count > 1 then
begin
k := Random(List.Count);
s := List[k];
List.Delete(k);
k := Random(List.Count);
s := s + ', ' + List[k];
List.Delete(k);
MessageDlg('Выбраны билеты ' + s, mtInformation, [mbOK], 0);
end else
begin
MessageDlg('Остался последний билет ' + List[0], mtInformation, [mbOK], 0);
List.Delete(0);
end;
end else
begin
MessageDlg('Билеты кончились', mtError, [mbOK], 0);
end;
end;
|