Archiv verlassen und diese Seite im Standarddesign anzeigen : prob.. dringend .. plz help
also.. mein opa(^^) wollte von mir ein programm welches aus den ersten 70 zahlen zufällig zahlen herausnimmt und diese ausgibt..
soweit so gut
aber nun meinte er das keine zahl doppelt vor kommen soll.. un nu steh ich vor einem prob... wie bekomm ich das da rein.. ich hab das proggiebzw den code ma angehängt könnteer ma guggn was ich da gemacht ha^...
achja e brauchgt das für diese komische neue lotto^^
Program LOTTO;
Uses WinCrt;
Var Anzahl, i, Zufall,Ausgabe, count : Integer;
c : char;
Begin
Repeat
clrscr;
WriteLn(' ___________________');
WriteLn(' --== Zufallszahlen ==--');
WriteLn(' ^ ^^^^^^^^^^^^^^^^^^^ ^');
WriteLn;
WriteLn;
WriteLn('Bitte geben sie die Anzahl an Zufallszahlen ein :');
Read(Anzahl);
WriteLn;
WriteLn('Ihre Zufallszahlen lauten:');
For i:=1 to Anzahl Do
Begin
Zufall :=random(69);
Zufall :=Zufall+1;
Write(Zufall,', ');
End;
WriteLn;
WriteLn;
WriteLn('Zum erneut starten ENTER drücken');
ReadLn(c);
Until c='n'
End.
ich hoffe ich hab das geshceit erklärt und ihr könnt mir shcnell helfen..
Ich würde sagen, du mußt dir die erzeugten Zahlen in einem Array merken. Jedesmal, wenn du eine Zufallszahl erzeugt hast, schaust du nach, ob sie bereits in deinem Array vorkommt. Wenn ja, dann das ganze nochmal, wenn nein kannst du sie ausgeben und ins Array legen.
aha.. un wie genau??
bin vollkommener nub..naja fast
Noch besser ist, du merkst dir das Ganze in einer dymamischen Liste, da du ja vorher nie weisst, wie groß dein Array tatsächlich werden muss. Stichwort: Pointer (^).
Er weiß, wie groß das Array sein muß:
WriteLn('Bitte geben sie die Anzahl an Zufallszahlen ein :');
Aber doch wohl erst zur Laufzeit !!!
Felix Kaiser
13.02.2004, 00:53
Du kannst auch einen Array durchnummiert belegen, mit Zahlen 0..69. Dann vertauschst du dort zufällig oft je zwei Einträge und nimmst dann einfach die ersten-N Zahlen heraus. Geht auch. ;)
Diogenes
13.02.2004, 13:52
Und noch eine Möglichkeit: Die von m ir so heiß geliebten sets:
type
TLottoSet = [1 .. 70];
const
stLotto : TLottoSet = [];
...
{Wir sind ab hier in einem Ausführungsteil}
Randomize;
...
function LottoZahl: Byte;
var
bLotto: Byte;
begin
repeat
bLotto: Random( 70) + 1;
until not (bLotto in stLotto);
Include( stLotto, bLotto);
LottoZahl := bLotto
end;
Achtung: Wenn stLotto gleich [1 .. 70] ist, gerät diese Funktion in eine Endlosschleife!
Für die Leute, die's interessiert: stLotto braucht 9 Byte ... ist ja schließlich ein gepacktes Bit-array, also einem packed array [1 .. 70] of Boolean entsprechend.
Alle Klarheiten beseitigt?
tschuldigung.. aber ich versteh nur bahnhof..
un wo muss ich den code einbauen @ diogenes?
Diogenes
16.02.2004, 15:54
So
program Lotto;
uses WinCRT; {Wir nehmen damit den Bildschirmemulator. Soll das
Programm unter DOS laufen, diese Zeile mitsamt
diesem Kommentar entfernen.}
const
MaxZahl = 45; {Da ich Österreicher bin. Bitte nach Bedarf ändern.
Muß größer als 1 aber kleiner als 256 sein!}
type
TLottoSet = set of 1 .. MaxZahl; {Dieser Typ ist eine Menge der
natürlichen Zahlen von 1 bis MaxZahl}
var
stLotto: TLottoSet; {Hier wird verwaltet, welche Zahlen schon
ausgesucht wurden. Eine Zahl, die mit
Include eingefügt wurde, wurde schon gewählt.}
bAnzahlZahlen: Byte; {Hier legen wir die Zahl der
auszusuchenden Lottozahlen fest.}
bZaehler: Byte; {Hier zählen wir schlicht}
function LottoZahl: Byte;
var
bLotto: Byte; {Zwischenspeicher für die ausgesuchte
Lottozahl.}
begin
repeat
bLotto := Random( MaxZahl) + 1; {Lottozahl festlegen.}
until not (bLotto in stLotto); {Weitertun, bis die ausgesuchte
Lottozahl sich nicht bei den
schon ermittelten befindet.}
Include( stLotto, bLotto); {Die ermittelte Zahl zu den schon
ausgesuchten geben.}
LottoZahl := bLotto {Dem aufrufenden Code übergeben.}
end;
begin
Randomize;
WriteLn( 'Lottozahlen'); {Titelzeile drucken.}
WriteLn( 'Anzahl der Lottozahlen eingeben.');
WriteLn( 'Alles, was nicht von 1 bis ', MaxZahl, ' geht, bewirkt Abbruch.');
ReadLn( bAnzahlZahlen);
WriteLn( 'Und hier die Lottozahlen');
if bAnzahlZahlen in [1 .. MaxZahl]
then begin
stLotto := []; {Wir sagen jetzt: "Nix ausgesucht jetzt"}
for bZaehler := 1 to bAnzahlZahlen do
WriteLn( LottoZahl) {Lottozahl ermitteln und ausgeben.}
end
end.
kk soweit sogut..
wenn ich das nu einfüg un compilen will kommtn fehler...
program Lotto;
uses WinCRT; {Wir nehmen damit den Bildschirmemulator. Soll das
Programm unter DOS laufen, diese Zeile mitsamt
diesem Kommentar entfernen.}
const
MaxZahl = 45; {Da ich Österreicher bin. Bitte nach Bedarf ändern.
Muß größer als 1 aber kleiner als 256 sein!}
type
TLottoSet = set of 1 .. MaxZahl; {Dieser Typ ist eine Menge der
natürlichen Zahlen von 1 bis MaxZahl}
var
stLotto: TLottoSet; {Hier wird verwaltet, welche Zahlen schon
ausgesucht wurden. Eine Zahl, die mit
Include eingefügt wurde, wurde schon gewählt.}
bAnzahlZahlen: Byte; {Hier legen wir die Zahl der
auszusuchenden Lottozahlen fest.}
bZaehler: Byte; {Hier zählen wir schlicht}
function LottoZahl: Byte;
var
bLotto: Byte; {Zwischenspeicher für die ausgesuchte
Lottozahl.}
begin
repeat
bLotto := Random( MaxZahl) + 1; {Lottozahl festlegen.}
until not (bLotto in stLotto); {Weitertun, bis die ausgesuchte
Lottozahl sich nicht bei den
schon ermittelten befindet.}
include( stLotto, bLotto); {Die ermittelte Zahl zu den schon
ausgesuchten geben.}
LottoZahl := bLotto {Dem aufrufenden Code übergeben.}
end;
begin
Randomize;
WriteLn( 'Lottozahlen'); {Titelzeile drucken.}
WriteLn( 'Anzahl der Lottozahlen eingeben.');
WriteLn( 'Alles, was nicht von 1 bis ', MaxZahl, ' geht, bewirkt Abbruch.');
ReadLn( bAnzahlZahlen);
WriteLn( 'Und hier die Lottozahlen');
if bAnzahlZahlen in [1 .. MaxZahl]
then begin
stLotto := []; {Wir sagen jetzt: "Nix ausgesucht jetzt"}
for bZaehler := 1 to bAnzahlZahlen do
WriteLn( LottoZahl) {Lottozahl ermitteln und ausgeben.}
end
end.
hab tp für windows..
Diogenes
16.02.2004, 18:17
Und welcher Fehler kommt?
So kann man nicht weiterhelfen
oj ja sry..
unknown identifier
Diogenes
18.02.2004, 14:04
Versuche, das
Include ( stLotto, bLotto);
durch
stLotto := stLotto + [bLotto];
zu ersetzen. Das ist Wirth-Standard und sollte immer gehen. Probier' Dein Glück!
ya nice so funzts :D :D
thx a lot @ alle
Diogenes
22.02.2004, 17:43
@pHoBo: Ein kleiner Tip noch: Wenn Du draufkommst, warum das geht, hast Du wieder einen Schritt zum guten Programmierer getan! Der witz beim Lernen ist immer noch Selbst Draufkommen
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.