Оператор random - генератор случайных чисел

Оператор random - генератор случайных чисел


Часто в задачах требуется выполнить различные действия с большим количеством чисел. В таких случаях вводить все числа становится просто неудобно и долго. Для этого в Паскале придуман генератор случайных чисел - оператор random. От программиста лишь требуется задать числовые промежутки ( например от 2 до 50 ) , все остальное программа выполнит сама. Итак как добавить к коду программы оператор random .
Для начала необходимо предварительно описать оператор (то есть фактически мы сообщаем программе , что будет использован генератор случайных чисел ). Для этого необходимо ввести оператор randomize в промежутке после begin и до random (обычно оператор randomize ставят сразу после begin , так как это упрощает чтение кода ) . Затем идет присвоение оператора random к выбранной переменной. Делается это так:
Для Turbo Pascal
оператор:= random (max-min+1)+min;

- оператор - любая переменная
- min - целое число , не превышающее max
- max - целое число, большее min
Здесь min и max являются диапазонами генератора случайных чисел. Теперь для наглядности пример генератора случайных чисел от 2 до 5 .
var x:integer;
begin
randomize;
x :=random (4)+2;
end;

Здесь 4 - это результат выражения 5-2+1.
Для Pascal ABC
Здесь можно применять оператор random так же как и для Turbo Pascal , однако есть еще один вариант , более простой в использовании.
оператор:= random (min,max);

- оператор - любая переменная
- min - целое число , не превышающее max
- max - целое число, большее min
Чтобы разница лучше просматривалась решим тот же пример генератора случайных чисел от 2 до 5 этим способом.
var x:integer;
begin
randomize;
x :=random (2,5);
end;

Как уже стало заметно второй способ гораздо проще, однако его можно использовать только в Pascal ABC. А для тех , кого интересует код программы , где используется рандом без повтора генерируемых чисел я написал этот пост . В нем при генерации каждого числа происходит сравнение с предыдущем числом .
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:
#31 | написал: Mr.Cheater | 8 февраля 2014 21:30 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: Владимир
выводит ошибку: ожидалось имя процедуры или функции


Опишите конкретно, что именно вы вводили и где именно ошибка

#32 | написал: Edward | 13 марта 2014 21:12 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
как зделать что б рандом выдавал значение от -1000 до 1000 в turbo pascal

#33 | написал: Mr.Cheater | 24 марта 2014 19:34 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: Edward
как зделать что б рандом выдавал значение от -1000 до 1000 в turbo pascal

если бы прочли для начала статью, вы бы не задавали этот вопрос

#34 | написал: nata | 11 ноября 2014 22:58 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
скажите пожалуйста,может ли рандом высчитать комбинации для лото .

#35 | написал: Александр | 22 ноября 2014 22:50 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Здравствуйте!
Нужна консультация. Везде идет речь о генерации целых чисел. А возможно ли генерировать числа от 0 до 1 в определенном диапазоне, например от 0,7 до 0,8? Если можно, подскажите как.

#36 | написал: антагонист | 6 апреля 2015 21:44 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
у меня паскаль abc ругается на программу пишет что :функция с параметрами указанных типов не найдена. В чём проблема? вот код
var a,b:real;
begin
b:=0;
while b<>10 do
begin
randomize;
a:= random (-20, 20);
b:=b+1;
writeln(a);
end;
end.

#37 | написал: Mr.Cheater | 11 апреля 2015 00:17 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: антагонист
у меня паскаль abc ругается на программу пишет что :функция с параметрами указанных типов не найдена. В чём проблема? вот код
var a,b:real;
begin
b:=0;
while b<>10 do
begin
randomize;
a:= random (-20, 20);
b:=b+1;
writeln(a);
end;
end.


Скорее всего у вас установленая старая версия Pascal ABC. У меня Ваш код работает нормально.

И еще : вам следует randomize поставить ДО цикла while , иначе на выходе будут одинаковые числа

