Здравствуйте. Нужно сделать программу "Создание и проверка датчика случайных чисел" методом середины квадратов в программе CodeGear Delphi 2009, т.е.
1. В качестве х
0 берется произвольное число.
2. Это число возводится в квадрат.
3. Из квадрата берут среднюю часть. Это и будет новое число х
1:
х
0 -> х
02 -> х
1 -> х
12 -> х
2 …
Например, х
0= 15, а в двоичной системе счисления х
0=1111. Возведем его в квадрат:
1111 * 1111 = 11100001
Получаем х
1= 1000, а в десятичной системе счисления х
1 = 8.
Дам ссылку как проверить датчик случайных чисел (проверку тоже выполнить в программе)
ссылка на полный текс лабораторной (расписано подробно)
Продолжение и подробное описание лабораторной работыПриложение:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ch,iMod,iDchr,sDiv: integer;
implementation
{$R *.dfm}
function IntToBin( Value: integer; Digits: integer ): string;//перевод в двоичную форму
var
i: integer;
begin
Result := '';
for i := 0 to Digits-1 do
begin
if Value and ( 1 shl i ) > 0
then Result := '1' + Result
else Result := '0' + Result;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);//перевод в двоичную форму
var
i, k,n: integer;
begin
n:=Strtoint(Edit1.Text)*StrToInt(Edit1.Text);
k := 1;
for i := 1 to n do
begin
k := k * 2;
if k > n then Break;
end;
Edit2.Text := IntToBin( n, i );
end;
procedure TForm1.Button2Click(Sender: TObject);//находим последнюю цифру
var a,s:integer;
begin
//a:= (strtoint(Edit2.text) mod 10);
//edit3.Text:=inttostr(a);
a:=Strtoint(Copy(Trim(Edit2.Text),3,4) );
edit3.Text:=inttostr(a);
end;
procedure TForm1.Button3Click(Sender: TObject);
var b,c,d:integer;
begin
b:= strtoint(Edit1.text);
c:= strtoint(Edit2.text);
d:=b * c;
Edit3.text:=inttostr(d);
end;
end.