Как написать на Delphi рандомизатор?

ms_nadin

Нужен рандомизатор, который выдает случайное значение из какого либо интервала или отрезка. Можно чтобы выдавал случайные числа типа Integer, но из большого отрезка.
Функцию random не предлагать, она при каждом запуске программы выдает ОДНИ И ТЕ ЖЕ значения
Подскажите плиз как нормальный рандомизатор написать

ms_nadin

А сейчас вроде сам додумал надо перед рандом рандомайз написать. А какие-нибудь еще варианты рандомизаторов есть?

ms_nadin

Подскажите плиз что за ошибка сам понять не могу. Мне нужен рандомизатор который выдает значения из интервала (0,1) Функия random выдает число 0 <=x<1, т.е. из полуинтревала [0,1). Чтобы поправить это дело пишу такую функцию:
 Function GetRand:real;
begin
randomize;
GetRand:=random;
While GetRand=0 do
begin
randomize;
GetRand:=random;
end;
end;
Компилится нормально, но в процессе исполнения программа вылетает с ошибкой. В чем ошибка не могу понять

korsar0156

Чтобы Random нормально работал надо в начале проги инициализировать RandSeed
каждый раз по-разному. Функция Randomize делает это по таймеру.

korsar0156

Randomize один раз надо делать

Dasar

> While GetRand=0 do
Вот так точно можно делать?
GetRand в данном случае может означать рекурсивный вызов функции.

ms_nadin

Randomize еще один убрал. Все равно выдает такую ошибку:

ms_nadin

Т.е. сейчас выглядит так:
Function GetRand:real;
begin
randomize;
GetRand:=random;
While GetRand=0 do
begin
GetRand:=random;
end;
end;

Dasar

замени GetRand в
while GetRand=0 do
на использование локальной переменной.

ms_nadin

Спасибо, все работает

ms_nadin

А как использовать функцию RandomRange?
Пишу буквально следующее:
 procedure TForm1.Button2Click(Sender: TObject);
begin

a:=RandomRange(1,5);

label67.Caption:=inttostr(a);

end;
Delphi ругается на RandomRange, пишет:
 [Error] Unit1.pas(174): Missing operator or semicolon 
Что с синтаксисом не так?

yolki

Ошибка в 174 строчке, логично?
Это хотя бы что за строка в твоём приведённом коде?
Правильное использование рандомов - это в главной программе (Project.dpr)
написать один раз Randomize, а потом обращатся к Random, RandomRange и т.п.

Elmor

Нужно чтобы выдавала случайные числа integer из отрезка [A; B]?
А так разве нельзя:
A + Round(Random(B-A

ms_nadin

Вот в этой строчке:
a:=RandomRange(1,5);

ms_nadin

Хотелось бы все-таки RandomRange использовать раз она есть

Elmor

Ну не знаю только что посмотрел RandomRange нормально пашет...

yolki

Аналогично - нормально всё работает.
вот код:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses Math;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(RandomRange(1,5;
end;

end.

кто такая "a" ?

ms_nadin

Такой как у меня синтаксис?

ms_nadin

Вижу, как у меня... Буду дальше смотреть что за фигня

ms_nadin

Все заработало! Спасибо всем!
Я не знал что надо Uses Math написать
Оставить комментарий
Имя или ник:
Комментарий: