![]() |
Frage zu Lottozahlengenerator
Hallo Community,
Wir sollen einen Lottozahlengenerator in der Schule programmieren. Nun habe ich durch langes rumstöbern was gefunden...
Delphi-Quellcode:
Nur leider versteh ich so ziemlich gar nichts bei dem Code.
procedure TForm1.Button1Click(Sender: TObject);
begin for i:= 1 to 49 do Zahlen[i]:=false; for i:=1 to 6 do begin repeat z:=random(49)+1 until Zahlen[z] = false; Zahlen[z]:=true; end; Edit1.Text:=''; for i:=1 to 49 do if Zahlen[i] then memo1.Lines.add (Inttostr(i)); end; Kann mir den jemand verständlich erklären? So alles bisschen ausseinanderpflücken und dann vlt so immer 2 Zeilen zusammenfassen in verständliches "Normalodeutsch" ? :D Weitere Fragen: Gibt es eine Möglichkeit, dass ich die Zahlen nicht alle auf einmal in dem Memo ausgebe? Sondern vor Jede Zahl noch eine Zeile oder so einfügen kann, sowas wie: Zahl1: 23 Zahl2: 12 usw. Geht das? Und wenn ja, wie? mfg Siggy |
Re: Frage zu Lottozahlengenerator
Scheinbar bedeutet heute Programmieren suchen nach einer Copy&Paste-Lösung! :wall:
Überleg dir doch einfach die Vorgehensweise, wenn du das mit Blatt und Stift lösen müsstest und versuche dann die Lösung in Delphi umzusetzen! |
Re: Frage zu Lottozahlengenerator
Zahlen wird wohl ein Array[1..49] of Boolean sein. Die Indizes 1-49 stellen die Werte der deutschen Lottozahlen dar.
Als erstes werden alle Elemente des Arrays auf False gesetzt, was wohl einem 'nicht gezogen' entspricht. Anschließend werden 6 Zahlen in einer for-Schleife 'gezogen', in dem mittels einer repeat..unitl-Schleife solange ein Zufallswert zwischen 1 und 49 ermittelt wird, bis ein Index gefunden wird, dessen Element im Array auf False steht, um Doppelziehungen zu vermeiden. Dieser wird dann auf True gesetzt, also als 'gezogen' gekennzeichnet. Abschließend wird das komplette Array durchgerattert, und alle Indizes, deren Element True ist, in das Memo geschrieben. Meiner Meinug nach nicht optimal, aber da solltest Du Dir selber Gedanken machen. Zu Deiner Frage:
Delphi-Quellcode:
Edit: CopyPaste-Fehler korrigiert
var
iCounter: Integer; [...] iCounter := 1; for i := 1 to 49 do begin memo1.Lines.add (Format('Zahl %d: %d', [iCounter, i])); Inc(iCounter); end; |
Re: Frage zu Lottozahlengenerator
Ich hatte erst eine Lösung die auch funktioniert hat.
Die sah so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,f :integer; begin randomize; repeat a:= random (49); b:= random (49); c:= random (49); d:= random (49); e:= random (49); f:= random (49); until (a<>b) and (a<>c) and (a<>d) and (a<>e) and (a<>f) and (b<>c) and (b<>d) and (b<>e) and (b<>f) and (c<>d) and (c<>d) and (c<>f) and (d<>e) and (d<>f) and (e<>f); edit1.Text := inttostr (a); edit2.Text := inttostr (b); edit3.Text := inttostr (c); edit4.Text := inttostr (d); edit5.Text := inttostr (e); edit6.Text := inttostr (f); Die auch funktioniert hat... Allerdings ist die ja sehr unschön und ein ewig langer Text... Unser Lehrer hat gemeint, dass wir das mit Arrays lösen sollen, allerdings hab ich davon keine Ahnung und daher hab ich hier gefragt ob mir das jemand anhand meines Lottogenerators erklären könnte. Siggy |
Re: Frage zu Lottozahlengenerator
OK, hier mal die Erklärung:
Zitat:
Code:
//alle Elemente haben zu Beginn wohl einen zufälligen Wert
0111001101011001110011000010010000011010000111101 //nach der 1. Codezeile 0000000000000000000000000000000000000000000000000 //nach der 2. Schleife sind 6 zufällige Elemente auf true gesetzt 0010001000000100001100000000010000000000000000000 //in der letzten Schleife ergibt das dann folgende Lottozahlen 3 7 14 19 20 30 |
Re: Frage zu Lottozahlengenerator
Erst einmal vielen Dank für die superschnelle Hilfe :)
Nun habe ich so ziemlich alles verstanden, denke ich. Allerdings funktioniert eines nicht:
Delphi-Quellcode:
var
iCounter: Integer; [...] iCounter := 1; for i := 1 to 49 do begin memo1.Lines.add (Format('Zahl %d: %d', [IntToStr(iCounter),IntToStr(i)])); Inc(iCounter); end; Wenn ich das einfüge und das Programm starte und dann meinen Button anklicke kommt die Nachricht: "Format '%d' ungültig oder nicht kompatibel mit Argument." Liegt das vielleicht daran, dass ich Turbo Delphi habe? Wenn ja, gibt es eine andere Möglichkeit?:) mfg Siggy |
Re: Frage zu Lottozahlengenerator
Delphi-Quellcode:
probier mal das.
memo1.Lines.add (Format('Zahl %d: %d', [iCounter, IntToStri]));
//edit %d bedeutet, dass er eine dezimalzahl (integer) erwartet, und du wolltest ihm nen string geben. mochte er net. |
Re: Frage zu Lottozahlengenerator
Du könntest als Zähler natürlich auch einfach das i verwenden, das ohnehin schon da ist. :wink:
|
Re: Frage zu Lottozahlengenerator
Zitat:
Funktioniert genau so wenig ;) Naja zur Not muss ich halt auf die unschönere Variante zugreifen und jede Zahl in einem Extra Edit oder Label ausgeben. Funktioniert sowas eig auch mit Buchstaben? Ich denke da an sowas wie die DNA, sprich ein String einer bestimmten Länge (10000 oder mehr) nur mit den Buchstaben A,C,G und T (Adenin,Cytosin,Guanin und Thymin) Und der soll eine zufällige Reihenfolge erstellen: ACTGAAACTGGCTGCACTAAGTCA.... Wenn dies möglich wäre, würde ich mich sehr freuen wenn mir jemand dazu was sagen könnte :) |
Re: Frage zu Lottozahlengenerator
Also ich würds so machen wie die Lottofee. Du hast 49 Bälle mit Zahlen von 1 bis 49. Diese mischst du durch und ziehst die ersten 6. Also n array von 1..49 durchmischen und die ersten 6 elemente sind dann deine Lösung. Ich find das ist einfach zu verstehen und auch die Umsetzung ist nicht wirklich kompliziert...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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