Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 00:47   #1
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию Случайная запись в Label. Delphi

Здравствуйте!

Помогите, пожалуйста, решить задачу.

Цитата:
Создать программу "Электронная гадалка", которая в ответ на введённое целое число выдаст одну из предсказаний: любит, не любит, плюнет, поцелует, к сердцу прижмёт, к черту пошлет. При этом поле, в котором появляется предсказание должно быть окрашено одним из шести цветов: красный, синий, зеленый, белый, коричневый, жёлтый. Цвет окна жёстко привязан к предсказанию, т.е. если например электронная гадалка выдала предсказание к сердцу прижмёт, то окно окрашивается в коричневый цвет. И ещё одна особенность: при введении числа, которое без остатка делится на шесть, предсказание должно быть случайным, в отличие от других чисел: предсказание имеет однозначную зависимость.
ADK01 вне форума Ответить с цитированием
Старый 01.03.2013, 09:57   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

используй case и randomize
fbus вне форума Ответить с цитированием
Старый 01.03.2013, 16:58   #3
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию Случайная запись в Label. Delphi

Здравствуйте

Есть несколько условий (1, 2, 3, 4, 5, например). Для каждого условия есть своя надпись Label1.Caption. Но есть одно условие (6), для которого нужно случайным образом выводить надпись Label1.Caption, причем надпись брать случайную из условий 1, 2, 3, 4, 5.

Подскажите, пожалуйста, как можно реализовать.
ADK01 вне форума Ответить с цитированием
Старый 01.03.2013, 17:08   #4
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию

Код:
case(StrToInt(Edit1.Text)) mod 7 of
0:
begin
Label1.Caption:='1';
Label1.Color:=clRed;
end;
1:
begin
Label1.Caption:='2';
Label1.Color:=clBlue;
end;
2:
begin
Label1.Caption:='3';
Label1.Color:=clGreen;
end;
3:
begin
Label1.Caption:='4';
Label1.Color:=clWhite;
end;
4:
begin
Label1.Caption:='5';
Label1.Color:= clMaroon;
end;
5:
begin
Label1.Caption:='6';
Label1.Color:=clYellow;
end;
6:
begin
Label1.Caption:=
end;
Т.е. если число делится на 6 без остатка, то, в этом случае, нужно Label1.Caption выводить случайным образом из уже имеющихся вариантов.
ADK01 вне форума Ответить с цитированием
Старый 01.03.2013, 17:23   #5
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
procedure GetTextAndColor(const N: Integer; var Color_: TColor; const Text: string);
const
  Texts: array[0..5] of string = ('', '', '', '', '', '');
  Colors: array[0..5] of TColor = (clRed, clRed, clRed, clRed, clRed, clRed);
begin
  if N > 5 then
  begin
    Randomize;
    GetTextAndColor(Random(6), Color_, Text);
  end
  else
    begin
      Color_ := Colors[N];
      Text := Texts[N];
    end;
end;

....................
var
  Clr: TColor;
  Txt: string;
begin
  GetTextAndColor(StrToInt(Edit1.Text) mod 7,  Clr, Txt);
  Label1.Caption := Txt;
  Label1.Color := Clr;
end;
где-то так
GreenWizard вне форума Ответить с цитированием
Старый 01.03.2013, 17:26   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Зачем case?
Массив высказываний - и выборка по случайному индексу.
s-andriano вне форума Ответить с цитированием
Старый 01.03.2013, 22:36   #7
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

а цвет как будешь выбирать? создавать второй массив с цветами?
fbus вне форума Ответить с цитированием
Старый 01.03.2013, 22:42   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ADK01, а Вы знаете, что создание одинаковых тем (кросспостинг( строго запрещено правилами форума?! Зачем Вы ещё одну тему создали?!


дополнив код GreenWizard, я бы такой вариант предожил:
Код:
const
  GadalkaTexts: array[0..5] of string = ('любит', 'не любит', 'плюнет', 'поцелует', 'к сердцу прижмёт', 'к черту пошлет');
  GadalkaColors: array[0..5] of TColor = (clRed, clBlue, clGreen, clWhite, clMaroon, clYellow);
var
  N : integer;
begin
  Randomize;
  N := StrToInt(Edit1.Text);
  N := N mod 6;
  if N = 0 then  // число делится на 6 
       N := Random(6);

  Label1.Caption := GadalkaTexts[N];
  Label1.Color := GadalkaColors[N];
end;
и всё.

Последний раз редактировалось Serge_Bliznykov; 01.03.2013 в 23:21.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2013, 23:40   #9
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

код проще, но теряется гибкость... хотя она и в моём варианте не особо большая, НО наружу торчало лишь "ты ему число, а оно тебе цвет и текст"... лучше с архитектурной точки зрения, ведь внутри ф-ии можно организовать любой код получения текста/цвета
хотя, если лезть в дебри, то там можно наворотить и фабрику с сингелтонами=)

сорри за оффтоп
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
случайная дата RISagitov Microsoft Office Excel 7 21.05.2012 13:34
случайная генерация The riddle Помощь студентам 5 06.10.2009 15:57
При расположении Label на компонентах, место под Label, не реагирует на событие onClick. NavigatorNeba Компоненты Delphi 3 15.11.2008 19:56
Случайная строка (need help) Fainder HTML и CSS 4 06.04.2007 18:47
Вопрос по label. Как сделать так чтобы label была прозрачной. Lonix Компоненты Delphi 2 01.04.2007 06:23