![]() |
in repeatschleife zum anfang der schleife springen
Hi,
Einfch Frage: Wie kann man in einer repeatschleife zum anfang der schleife springen, wenn man nciht will, das until erreicht wird... z.b.:
Delphi-Quellcode:
Ich hoffe ihr versteht was ich emine!!
repeat// <___________________
button1.Caption := '1'; // \ nummer := nummer +1; // | if nummer = nummer1 then// | //zum anfang springen _______/ until bla = bla2; DANKE |
Re: in repeatschleife zum anfang der schleife springen
ich verstehe den sinn nicht ganz!
was hast du denn vor? das die schleife noch einmal ausgeführt wird? |
Re: in repeatschleife zum anfang der schleife springen
Hallo!
Das sollte sich mit "continue;" machen lassen. MfG Peter |
Re: in repeatschleife zum anfang der schleife springen
Diese Go To's bzw. continues sind eigentlich ziemlich unsauber- finde ich zumindest (schlecht lesbar,...). Eigentlich kann man auch alles so lösen. Kann mich jetzt nur meinem Vorredner anschließen, was hast du vor?
|
Re: in repeatschleife zum anfang der schleife springen
und wie macht manndas wenns so is:?
Delphi-Quellcode:
repeat
... repeat ... //von hier zum ersten repeat until... until... |
Re: in repeatschleife zum anfang der schleife springen
wieso?
wenn die Bedingung der inneren Schleife erfüllt ist dann fängst du doch in der äußeren wieder oben an! Du mußt doch nur die Bedingungen richtig definieren! Oder was verstehe ich falsch :?: |
Re: in repeatschleife zum anfang der schleife springen
Delphi-Quellcode:
hier der code.. guckt mal durch
repeat
maxiEng := FormVocsEng.TableEng.RecordCount; inc(maxiEngCount); if maxiEngCount = maxiEng then if MessageDlg('Anzahl der abzufragenden Vokabeln nicht erreicht,'+#10#13+ 'weil nicht genügend Vokabeln verfügbar sind.',mtInformation,[mbOK],0) = mrOK then begin //kommt noch end; FormVocsEng.TableEng.first; maxiEng := FormVocsEng.TableEng.RecordCount; randomize; zufallszahl := random(maxiEng); repeat FormVocsEng.TableEng.next; inc(SollZahl); until SollZahl = zufallszahl; DataSet[datenumber] := FormVocsEng.TableEng.FieldByName('Englisch').AsString; repeat dec(dateproof); if DataSet[dateproof] = DataSet[datenumber] then //wenn dateproof = datenumber dann repeat von vorne until dateproof = 0; until dateproof = 0; end; es soll dannn zum erste repeat gesprungen werden |
Re: in repeatschleife zum anfang der schleife springen
Zitat:
Delphi-Quellcode:
dann wird die schleife beendet und du fängst in der anderen wieder an.
repeat
dec(dateproof); until(DataSet[dateproof] = DataSet[datenumber]); |
Re: in repeatschleife zum anfang der schleife springen
Zitat:
--------------- ich benutze sprünge auch manchmal, wenns nämlich so kompliziert in der schleife werden würde, dass man nicht mehr durchsieht, und der Algorithmus dadurch unleserlich werden sollte. Das wichtigste ist immer noch das Verstehen des Textes durch den MEnschen, nicht ob nun Sprünge nicht schön oder unsauber sein sollen, meine Meinung :-) also der befehl continue springt zum ende der schleife. in der repeat schleife hätte das sicherlich Deinen Sinn den Du willst. in einer For Schleife bewirkt continue dass er halt zum ende springt und mit dem nächsten "i" weitermacht. break springt zum Ende der gesamten schleife und beendet diese komplet. Exit springt zum ende der ganze Procedure :-) manuelle sprungmarken: Procedure test; var i : integer; label Sprungmarke; begin repealt Sprunmarke: a := a +b; if a = 10 then goto sprungmarke; until sonstwas; Gruß |
Re: in repeatschleife zum anfang der schleife springen
irgend wie funktioniert das nich mit dem goto...
jannst du mir mal die genauen befehle sagen? |
Re: in repeatschleife zum anfang der schleife springen
Zitat:
den rechtschreibfehler hast Du gesehen von mir oder ? es fehlt ein "g" und label sprungmarke; muss immer zuletzt in den variablen deklariert sein repeat sprungmarke: if a = 1 then goto sprungmarke; until sonstwas |
Re: in repeatschleife zum anfang der schleife springen
Zitat:
hier eine selbstgemachte Endlosschleife. Er kommt nie bis zur zeile a := 1;
Code:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer; a : integer; label sprungmarke; begin a := 0; repeat sprungmarke: a := a + 2; caption := inttostr(a); goto sprungmarke; a := 1; caption := inttostr(a); until a = 1; end; |
Re: in repeatschleife zum anfang der schleife springen
Delphi-Quellcode:
So..
procedure TMain.OKClick(Sender: TObject);
label beginning; begin .... .... .... beginning://<_____ ...hier repeat// \ ...// | goto beginning;//_/ Von hier nach... until ... ... ... |
Re: in repeatschleife zum anfang der schleife springen
@PhöniX
bist du sicher das es keine andere Möglichkeit gibt dein problem zu lösen! Mit solchen sprungen quer durch dein programm ziehst du dir nur irgendwelche fehler rein und dein programm ist dann unsauber programmiert! es gibt bestimmt einen eleganteren weg! |
Re: in repeatschleife zum anfang der schleife springen
EIN sprung... :x :x :x
|
Re: in repeatschleife zum anfang der schleife springen
Hi Phönix,
ich würde Dir raten, mach es ganz anders. Ich benutez manchmal (wenn es zu komplex wird) auch "Statusvariablen" var raus : boolean; check1, check2 : boolean; raus := false; ... repeat if a= 4 then check1 := true; if a < 8 then check2 := false; if sonstwas and check1 then raus := true; until raus; Dir wird schon was einfallen :-) |
Re: in repeatschleife zum anfang der schleife springen
habs nun schon..egal..thema geklärt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz