AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Unterschied zw. Repeat Until u. While do
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zw. Repeat Until u. While do

Offene Frage von "Chrissi91"
Ein Thema von Chrissi91 · begonnen am 3. Nov 2007 · letzter Beitrag vom 12. Nov 2007
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Unterschied zw. Repeat Until u. While do

  Alt 4. Nov 2007, 20:04
Und wo sind denn nun deine Werte den Variabeln zugewiesen?

Zitat:
Hab wohl wieder mal diese saftigen, roten Dinger auf den Augen... aber in deinem Beispiel sind doch beide Schleifen in der Ausgabe äquivalent (= beide liefern einen gültigen Punkt...)
Das ist mir schon klar, nur benötigt man bei der variante mit while eine zusätzliche variable
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#22

Re: Unterschied zw. Repeat Until u. While do

  Alt 4. Nov 2007, 21:31
Zitat:
und siehe da, diese sind fast identisch...
Sie sind nicht im geringsten identisch. Das was du machst ist zu sagen:
rot ist blauer als grün, und behauptest das dies fast identisch zu meiner Aussage wäre die da lautete, wenn es 10 Uhr ist fülle meinen Tasse mit neuem Kaffee

Kurz gesagt: deine Beispiele machen nicht mehr das was die Ausgangsbeispiele als Zielsetzung machten. Baue deine Beispiele jetzt mal so um das sie auch die beiden Koordinaten wieder füllen, denn diese werden ja im späteren Verlauf benötigt.

Delphi-Quellcode:
var
  X,Y: Integer;
begin
  X := Random;
  Y := Random;
  while not ValidCoords(X, Y) do
  begin
    X := Random;
    Y := Random;
  end;
  SetPixel(X, Y);

// statt richtiger als Fußschleife

  repeat
    X := Random;
    Y := Random;
  until ValidCoords(X, Y);

  SetPixel(X, Y);
end;
Wichtig ist auch die Abfrage die in der Kopfschleife notwendig wird. Es ist eine Verneinung mit NOT. Jede zusätzliche Anwesiung im Sourcecode die unnötig ist um ein Problem zu lösen zeichnet einen schlechten Source aus.

Gruß Hagen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#23

Re: Unterschied zw. Repeat Until u. While do

  Alt 11. Nov 2007, 05:33
Ist zwar schon paar Tage her, aber ich antworte mal.

Zitat von Tom:
Das Beispiel hingt ein wenig. Da s durchaus beim 1. Durchlauf leer sein kann (''), ist eine While-Schleife sinnvoller.
Zitat von grenzgaenger:
@popov, für dein beispiel wäre allerdings eine kopfgesteuerte schleife sinnvoller... da im verlauf, deine routinen auf auf daten zugreifen möchten welche es ggf. nicht gibt... ;-
Wie es scheint wurde das Beispiel nicht verstanden. Vielleicht hätte ich schreiben sollen was ich meine und vor allem auf was ich hinauswill.

Das ist ja gerade der Sinn des Beispiels, daß es mal keine Daten geben kann. Der Sinn ist nicht der Code innerhalb der ersten IF Abfrage, sondern die zweite IF Abfrage. Der Code in der Schleife wird ausgeführt. Sind Daten da, werden die Daten ausgewertet, sind keine Daten da, gibt es eine Meldung, daß keine Daten da sind. Um die Meldung geht es.

Mit der While-Schleife wäre der Code nicht kürzer, aber ich müßte dann außerhalb der Schleife überprüfen ob Daten da sind und die Meldung geben. Bei repeat geht man dagegen erst rein und überprüft es innerhalb der Schleife. Somit habe ich mit repeat nur einen logischen Block. Bei While wären es zwei Blöcke, ein While-Block und ein zweiter Block der überprüft ob Daten da sind und wenn nicht, eine Meldung gibt.

Es ging um die Meldung.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.852 Beiträge
 
Delphi 11 Alexandria
 
#24

Re: Unterschied zw. Repeat Until u. While do

  Alt 11. Nov 2007, 11:14
Aber dieses Beispiel verwirrt einen Anfänger sehr, da das Beispiel eigentlich klar eine While-Schleife indiziert, aber eine Nebenebedingung dann zu Repeat führt.
Obwohl es auch bei der Repaet-Lösung sinnvoll wäre das vorher abzuprüfen.
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#25

Re: Unterschied zw. Repeat Until u. While do

  Alt 11. Nov 2007, 16:03
Zitat von mkinzler:
Aber dieses Beispiel verwirrt einen Anfänger sehr,
Mag sein, aber komm man mit einem sinnvollen Beispiel, wenn in der Praxis von den While/Repeat Schleifen 90% While Schleifen sind.

Obwohl es auch bei der Repaet-Lösung sinnvoll wäre das vorher abzuprüfen. Also da bin ich einer anderen Meinung. Welchen Sinn hätte Repeat dann? Der ist ja der, daß die Schleife mindestens einmal ausgeführt wird.

EDIT: CENTER Tags (Fehler) gegen QUOTE Tags getauscht.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#26

Re: Unterschied zw. Repeat Until u. While do

  Alt 11. Nov 2007, 16:12
sinnvolles beispiel für repeat

Delphi-Quellcode:
programmende := false;
 repeat
  run;
 until programmende;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.852 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: Unterschied zw. Repeat Until u. While do

  Alt 11. Nov 2007, 16:18
Zitat:
Also da bin ich einer anderen Meinung. Welchen Sinn hätte Repeat dann? Der ist ja der, daß die Schleife mindestens einmal ausgeführt wird.
Aber der meißte Code der Schleife ist auch in diesem Fall unnötig.
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#28

Re: Unterschied zw. Repeat Until u. While do

  Alt 12. Nov 2007, 00:05
Dann programmiere du ein Beispiel. Er soll eine Zeile in einzelne Wörter zerlegen und wenn Zeile leer ist melden, daß Zeile leer ist.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#29

Re: Unterschied zw. Repeat Until u. While do

  Alt 12. Nov 2007, 07:34
Mal sehen, ob ich das gut erklären kann. Erstmal ein Beispiel für eine sinnvolle While-Schleife:

Wir suchen in einem String nach einem Zeichen und brechen beim ersten Auftreten ab. Wir erlauben kein Break und kein Goto. Das der String auch leer sein kann, ist eine While-Schleife sinnvoll, damit es zu keiner AV kommt:
Delphi-Quellcode:
Var
  bFound : Boolean;
  i : Integer;

Begin
  i := 0;
  bFound := False;
  While (i < Length (MyString)) and not bFound Do
    If MyString[i] = C Then
      bFound := True
    Else
      Inc (i);
...
Ich kann das natürlich auch mit einer Repeat-Schleife machen, müsste aber vorher abfragen, ob der String nicht leer ist.

Allgemein gilt:
While <Bedingung> Do <Befehle> Ist äquivalent zu
Delphi-Quellcode:
If <Bedingung> Then
  Repeat <Befehle> Until Not <Bedingung>
While-Schleifen kommen in der freien Wildbahn öfter vor, u.a. auch deshalb, weil alle For-Schleifen eigentlich While-Schleifen sind.

Weiterhin muss ich bei einer While-Schleife die Schleifeninvarianten initialisieren, also sieht eine While-Schleife eigentlich immer (explizit oder implizit) so aus:
Delphi-Quellcode:
<Initialisierung der Invarianten>
While <Bedingung> Do
  <Befehle, die die Bedingung verändern können>
Bei einer Repeat-Until-Schleife ist das unnötig, da die <Befehle> selbst die Schleifenbedingung erst herbeiführen.

Somit ist auch der Einsatzort geklärt. Nur wenn es nichts zu initialisieren gibt (schönes Beispiel: Finde geeignete Koordinaten), verwendet man eine Repeat-Schleife.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz