Консультация № 180131
03.10.2010, 12:31
42.17 руб.
04.10.2010, 10:05
0 8 0
Здравствуйте. Нужно сделать программу "Создание и проверка датчика случайных чисел" методом середины квадратов в программе CodeGear Delphi 2009, т.е.
1. В качестве х0 берется произвольное число.
2. Это число возводится в квадрат.
3. Из квадрата берут среднюю часть. Это и будет новое число х1:
х 0-> х02 -> х1-> х12 -> х 2
Например, х0= 15, а в двоичной системе счисления х0=1111. Возведем его в квадрат:
1111 * 1111 = 11100001
Получаем х1= 1000, а в десятичной системе счисления х1 = 8.

Дам ссылку как проверить датчик случайных чисел (проверку тоже выполнить в программе)
ссылка на полный текс лабораторной (расписано подробно)
ссылка (как проверить датчик)?

Обсуждение

Неизвестный
03.10.2010, 12:45
общий
извинаяюсь, на codegerar с++ builder 2009.
Если не сможете вторую часть, то хотя бы нужно создать сам датчик случайных чисел.
давно
Академик
20764
1861
03.10.2010, 13:46
общий
Вам задан размер случайного числа? Есть ли требование работать в десятичной системе?
Если нет - то вот генератор для 32 бит:
Код:

#include <stdint.h>

class Random {
uint32_t value;
public:
Random(unsigned seed): value(seed) {}
uint32_t rand();
}

uint32_t Random::rand() {
uint64_t t = (uint64_t)value * value; // умножать надо уже 64-битные числа
value = (t >>16) & 0xffffffff;
return value;
}

Это - для gcc. В stdint.h описаны типы uint32_t и uint64_t, но что это за типы я думаю понятно
Неизвестный
04.10.2010, 11:06
общий
нужно без рендома.
Неизвестный
04.10.2010, 14:13
общий
можно реализовать в десятичной системе счисления
Неизвестный
04.10.2010, 14:43
общий
у меня после n-го числа получается ноль и программа выдает ошибку.
4008
0640
9600
1600
6000
0000
а нужно чтобы он выдавал последовательность случайных чисел.
давно
Академик
20764
1861
04.10.2010, 14:56
общий
Наверное неудачное начальное значение. А может быть так в конце концов и должно будет случиться.
Ваша задача - исследовать генератор с уже заданным алгоритмом. Возможно, что он действительно неподходящий.
Неизвестный
04.10.2010, 18:16
общий
мне нужно, чтобы вывелось 50 чисел (без нуляв n-ом числе).
Вот приведу пример, но я делал на делфи.
procedure TForm1.Button1Click(Sender: TObject);//
var//переменные
n: real;
a,s:string;
i,m:integer;

begin//начало
for i:=0 to 200 do
begin
n:=Strtofloat(Edit1.Text)*StrTofloat(Edit1.Text);
Edit2.Text :=FloatTostr(n);

a:=(Copy(Trim(Edit2.Text),3,4) );//вырезание середины из числа
Edit1.Text:=a;

RichEdit1.Lines.Add(Edit1.Text);
m:=m+1;

end;
end;
Неизвестный
05.10.2010, 11:57
общий
а вы можете дописать программу (там есть ссылка "как проверить датчик")?
Форма ответа