Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi in repeatschleife zum anfang der schleife springen (https://www.delphipraxis.net/16113-repeatschleife-zum-anfang-der-schleife-springen.html)

PhöniX 10. Feb 2004 16:19


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:
repeat// <___________________
button1.Caption := '1'; //   \
nummer := nummer +1;   //   |
if nummer = nummer1 then//   |
//zum anfang springen _______/
until bla = bla2;
Ich hoffe ihr versteht was ich emine!!
DANKE

MikeS 10. Feb 2004 16:21

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?

Christian S. 10. Feb 2004 16:27

Re: in repeatschleife zum anfang der schleife springen
 
Hallo!

Das sollte sich mit "continue;" machen lassen.

MfG
Peter

Tpercon 10. Feb 2004 16:29

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?

PhöniX 10. Feb 2004 16:32

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...

MikeS 10. Feb 2004 16:34

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 :?:

PhöniX 10. Feb 2004 16:39

Re: in repeatschleife zum anfang der schleife springen
 
Delphi-Quellcode:
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;
hier der code.. guckt mal durch
es soll dannn zum erste repeat gesprungen werden

MikeS 10. Feb 2004 16:42

Re: in repeatschleife zum anfang der schleife springen
 
Zitat:

repeat
dec(dateproof);
if DataSet[dateproof] = DataSet[datenumber] then
//wenn dateproof = datenumber dann repeat von vorne
until dateproof = 0;
versuche es doch mal so

Delphi-Quellcode:
repeat
  dec(dateproof);
until(DataSet[dateproof] = DataSet[datenumber]);
dann wird die schleife beendet und du fängst in der anderen wieder an.

stoxx 10. Feb 2004 16:47

Re: in repeatschleife zum anfang der schleife springen
 
Zitat:

Zitat von PhöniX
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:
repeat// <___________________
button1.Caption := '1'; //   \
nummer := nummer +1;   //   |
if nummer = nummer1 then//   |
//zum anfang springen _______/
until bla = bla2;
Ich hoffe ihr versteht was ich emine!!
DANKE


---------------

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ß

PhöniX 10. Feb 2004 17:40

Re: in repeatschleife zum anfang der schleife springen
 
irgend wie funktioniert das nich mit dem goto...
jannst du mir mal die genauen befehle sagen?

stoxx 10. Feb 2004 17:48

Re: in repeatschleife zum anfang der schleife springen
 
Zitat:

Zitat von PhöniX
irgend wie funktioniert das nich mit dem goto...
jannst du mir mal die genauen befehle sagen?

ja, wenn Du mir noch genaus sagst, was nich geht ?
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

stoxx 10. Feb 2004 17:53

Re: in repeatschleife zum anfang der schleife springen
 
Zitat:

Zitat von PhöniX
irgend wie funktioniert das nich mit dem goto...
jannst du mir mal die genauen befehle sagen?


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;

PhöniX 10. Feb 2004 17:54

Re: in repeatschleife zum anfang der schleife springen
 
Delphi-Quellcode:
procedure TMain.OKClick(Sender: TObject);
label beginning;
begin
....
....
....
beginning://<_____   ...hier
repeat//          \
...//             |
goto beginning;//_/  Von hier nach...
until ...
...
...
So..

MikeS 10. Feb 2004 18:03

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!

PhöniX 10. Feb 2004 18:06

Re: in repeatschleife zum anfang der schleife springen
 
EIN sprung... :x :x :x

stoxx 10. Feb 2004 18:10

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 :-)

PhöniX 10. Feb 2004 18:14

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