Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 21.02.2013
Сообщений: 118
1

Как исключить число из диапазона в Random?

05.10.2013, 12:44. Показов 3404. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть 4 переменных: 1,2,3 и 4 - типа Integer а форме Label1 и Label2

- нужно чтобы при создании формы - их свойства Color - приобретали один из 4 заранее заданных цветов, при этом цвета - не должны быть одинаковыми, т.е. как я полагаю - если заранее присвоить цветам - цифры от 1 до 4 - то при закрашивании одного Label'я - число отвечающее за этот цвет - должно быть исключено в следующем Random(X) - да - забыл - закраситься - должно случайным цветом).

Подскажите пожалуйста как реализовать исключение известного числа из определённого диапазона?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2013, 12:44
Ответы с готовыми решениями:

Не получается исправить ошибку (Вводится диапазон, где 1-ое число-начало диапазона, 2-ое число приращени, 3-е число конец диапазона)
Здравствуйте. Не могу исправить ошибку. Задание: Вводится диапазон, (например 5,1,10) где 1-ое...

Как исключить определенные числа из диапазона для функции rand()
Использую функцию rand для получения случайных значений в диапазоне от 1 до 52 int...

Исключить поворения из random
Доброго времени суток. Имеется код: Random rand = new Random(); int rndInt = rand.nextInt(n)+1;...

Удаление числа из диапазона random
Доброго времени суток! Есть таймер с рандом, у которого диапазон от 0 до 5. Каждое из этих чисел...

3
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
05.10.2013, 12:54 2
ЦарьОчПритнЦарь, сюда
1
3 / 3 / 0
Регистрация: 21.02.2013
Сообщений: 118
05.10.2013, 15:25  [ТС] 3
Цитата Сообщение от droider Посмотреть сообщение
ЦарьОчПритнЦарь, сюда
Хоть этот вариант для меня и оказался слишком сложным - всё равно - Спасибо!

Я вот воплотил задумку в сабж - немного по-другому - с использованием repeat...until)))

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
unit PROGA;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const
u=0;
i=16777215;
o=255;
p=65280;
 
procedure TForm1.FormCreate(Sender: TObject);
var
q,w,e,r:integer;
begin
Randomize;
 
q:=Random(2)+1;
w:=Random(4)+1;
 
if q=1 then
begin
if w=1 then label1.color:=u;
if w=2 then label1.color:=i;
if w=3 then label1.color:=o;
if w=4 then label1.color:=p;
if q=1 then
repeat
 randomize;
w:=random(4)+1;
if w=1 then label2.color:=u;
if w=2 then label2.color:=i;
if w=3 then label2.color:=o;
if w=4 then label2.color:=p;
until label1.Color <>label2.Color;
end;
 
if q=2 then
begin
if w=1 then label2.color:=u;
if w=2 then label2.color:=i;
if w=3 then label2.color:=o;
if w=4 then label2.color:=p;
e:=q;
if q=2 then
repeat
 randomize;
w:=random(4)+1;
if w=1 then label1.color:=u;
if w=2 then label1.color:=i;
if w=3 then label1.color:=o;
if w=4 then label1.color:=p;
until label1.Color <>label2.Color;
 
end;
 
end;
 
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
q,w,e,r:integer;
begin
Randomize;
 
q:=Random(2)+1;
w:=Random(4)+1;
 
if q=1 then
begin
if w=1 then label1.color:=u;
if w=2 then label1.color:=i;
if w=3 then label1.color:=o;
if w=4 then label1.color:=p;
if q=1 then
repeat
 randomize;
w:=random(4)+1;
if w=1 then label2.color:=u;
if w=2 then label2.color:=i;
if w=3 then label2.color:=o;
if w=4 then label2.color:=p;
until label1.Color <>label2.Color;
end;
 
if q=2 then
begin
if w=1 then label2.color:=u;
if w=2 then label2.color:=i;
if w=3 then label2.color:=o;
if w=4 then label2.color:=p;
e:=q;
if q=2 then
repeat
 randomize;
w:=random(4)+1;
if w=1 then label1.color:=u;
if w=2 then label1.color:=i;
if w=3 then label1.color:=o;
if w=4 then label1.color:=p;
until label1.Color <>label2.Color;
 
end;
 
end;
 
 
 
end.
0
Заблокирован
05.10.2013, 17:36 4
Мдя.. да кто ж так делает? Если диапазон известен, то зачем валять дурака? Это же делается просто и элементарно.
У вас там цвета? Ну пусть будет массив цветов. Не важно.
Вы его задаёте.
А теперь нужно получить случайный цвет.

У вас есть массив. тасуем его.

Например. Исходный массив - красный синий зелёный жёлтый
Начинаем перебирать
1 цвет - генерируем случайное число в диапазоне по количеству элементов массива. от 1 до 4
Например. выпало 4
Меняем местами текущий цвет и 4-ый цвет
жёлтый синий зелёный красный
потом берём второй цвет. генерируем число, скажем это 2 Цвет копируется сам на себя и не перемещается.
берём 3 цвет , сгенерировалось число 4
меняем 3 и 4 цвета.
получилось жёлтый синий красный зелёный

И так далее. Дошли до конца. можно опять пройти. И так несколько циклов.
И у вас весь массив перетасован. Вот вам и случайная последовательность без повторов.
А заниматься фигнёй со сравнением - бред собачий. Это может быть, если диапазон чисел очень большой.
0
05.10.2013, 17:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2013, 17:36
Помогаю со студенческими работами здесь

Функция Random, ошибка 76 - константа вне диапазона
Пытаюсь установить для функции Random большой диапазон. С маленьким (-30000 - 30000) работает, а...

Как получить случайное число из диапазона?
как получить рандомно число из диапазона 1-5 или 1-10... подскажите.. лазил по форуму, но...

Как найти целое число из диапазона от 0 до N, которое не встречается в массиве A?
Как найти целое число из диапазона от 0 до N, которое не встречается в массиве A?

Как из диапазона вывести число, которое первое удовлетворит одному из условий
Есть диапазон числел (столбец). Нужно чтобы число, из условий а или b, которое первое сработает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru