![]() |
Lotto
hallo !
Ich habe ein Programm bekommen und kann mir ein paar zeilen nicht selbst erklären,könntet ihr mir villeicht helfen?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; ziehen: TButton; ListBox1: TListBox; procedure ziehenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.ziehenClick(Sender: TObject); var i,j,Zahl:integer; gezogen:boolean ; lotto:array[1..6] of Integer ; begin for i:=1 to 6 do begin listbox1.Clear; repeat gezogen:=false; <----? zahl:=random(49)+1; for j:=1 to i-1 do if lotto[j]=Zahl then gezogen:=true; <----? until gezogen=false; <----? lotto[i]:=Zahl; end; <---- wieso muss da jetzt schon ein end hin? for i:=1 to 6 do listbox1.items.add(inttostr(lotto[i])); end; end. Danke Nicole [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Lotto
Moin Moin!
Zuallererst wäre es schön, wenn du deinen Beitrag editierst und den Quellcode in Delphi-Tags setzt. Dazu schreibst du einfach vor den Quellcode [ delphi] und danach [ /delphi] (ohne Leerzeichen) Zitat:
//Edit: Ah OK, da haben wirs ja ;) Ich formatiere gleich mal den Quellcode so, daß es etwas übersichtlicher wird
Delphi-Quellcode:
Hier handelt es sich um eine "Repeat-Until-Schleife". Die Anweisungen innerhalb Repeat und Until werden also solange ausgeführt (mindestens 1 mal), bis die Abbruchbedingung bei Until erfüllt ist.begin for i:=1 to 6 do begin listbox1.Clear; repeat gezogen:=false; <----? zahl:=random(49)+1; for j:=1 to i-1 do if lotto[j]=Zahl then gezogen:=true; <----? until gezogen=false; <----? lotto[i]:=Zahl; end; <---- wieso muss da jetzt schon ein end hin? for i:=1 to 6 do listbox1.items.add(inttostr(lotto[i])); end; In Zeile 5 wird eine boolesche Variable auf false gesetzt, was meiner Meinung nach auch einmal außerhalb der Schleife geschehen könnte. Zeile 9 widerrum setzt die gleiche Variable auf true. Das heißt in diesem Fall einfach nur, daß die Repeat-Until-Schleife bei Erreichen von Until verlassen werden kann. Und Zeile 10 gibt eben die Abbruchbedingung der Schleife an. Das End in Zeile 12 muß eben da stehen, weil es die Anweisungen der For-Schleife aus Zeile 2 abschließt. Genaugenommen hätte man sich hier die 2. For-Schleife sparen können und direkt in der oberen Schleife schon in die ListBox schreiben können. //Edit: :lol: Was isn heute los? Ich gebe Delphi-Tags ein, es werden aber Pre-Tags geschrieben, und editieren läßt sich das auch nicht :lol: @MrKnogge: Die waren am Anfang noch nicht da :zwinker: //Edit: So, jetzt geb ichs endgültig auf, die Delphi-Tags mögen mich heute nich :lol: [edit=alcaeus]Delphi-Tags korrigiert ;) Mfg, alcaeus[/edit] |
Re: Lotto
Die bei denen sie Fragezeichen dazu gemacht hat.
Delphi-Quellcode:
gruss
procedure TForm1.ziehenClick(Sender: TObject);
var i, j, Zahl: integer; gezogen: boolean; lotto: array[1..6] of Integer ; begin for i:=1 to 6 do begin listbox1.Clear; repeat gezogen := false; // anfangs setzen wir gezogen auf false; zahl := random(49) + 1; for j := 1 to i-1 do if lotto[j] = Zahl then gezogen := true; // sollte die zahl allerdings schonmal gezogen worden sein, so setzen wir gezogen auf true until gezogen = false; // da beim Lotto jede Zahl nur einmal gezogen werden kann, ziehen wir solange eine Zahl, bis wir eine haben die noch nicht gezogen wurde lotto[i] := Zahl; end; // dieses end gehört zum beginn der for schleife for i:=1 to 6 do listbox1.items.add(inttostr(lotto[i])); end; end. |
Re: Lotto
Delphi-Quellcode:
Dein Code ist ja grauenhaft formatiert. Wundert mich nicht, dass man den nicht so schön lesen kann. Vor allem wenn man noch nicht mit Delphi/Pascal vertraut ist. Vermutlich siehst Du jetzt schon viel mehr.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; ziehen: TButton; ListBox1: TListBox; procedure ziehenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.ziehenClick(Sender: TObject); var i, j, Zahl: integer; gezogen: boolean; lotto: array[1..6] of Integer; begin for i := 1 to 6 do begin listbox1.Clear; repeat gezogen := false; < - - - -? (a) zahl := random(49) + 1; for j := 1 to i - 1 do if lotto[j] = Zahl then gezogen := true; < - - - -? (b) until gezogen = false; < - - - -? (c) lotto[i] := Zahl; end; < - - - -wieso muss da jetzt schon ein end hin? (d) for i := 1 to 6 do listbox1.items.add(inttostr(lotto[i])); end; end. (a) Der Variable gezogen wird false zugewiesen. (b) Der Variable gezoegn wird true zugewiesen (c) Die REPEAT ... UNTIL Schleife wird solange ausgeführt bis gezogen den Wert false hat, jedoch mindestens 1 mal (d) Weil hier die for schleife endet |
Re: Lotto
DANKESCHÖN
|
Re: Lotto
hab noch eine frage
for j:=1 to i-1 do is das dazu da ,dass die Zahlen geprüft werden,die es noch nicht gibt?? |
Re: Lotto
In dieser Schleife gehst du alle bereits gezogenen Zahlen (die liegen ja im Array lotto) durch und prüfst, ob eine davon mit deiner gerade gezogenen übereinstimmt. Ist das der Fall, wird die Repeat-Until-Schleife nicht verlassen und eine neue Zahl gezogen, usw.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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