Bombentrichter
program zzgenerator;{$APPTYPE CONSOLE}uses SysUtils, Math;// Zufallszahlengenerator nach Modulo// Zi:=(Z_0*a+c)mod (m+2^b) n-Anzahl der zu liefernden Werte// type ZG = class z0:Extended; a,c,m,n,b: Integer; function gen(z:Extended):Extended; constructor Create;end;function REST(A,B:Extended):Extended;beginResult:=A-(Int(A/B))*B;end;function grosse_Zahl(Z:Extended):WideString;var I:Integer; N1,N2:Extended;beginfor I:=Round(Int(log10(Z))) downto 1 do begin N1:=Rest(Z,Power(10,I)); N2:=Int(Z/Power(10,I)); write(IntToStr(Round(N2))); Z:=N1; end;end;function ZG.gen(z:Extended):Extended;beginResult:=REST(((z*a)+c),(m+Power(2,b)));end;constructor ZG.Create;begininherited Create();a:=13821;m:=Round(Power(2,15));c:=0;n:=100;z0:=10;b:=0;end;var Z,Z0:Extended; I: Integer; Generator: ZG; ENDE:Boolean; DEL:String;procedure ausgang(STR:String);beginwrite(STR+DEL);end;procedure USAGE;beginwriteln('*******************************************************************************');writeln(' Zufallszahlengenerator Linearer Kongruenzgenerator'+#13#10 +' Z=(a*Z+c)mod (m+2^b) auf Extended beschraengt'+#13#10+'Benutzung: zzgenerator [-a=A] [-b=B] [-m=M] [-n=N] [-c=C] [-z=Z] [-o=R|C|Trennzeichen] [-h|-?]'+#13#10+'Standartwerte sind: A=13821; M=2^15;C=0;N=100;Z:=10;R=Reihe,C=Spalte'+#13#10+'h-> diese Hilfe');writeln('*******************************************************************************');end;procedure werte_Parameter_aus;var param,wert: string; I:Integer;beginfor I:=1 to ParamCount do begin param:=Copy(ParamStr(i),0,2); wert:=Copy(ParamStr(i),4,20); if param='-n' then begin try Generator.n:=StrToInt(wert); except end; end; if param='-z' then begin try Generator.z0:=StrToInt(wert); except end; end; if param='-a' then begin try Generator.a:=StrToInt(wert); except end; end; if param='-m' then begin try Generator.m:=StrToInt(wert); except end; end; if param='-c' then begin try Generator.c:=StrToInt(wert); except end; end; if param='-b' then begin try Generator.b:=StrToInt(wert); except end; end; if (param='-h') or (param='-?') or (param='/h') then begin USAGE; ENDE:=True; end; if param='-o' then begin if wert='C' then DEL:= #13#10; if wert='R' then DEL:=' '; if (wert <> 'C') and (wert <>'R') then begin try DEL:=wert; except end; end; end;end;end;beginDEL:=' ';Generator:=ZG.Create;ENDE:=False;//Standartbelegungwerte_Parameter_aus; // Insert user code hereif not ENDE thenbegin Z0:=Generator.z0; ausgang(FloatToStr(Z0)); begin for I:=1 to Generator.n do begin Z:=Generator.gen(Z0); //ausgang(''); ausgang(FloatToStrF(Z,ffFixed,18,0));//+#13#10); //grosse_Zahl(Z); //ausgang(#13#10);ausgang(#13#10); //ausgang(''); Z0:=Z; end;end;end;end.