#38 | написал: panda-san | 22 октября 2015 22:21 | ICQ: | Пользователь offline

Группа: Читатели
Публикаций: 0
Комментариев: 1
В заданому масиві К(14) знайти кількість та добуток парних елементів.Помогите плиз

#39 | написал: Макс | 24 ноября 2015 17:01 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Помогите , нужна такая программа ,Ставка=1000 Бросаем 3 кубика , если число больше 12 то выйграли и ставка увеличивается в трое , а если проигрываем то ставка уменьшается в двое.Если числа на кубиках одинаковы то защитать победу, на этом всё , помогите пожалуйста!!!

#40 | написал: Михаил | 11 июня 2016 18:43 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
оператор:= random (max,min);

var x:integer;
begin
randomize;
x :=random (2,5);
end;


Вы пишите, что на пером месте максимальное число, а на втором минимальное. Но у вас в примере наоборот. Как я понял это не принципиально?

#41 | написал: Mr.Cheater | 20 июля 2016 17:05 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: Михаил
оператор:= random (max,min);

var x:integer;
begin
randomize;
x :=random (2,5);
end;


Вы пишите, что на пером месте максимальное число, а на втором минимальное. Но у вас в примере наоборот. Как я понял это не принципиально?


Принципиально, это опечатка, исправил

#42 | написал: К | 23 апреля 2017 23:56 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Pascal abc
не получается сделать рандом от -10 до +10

#43 | написал: Елена Дегтярева | 29 сентября 2017 09:33 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
А подскажите, как сгенерировать вещественные числа в интервале от 1 до 1,3 с количеством знаков после запятой = 2

#44 | написал: Диана | 18 декабря 2017 20:02 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Помогите, пожалуйста. я не понимаю, что конкретно не правильно:

program Project3;
{$APPTYPE CONSOLE}
{Дан двумерный целочисленный массив размера M ? N и целые числа k и р. Написать
функцию, которая вычисляет номер первого столбца, содержащего все элементы,
значения которых принадлежат диапазону [k, p].}
{$R *.res}
uses
System.SysUtils;
const N=4; M=5;
type ARR=array[1..N,1..M] of integer;
var a:ARR;
k,p,i,j: integer;
procedure enter (var c:integer);
begin
randomize;
c:=random((201)-100); //рандомный выбор элементов
writeln(c);//вывод матрицы
end;
function comp(b:ARR; h,e:integer):integer;
var j,i,l,j0:integer;
begin
for j := 1 to N do //столбцы
begin
l:=0;
j0:=0;
for i := 1 to M do//строки
begin
if b[i,j]>=h then//если элемент положительный - считаем
if b[i,j]<=e then l:=l+1;
if l=M then j0:=j; //если все элементы столбца отрицательны - цыкл останавливается
end;
if j0=j then comp:=j0;
end;
end;
begin
for j:=1 to N do//столбцы
begin
for i:=1 to M do //строки
begin
enter(a[i,j]);
end;
writeln;
end;
writeln('Enter the lower limit of the range');
readln(k);
writeln('Enter the upper limit of the range');
readln(p);
if k>=p then
writeln('The lower limit can not be equal to or greater than the upper boundary');
if k<p then
writeln(comp(a,k,p));
readln;
end.

если программа не сохранена, то пишет, что не сумел, а если сохранена, то начинает работать, потом высвечивается брейк, континью, хелп. нажимаю на брейк - отправляет в систем, нажимаю континью- отправляет в CPU.
в сообщениях пишет:
[dcc32 Warning] Project3.dpr(39): W1035 Return value of function 'comp' might be undefined

#45 | написал: трект | 16 января 2018 20:37 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
ваще не получилось

#46 | написал: Альбина | 27 февраля 2018 22:25 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
C использование рандома нужно написать программку , чтобы выводился одномерный массив из эн целых чисел в диапазоне от нуля до бэ. Пожалуйста.

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Введите два слова, показанных на изображении: