Autor Beitrag
Tim.exe
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 19.02.04 13:02 
Hallo,

ich habe einen Code um Zufallszahlen zu generieren. In diesem Beispiel werden 100 Zahlen zwischen 1000 und 9999 generiert. Ich muss aber 7 stellige Zahlen generieren können (1000000 bis 9999999).

Wo muss ich den den Code abändern? Hab schon alle 'Word' Deklarationen in 'Longword' geändert, aber es tut sich nichts, oder aber das Programm braucht zu lange für die Berechnung.

Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
const 
anzahl=100

var 
f:array[0..anzahl-1]of Word; 

function zufallszahlen(Minzahl,Maxzahl:word;GleicheErlaubt,Sortiert:boolean;Startwert:longword):boolean; 
var z,x:word; 
begin 
result:=false; 
if maxzahl > 65534 then begin 
showmessage('Der Maximalwert darf 65534 nicht übersteigen'); 
exit; 
end
if anzahl > ((maxzahl-minzahl) div 2
then begin 
showmessage('Anzahl ist für ordnungsgemäßes Arbeiten zu hoch'); 
exit; 
end
if startwert=0 then randomize else 
randseed:=startwert-2147483648
fillchar(f,sizeof(f),$FFFF); 
repeat 
z:=random(maxzahl - minzahl + 1) + minzahl; 
for x:=0 to anzahl-1 do begin 
if (f[x]=z)and(not GleicheErlaubt) then break; 
if (z < f[x])and sortiert then 
if (x < anzahl-1then begin 
move(f[x],f[x+1],sizeof(f[x]) * (anzahl-x)); 
f[x]:=z; 
break; 
end
if f[x]=$FFFF then begin 
f[x]:=z; 
break; 
end
end
until f[anzahl-1] < $FFFF
result:=true; 
end

procedure TForm1.Button1Click(Sender: TObject); 
var x:integer; 
begin 
if zufallszahlen(1000,9999,false,true,0)then begin 
memo1.clear; 
memo1.alignment:=taRightJustify; 
for x:=0 to anzahl-1 do memo1.lines.add(inttostr(f[x])); 
end
end;


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 13:10 
Blöde Frage ... aber von Random hast du noch nix gehört, oder ? :D

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Do 19.02.04 13:20 
Eine Zufallszahl zwischen 1000000 und 9999999 bekommst du einfach mit:
ausblenden Delphi-Quelltext
1:
Zufallszahl:=random(9000000)+1000000;					

vorher noch den Zufallsgenerator mit
ausblenden Delphi-Quelltext
1:
randomize;					

initialisieren

Was du an deinem Code ändern musst sag ich dir aus Protest nicht. Bitte formatiere ihn erst bevor du ihn postest. Am besten nimm dir ein Beispiel daran wie in Delphi (also von Borland selbst) eingerückt wird. So vergeht einem irgendwie gleich die Lust sich intensiver mit deinem Problem zu befassen. Vielleicht kuck ich wieder vorbei wenn er formatiert ist :D

Edit: Kleinen Fehler ausgebessert bevors jemandem auffällt :oops:

_________________
MfG Alex


Zuletzt bearbeitet von Alni am Do 19.02.04 16:45, insgesamt 1-mal bearbeitet
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 19.02.04 13:22 
MaxiTB hat folgendes geschrieben:
Blöde Frage ... aber von Random hast du noch nix gehört, oder ? :D

doch hat er. er hat es sogar eingebaut:
ausblenden Delphi-Quelltext
1:
z:=random(maxzahl - minzahl + 1) + minzahl;					


warum benutzt du eigendlich word und nicht interger (bereich ?2147483648..2147483647 )? wenn integer noch nicht reicht kannst du auch int64 ( bereich: ?2^63..2^63?1 ) nehmen.

longword hätte mit einem bereich von 0..4294967295 eigendlich auch gehen müssen :nixweiss:

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.02.04 13:31 
Hat er nicht, sonst würde er nicht fragen, den Code hat er nämlichnicht selber geschrieben, sonst wüsste er es. Und genau angekuckt hat er ihn sich auch nicht, dann hätte er es gesehen ohne dass er Ahnung von irgendwas haben müsste. :roll:

Frage: wo tauchen denn da die Zahlen 1000 und 9999 auf?
Tim.exe Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 19.02.04 14:15 
Och ne, nich er schon wieder...

Einige Oberschlaue vewechseln wohl ein 'Forum' das dazu da ist Fragen zu stellen um Antworten zu bekommen mit 'Ich bin der beste, ich kann alles und das muss ich auch jedem reindrücken.'

Habs übrigens kurz nach meinem Post u.a. mit "Longword" hinbekommen.

Trotzdem vielen Dank an alle normalen Antwortgeber.