Иногда возникает необходимость в нахождении последовательности целых случайных чисел, находящихся в некотором указанном диапазоне. Следующий код, написанный на Паскале, как раз решает эту задачу — генерирует случайные числа на промежутке [a,b]. Можете скопировать целиком и программа будет работать.
var
M: array[0..10000] of integer;
i, j, p: word;
a, b, c: integer;
f: boolean;
begin
write('В каком интервале [a, b] вы хотите',
' получить набор случайных чисел?');
writeln('Введите целые числа a и b через пробел:');
readln(a, b);
write('Сколько случайных чисел хотите получить',
' в промежутке [', a, ', ', b, ']?');
write('p = ');
readln(p);
{Количество чисел в диапазоне[a, b] равно b - a + 1.
Поэтому, если ввести p больше этого числа, то будет
ошибка. Условие while ниже это проверяет:}
while p > b - a + 1 do
begin
writeln(' Введите p не больше, чем ', b - a + 1, '!');
write(' p = ');
readln(p);
if p > b - a + 1 then write(' Неверно!')
end;
writeln;
write(' Набор из ', p, ' случайных чисел в');
writeln(' диапазоне ', '[', a, ', ', b, ']:');
randomize;//Генератор псеослучайных чисел.
{Находим первое случайное число (с индексом 0):}
m[0] := a + random(b - a + 1);
write(' ', m[0]);
for i := 1 to p - 1 do
begin
{Находим (i + 1)-е случайное число (с индексом i):}
m[i] := a + random(b - a + 1);
repeat
{Индикатор уникальности чисел
(все предыдущие числа разные):}
f := true;
{Проверяем предыдущие числа на уникальность:}
for j := 0 to i - 1 do
{Если число m[i] совпадает с одним из предыдущих:}
if m[i] = m[j] then
begin
{то меняем индикатор на
противоположный (числа совпали!):}
f := false;
{и пробуем другое случайное число:}
m[i] := a + random(b - a + 1)
end
{И так до тех пор пока индикатор не изменится:}
until f = true;
{В таком случае выводим новое случайное число:}
write(' ', m[i])
end;
{Если откроем фигурные скобки ниже, то получим те
же числа, но в порядке возрастания (случайный набор
возрастающих целых чисел в вышеуказанном диапазоне):}
{
writeln;
writeln;
writeln(' Тот же набор чисел, но в порядке возрастания:');
for i := 0 to p - 1 do
begin
for j := i + 1 to p - 1 do
begin
if m[i] > m[j] then
begin
c := m[i];
m[i] := m[j];
m[j] := c
end
end;
write(' ', m[i])
end
}
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** boolean;
: Представляет логическое значение.
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**const** true = True;
: Представляет логическое значение.**const** false = False;
: Представляет логическое значение.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**const** true = True;
: Представляет логическое значение. * * *
А от если хотите в случайной последовательности перемешать все числа с диапазона [a,b], то в предыдущий код вам надо поставить p = b - a + 1, поскольку количество целых чисел в промежутке [a,b] равно b - a + 1 и при нахождении случайных чисел ни одно целое число не будет пропущено. Подобная задача может возникнуть, если надо данный список людей перемешать и составить новый.
var
M: array[0..10000] of integer;
i, j, p: word;
a, b: integer;
f: boolean;
begin
writeln('В каком интервале [a, b] вы хотите перемешать числа?');
writeln('Введите целые числа a и b:');
readln(a, b);
p := b - a + 1; //Количество целых чисел в диапазоне [a, b]
writeln;
write(' Перемешанные в случайном порядке числа');
writeln(' в диапазоне ', '[', a, ', ', b, ']:');
writeln;
randomize; //Генератор псевдослучайных чисел.
{Находим первое случайное число (с индексом 0):}
m[0] := a + random(b - a + 1);
write(' ', m[0]);
for i := 1 to p - 1 do
begin
{Находим (i + 1)-е случайное число (с индексом i):}
m[i] := a + random(b - a + 1);
repeat
{Индикатор уникальности чисел
(все предыдущие числа разные):}
f := true;
{Проверяем предыдущие
числа на уникальность:}
for j := 0 to i - 1 do
{Если число m[i] совпадает
с одним из предыдущих:}
if m[i] = m[j] then
begin
{то меняем индикатор на
противоположный (числа совпали!):}
f := false;
{и пробуем другое случайное число:}
m[i] := a + random(b - a + 1)
end
{И так до тех пор пока индикатор не изменится:}
until f = true;
{В таком случае выводим новое случайное число:}
write(' ', m[i])
end;
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** boolean;
: Представляет логическое значение.
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**const** true = True;
: Представляет логическое значение.**const** false = False;
: Представляет логическое значение.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**const** true = True;
: Представляет логическое значение.