Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Случайные числа

Автор: Atreides 19.03.2007 23:26

По заданию нужно получить 200 значений в интервале от 1 до 5,4. И вот возник вопросик: Мне нужны случайно сгенерированные числа с заданным диапазоном значений от 1 до 5,4. Я накидал простой генератор, но числа выпадают от 0 до 1, как это поменять? Вот, что у меня получилось:

Код

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
const n=200;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
r,b:real;
x:array[1..n] of real;
begin
b:=2;
randomize;
for i:=1 to n do
begin
r:=random;
x[i]:=-ln(r)/b;
Form1.Memo1.Lines.Add(FloatToStr(x[i]));
end;
end;
end.

Автор: Malice 20.03.2007 0:05

x:=random*4.4+1; mega_chok.gif

Автор: Caranthir 20.03.2007 0:10

попробуй


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
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
x:array[1..200] of real;
begin
randomize;
for i:=1 to 200 do
begin
x[i]:=random(5)+random(4)/10+1;
Form1.Memo1.Lines.Add(FloatToStr(x[i]));
end;
end;
end.



причем, если объявдять в implementation
n=200, то еще при старте проги массив заполняется real'ьными числами

Автор: Atreides 20.03.2007 15:51

Суть в том, что мне нужно 200 случайных значений в диапазоне от 1 до 5.4. Причем числа формата с точностью до тысячных (три знака после запятой) для того, что бы точно построить график. А если диапазон от 1 до 3?

Автор: Lapp 20.03.2007 16:02

Цитата(Atreides @ 20.03.2007 11:51) *

Суть в том, что мне нужно 200 случайных значений ...
А если диапазон от 1 до 3?

Atreides, тебе же ответил Malice..
Чем тебе не нравится его ответ?

Автор: Адель 20.03.2007 16:17

Цитата
Причем числа формата с точностью до тысячных (три знака после запятой)

что то типо

x[i]:=int(random*4.4*1000)/1000+1;

Автор: hardcase 20.03.2007 23:18

Цитата(Atreides @ 20.03.2007 11:51) *
Суть в том, что мне нужно 200 случайных значений в диапазоне от 1 до 5.4. Причем числа формата с точностью до тысячных (три знака после запятой) для того, что бы точно построить график. А если диапазон от 1 до 3?

Код

function RandomBetween(lowBound, highBound: double): double;
begin
    RandomBetween := Random() * (highBound - lowBound) + lowBound;
end;

Автор: Atreides 6.11.2007 20:40

Снова столкнулся с проблемой генератора чисел. Нужен генератор случайных чисел с равномерным распределением. В заданных диапазонах значений.