![]() |
Lotto HILFE´!!!
Hallo liebe Delphi- Tüftler,
habe ein großes Problem. Wir schreiben morgen in Informatik eine Arbeit und wir müssen unnbedingt können, wie man ein Lottoprogramm programmiert. Dieses Lottoprogramm soll mit dem Datentyp Menge erreicht werden. also var lottozahl: set of byte; Die Ausgabe soll in einer Listbox erfolgen. Der Quellcode sollte möglichst einfach sein und ausschließen, dass eine Zahl zweimal erzeugt wird mit repeat ---- until not. wer kann einen solchen quellcode für einen button(lOTTOZAHLEN ERMITTELN) schreiben. Ich bin totale Anfängerin und damit vollkommen überfordert. Bitte helft mir Vielen Dank schon mal und baldige frohe Weihnacht :) Ciao Lisa |
Re: Lotto HILFE´!!!
Hier findest du einen Lottozahlengenerator!
Wenn du da nicht durchblickst kann ich dir helfen! ![]() Gruss MiniKeks |
Re: Lotto HILFE´!!!
Hi, lies Dir mal folgendes durch:
![]() Anschließend schreibe uns mal, wie weit Du von alleine kommst, wählen einen vernünftigen Titel und wir sind gerne bereit Dir zu helfen. ...:cat:... |
Re: Lotto HILFE´!!!
Hallo,
ich versuch das schon selber, aber das ist immer vollkommen unermutigend, wenn das dauenrnd nicht klappt. Also das hier hab ich schon mal, aber naja
Delphi-Quellcode:
Danke schon für eure Antworten
var
Form1: TForm1; lottozahl: set of byte; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i,y: integer; begin i:= 0; for i:= 1 to 6 DO Y:= random(49)+1; ListBox1.Items.Add(inttostr(y)); end; Lisa [edit=MrSpock]Delphi-Tags eingefügt. Mfg, MrSpock[/edit] |
Re: Lotto HILFE´!!!
Und was genau ist jetzt dein Problem?
Übrigens, wenns für ne Arbeit ist, wird dir ein fertiger Quelltext sowieso nichts nützen, wenn du ihn nicht verstehst. Du kannst ihn ja schlecht auswendig lernen. |
Re: Lotto HILFE´!!!
hallo
naja ist halt das Problem, dass wir n auswendig können müssen und ich komm schon ab da nicht mehr weiter. grüße lisa |
Re: Lotto HILFE´!!!
Ich frag mich grad warum ihr da ein Set of Byte benutzen sollt?
Ich glaube euer Lehrer meinte Array. |
Re: Lotto HILFE´!!!
Zitat:
|
Re: Lotto HILFE´!!!
Das ist ja, was ich meine, wenn du ihn verstehst, kannst du ihn problemlos nachbauen. Wenn du ihn auswendig lernst, wirst du garantiert Fehler einbauen.
Wenn du mitteilen würdest, an welcher Stelle du Probleme hast, könnte man auch versuchen dir zu helfen. |
Re: Lotto HILFE´!!!
Ach immer die Leute die sich nur wegen einer Arbeit in den nächsten Tag anmelden.... :thumb:
Erstmal mußt du sagen um was den für ein Lotto es sich denn handelt, imho gibt es da verschiedene Modi bzw. spielt hier sicher nur ne Minderheit Lotto und weiss deswegen wie ich nichts genaues drüber :-). Und wie schon gesagt wurde, was ist denn jetzt dein Problem? Wo kommen Fehlermedlung bzw. woch macht der Code nicht das was du erwartest? |
Re: Lotto HILFE´!!!
hallo
danke für eure antworten also ich hänge and der stelle mit until not und an dieser komischen menge und wenn ich den quellcode so durchlaufen lasse kommt nur eine zahl in der listbox. sorry, dass ich wahrscheinlich mich richtig unprofessionell anhöre, aber bin echt überfordert momentan- schulstress/abistress grüße lisa |
Re: Lotto HILFE´!!!
Zitat:
|
Re: Lotto HILFE´!!!
Fangen wir mal an:
for.. Do führt nur die nächste Anweisung in Schleife aus. Wenn du mehrere Anweisungen ausführen willst, musst du es in Begin..End kapseln
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,y: integer; begin i:= 0; // unnötig bei For-Schleifen for i:= 1 to 6 DO Y:= random(49)+1; // hier läuft dein Programm 6 mal lang ( für i von 1 - 6 ) ListBox1.Items.Add(inttostr(y));// erst anschliessend läuft dein Programm hierhin und schreibt das letzte y in die Box end;
Delphi-Quellcode:
So hätteste zumindest schonmal alle Zahlen in der Box. Allerdings benutzt du dein Set ja gar nicht und hast somit auch keine Prüfung auf doppelte Zahlen.
procedure TForm1.Button1Click(Sender: TObject);
var i,y: integer; begin for i:= 1 to 6 DO Begin Y:= random(49)+1; ListBox1.Items.Add(inttostr(y)); End; end; |
Re: Lotto HILFE´!!!
hallo,
schon mal vielen vielen Dank vor allem für die letzte Antwort, die hat mich schon mal sehr weitergebracht. Nur stellt sich jetzt noch die frage wie man das überprüfen kann (until not); dass man nicht zweimal die gleiche erzeugt. Vielen Dank nochmal und schöne baldige Weihnachten Viele Grüße Lisa |
Re: Lotto HILFE´!!!
Dafür ist wohl das Set gedacht.
Guck dir mal in der Delphi-Hilfe den Begriff ![]() |
Re: Lotto HILFE´!!!
oder schau einfach nach, ob die Zahl schon in der ListBox steht, also sowas der Art:
Delphi-Quellcode:
(ungetestet, da grad kein Delphi zu Hand)
repeat
Y:=random(49)+1; until ListBox1.Items.IndexOf(IntToStr(y))=-1; |
Re: Lotto HILFE´!!!
Hallo,
also erstmal klappt das jetzt, dass wenigstens 6 Zahlen in der Listbox erscheinen- dafür bin ich unendlich froh. Jetzt könnte man ja die for schleife in repeat until umändern. begin for i:= 1 to 6 DO repeat Y:= random(49)+1; ListBox1.Items.Add(inttostr(y)); until not lottozahl= y; end; Die rote zeile funktioniert ja nicht, aber so in der art glaube ich sollten wir das machen. Desweiteren haben wir noch aufgeschrieben verschiedene mengenoperationen, wie differenzmenge und so, aber weiß nicht ob das was damit zu tun hat. Vielen Dank euch allen nochmal Lisa |
Re: Lotto HILFE´!!!
hallo,
also wenn man das so versucht- klappts leider nicht--- unendlich viele zahlen in der listbox erscheinen dann. begin for i:= 1 to 6 DO repeat Y:= random(49)+1; ListBox1.Items.Add(inttostr(y)); until not ListBox1.Items.IndexOf(IntToStr(y))=-1; end; danke! grüße lisa |
Re: Lotto HILFE´!!!
1. Benutz für Quellcode bitte die [delphi] Tags ( oder den Button Delphi-Code ). Ist einfach lesbarer.
2. Ja, das geht mit den Mengen. Darum sag ich ja schau mal in der Hilfe nach. In sets kannst du mit + Werte hinzufügen mit - entfernen und mit <Wert> in <Set> kannst du abfragen, ob der Wert schon in der Menge ( der Lottozahlen ) enthalten ist |
Re: Lotto HILFE´!!!
Hallo Lisa,
erstmal verwende bitte die [ delphi] [ /delphi]-Tags (ohne Leerzeichen), dann kann man den Code auch vernuenftig lesen. Zum Problem: Der Code den du gepostet hast ist falsch. Du willst ja keine Zahl doppelt haben. Nachdem du kein Set benutzt, musst du es so machen wie Fiasko gesagt hat:
Delphi-Quellcode:
Nun die Erklaerungen:
for i:= 1 to 6 do
begin repeat Y:=random(49)+1; until ListBox1.Items.IndexOf(IntToStr(y))=-1; ListBox1.Items.Add(inttostr(y)); end; wir machen das Ganze 6 mal, wie bereits gehabt. Anstatt aber nun die Zahl zu suchen, und dann hinzuzufuegen, suchen wir nun bis dir Zahl nicht mehr in der ListBox ist. Dies erledigt der Befehl ListBox1.Items.IndexOf ( ![]() Greetz alcaeus |
Re: Lotto HILFE´!!!
Hallo,
Zitat:
Ich meinte das eher so:
Delphi-Quellcode:
[edit]
begin
for i:= 1 to 6 do begin // Solange Zahlen testen bis wir ein neue noch nicht in der Listbox stehende in Y haben repeat Y:= random(49)+1; until ListBox1.Items.IndexOf(IntToStr(y))=-1; ListBox1.Items.Add(inttostr(y)); end; end; Verdammt, wieder Bummelletzter :wall: [/edit] |
Re: Lotto HILFE´!!!
Hallo,
vielen Dank erstmal. Leider hat die Version nicht geklappt. Und mein grö0tes Problem ist dass es genau um die menge geht (Hauptbestandteil der Arbeit) Und die Lottozahlen müssen unabdingbar auch diese arbeitsweisen mit mengen besitzen. danke aber grüße lisa |
Re: Lotto HILFE´!!!
Hi Lisa,
in dem Fall solltest du dir mal die Hilfe zu Mengen ansehn. Ein Beispiel mit mengen:
Delphi-Quellcode:
Wichtig: Ich hab den Code nicht getestet, er sollte aber funktionieren.
var Menge: set of Byte;
i: Integer; begin Menge := []; //Menge initialisieren Randomize; //Zufallsgenerator initialisieren for i := 1 to 6 do repeat y := Random(49)+1; //Zahl generieren until y not in Menge; //Ueberpruefen ob Zahl schon in Menge Menge := Menge + [y]; //Zahl zu Menge hinzufuegen ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen end; end; Greetz alcaeus |
Re: Lotto HILFE´!!!
DANKE
also jetzt klappt das mit dem überprüfen anhand dem index. Nur ich muss leider mit den mengen arbeiten. Leider weiß ich überhaupt nichts mit dem until not anzufangen, obwohl das der Lehrer ausdrücklich betont hat. :cry: Aber vielen vielen dank Lisa |
Re: Lotto HILFE´!!!
:gruebel:
Das letzte Beispiel von alcaeus arbeitet doch mit Mengen und repeat. Im Grunde ist das schon deine Lösung. |
Re: Lotto HILFE´!!!
Code von alcaeus berichtigt ...
Delphi-Quellcode:
var
Menge: set of Byte; i,y: Integer; begin Menge := []; //Menge initialisieren Randomize; //Zufallsgenerator initialisieren for i := 1 to 6 do begin repeat y := Random(49)+1; //Zahl generieren until not (y in Menge); //Ueberpruefen ob Zahl schon in Menge Menge := Menge + [y]; //Zahl zu Menge hinzufuegen ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen end; end; |
Re: Lotto HILFE´!!!
Hallo
die Lösung von alcaeus ist total super und verständlich. Erstmal herzlichen Dank - nur in der Zeile mit dem until not tauchen folgende Fehler auf: [Fehler] Unit1.pas(41): Operator oder Semikolon fehlt [Fehler] Unit1.pas(41): Operator ist auf diesen Operandentyp nicht anwendbar Ich glaube ich schicke nochmal den ganzen quellcode- wie geht das mit dem delpgi tags vielen dank liebe delphi- Könner Lisa |
Re: Lotto HILFE´!!!
Ich weis nicht, aber man hätte ja auch suchen können.
![]() |
Re: Lotto HILFE´!!!
@ Bigg: "Keine Beiträge entsprechen Deinen Kriterien."
@ school - delphi: beim Beitrag erstellen oben den Button "Delphi-Code" drücken, Quelltext einfügen und nochmal den gleichen Button drücken |
Re: Lotto HILFE´!!!
Hallo
es klappt jetzt--- ihr seid echt super vielen herzlichen dank
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Menge: set of Byte; i,y: Integer; begin Menge := []; //Menge initialisieren Randomize; //Zufallsgenerator initialisieren for i := 1 to 6 do begin repeat y := Random(49)+1; //Zahl generieren until not (y in Menge); //Ueberpruefen ob Zahl schon in Menge Menge := Menge + [y]; //Zahl zu Menge hinzufuegen ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; |
Re: Lotto HILFE´!!!
Hallo,
Abschließend will ich mich nochmal bedanken. Ihr habt mir sehr weitergeholfen. Meine Fragen werden sich für Profis wahrscheinlich vollkommen unprofessionell anhören. Aber der ganze Stress, obwohl ich Delphi spannend finde und mich auch in meiner nächsten Freizeit mal ohne Schulzwänge so richtig damit befassen werde. Vielen Dank und baldige schöne Weihnachten!!!! Lisa |
Re: Lotto HILFE´!!!
eins noch:
man muss nur einmal randomize; machen, du machst es zweimal... :wink: |
Re: Lotto HILFE´!!!
Am effizientesten dürfte das sein:
Delphi-Quellcode:
In deinem Falle also:
type
TZahlen = array of Integer; procedure Lotto(var Sortiert,Gezogene: TZahlen; Ziehungen: Integer = 6; Elemente: Integer = 49); var I,J,K,N: Integer; begin Sortiert := nil; // stellt sicher das Sortiert <> Gezogene ist Gezogene := nil; if Ziehungen > Elemente then raise Exception.Create('Man kann nicht mehr Kugeln ziehen als in der Urne sind'); SetLength(Sortiert, Ziehungen); SetLength(Gezogene, Ziehungen); for I := 0 to Ziehungen -1 do begin K := 0; N := Random(Elemente - I) + 1; for J := 0 to I -1 do if N >= Sortiert[J] then begin Inc(N); Inc(K); end else Break; for J := I downto K +1 do Sortiert[J] := Sortiert[J -1]; Sortiert[K] := N; Gezogene[I] := N; end; end; procedure Test; procedure Print(const Title: String; const Zahlen: TZahlen); var I: Integer; begin Write(Title); for I := 0 to High(Zahlen) do Write(Zahlen[I]:4); WriteLn; end; var Sortiert,Gezogene: TZahlen; begin Lotto(Sortiert, Gezogene, 10, 10); Print('gezogene : ', Gezogene); Print('sortiert : ', Sortiert); WriteLn; end; Lotto(Sortiert, Gezogene, 60, 60); Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz