Hi,
kann Pascal oder Delphi aus einer Menge (integer oder byte) mit dem
„random“ ein Zufallszahl ziehen?
Bei mir gibts eine Fehlermeldung. Vielleicht mache ich etwas falsch.
Hi,
kann Pascal oder Delphi aus einer Menge (integer oder byte) mit dem
„random“ ein Zufallszahl ziehen?
Bei mir gibts eine Fehlermeldung. Vielleicht mache ich etwas falsch.
kann Pascal oder Delphi aus einer Menge (integer oder byte)
mit dem
Ja.
Bei mir gibts eine Fehlermeldung. Vielleicht mache ich etwas
falsch.
Wie machst Du es denn? Welche Fehlermeldung?
Dass man Euch sowas immer aus der Nase ziehen muss …
Manfred
Hi.
Habe die Menge z deklariert und wollte über random daraus eine Zahl ziehen. Fehlermeldung lautet:
18 / 23 lotto4.pas Error: Incompatible type for arg no. 1: Got Set Of Byte, expected ULONG
Der Code unten ist komplett, also einfach mal als pas. Datei speichern und laufen lassen.
program Lotto;
uses crt;
var Zahl:array[1…6]of byte;
var n:byte;
var Z:set of 1…49;
var wahl:string;
label anfang,ende;
begin
anfang:
randomize;
Z:= [1…49];
clrscr;
for n:=1 to 6 do
begin
Zahl[n]:=random(Z)+1;
Z:=Z+[Zahl[n]];
write(Zahl[n]);
end;
gotoxy(3,7);
writeln('Nochmal? a ein ');
wahl:=readkey;
clrscr;
if (wahl=‚j‘) then goto anfang
else goto ende;
ende:
end.
Nochmal Hi,
Reinhard Kern hat Dir weiter unten schon die Antwort gegeben!
Das Problem bei der Sache ist, dass du eine gezogene Kugel nochmal ziehen könntest (dann ist das Element in der Menge leer). Das mußt du prüfen und solange weiterprobieren, bis du ein Element erwischst, was noch nicht gezogen wurde.
Statt Deinen goto’s solltest Du besser ordentliche Schleifen verwenden (Repeat oder While).
LG
Jochen
PS:
const
Anz = 6;
var
Urne: set of 1..49;
Wahl: array[1..Anz] of Byte;
i,Nr: integer;
vorhanden: boolean;
begin
Randomize;
Urne := [1..49];
for i := 1 to Anz do
begin
Repeat
Nr := Random(49)+1;
vorhanden := (Nr in Urne);
if vorhanden then
begin
Wahl[i] := Nr;
Urne := Urne - [Nr];
end;
until vorhanden;
end;
end;
HI
Reinhard Kern hat Dir weiter unten schon die Antwort gegeben!
Das ist nicht die Lösung die ich finden wollte. Wollte es genauso wie in der Realität abhandeln, dass ein mehrmaliges ziehen erst gar nicht möglich ist.
Die goto’s bzw. labels find da eigentlich sehr passend weil ich nen readln drin habe und das Programm erstmal auf eine Eingabe wartet.
Hallo,
dir ist aber bekannt, dass die Verwendung von Goto zu den übelsten Programmierstilen gehört, weil der Code dadurch sehr unübersichtlich wird?.Dein Programm ließe sich mit einer einfachen repeat-until-Schleife deutlich übersichtlicher schreiben.
Die goto’s bzw. labels find da eigentlich sehr passend
Mindestens dieser Teil ist absolut unpassend:
if (wahl='j') then goto anfang
else goto ende;
ende:
Da solltest Du vielleicht nochmal drüber nachdenken. Solche Dinge passieren, wenn man gotos verwendet.
Gruß, Niels
Hallo,
Das ist nicht die Lösung die ich finden wollte. Wollte es
genauso wie in der Realität abhandeln, dass ein mehrmaliges
ziehen erst gar nicht möglich ist.
Ein Modell mit einer simulierten „echten Urne“ habe ich Dir auch schon gezeigt: die verkettete Liste, wo man gezogene Einträge aus der Liste entfernen kann. Sowas geht IMHO nicht mit Mengen. Bei einer Menge mußt Du immer erst nachsehen, ob ein zufällig ausgewähltes Element (noch) in der Menge drin ist oder nicht (mehr).
Solltest Du wider mein Wissen dennoch eine Lösung dafür finden, lass es mich wissen - das interessiert mich auch.
Die goto’s bzw. labels find da eigentlich sehr passend weil
ich nen readln drin habe und das Programm erstmal auf eine
Eingabe wartet.
Nee, das ist nie passend. Das ist einfach kein guter Stil. Du kannst ja gerne auf eine Eingabe warten, aber eben innerhalb einer Schleife, die in abhängigkeit der Antwort ggf. abgebrochen wird:
repeat
# ziehe die Lottozahlen...
# gib sie aus...
writeLn("Nochmal (j/n)?");
readLn(Antwort);
until (Antwort "j");
LG
Jochen
Ja. Ich werde über das Verwenden von labels nachdenken. Wofür sind die dann überhaupt gut?
Bei Delphi kann man doch mehrere Units (werden die so genannt?) nutzen. In jeder steht ein bestimmter Teil des Programmes. Aber das wird mir zu kompliziert.
Hi Jo
Mit verketteten Einträgen habe ich noch nie gearbeitet… Find ich ziemlich kompliziert.
Solltest Du wider mein Wissen dennoch eine Lösung dafür
finden, lass es mich wissen - das interessiert mich auch.
Ich versuche es mal wie du sagst. Falls ich eine andere Lösung finde verkaufe ich sie an Microsoft oder IBM.
Nee, das ist nie passend. Das ist einfach kein guter Stil.
Jeder hackt immer auf den süßen Labels rum.