Autor Beitrag
Anna95
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.01.12 16:09 
Hallo zusammen,
ich muss zu morgen eine Aufgabe für Info lösen und komme überhaupt nicht weiter und finde nichts im Internet:

Zeigen sie, dass man jede Wiederhol-Schleife(repeat until) durch eine äquivalente Solange-Schleife(while do) ersetzen kann. Schreiben sie einen Algorithmus(kein Programm). Überlegen sie, ob es umgekehrt auch geht. Treffen sie eine Aussage!

Könnt ihr mir vielleicht helfen?wäre lieb.


Moderiert von user profile iconChristian S.: Topic aus Neue Einträge / Hinweise / etc. verschoben am Di 17.01.2012 um 17:36
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.01.12 16:18 
Hallo und willkommen. :welcome:

Hast Du Dir schon mal überlegt, in was sich die beiden Schleifenformen unterscheiden? Ich denke, da solltest Du anfangen (man spricht von kopfgesteuerten Schleifen und fußgesteuerten Schleifen).
Nun kannst Du überlegen, ob und wie man die Schleifen untereinander austauschen kann.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Anna95 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.01.12 16:43 
Natürlich weiß ich, wie man die beiden Schleifen unterscheidet. Bei der repeat until schleife wird die Schleife mind. einmal durchlaufen. Bei der while do schleife nicht unbedingt.
Aber das ist ja gerade der Unterschied. Deswegen verstehe ich nicht, wie man das ersetzen kann.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.01.12 16:50 
Zitat:
Bei der repeat until schleife wird die Schleife mind. einmal durchlaufen. Bei der while do schleife nicht unbedingt.

Naja, damit hast Du ja schon die Antwort (fast) gefunden, Du hast es nur noch nicht gemerkt. :wink:
Die Fußgesteuerte Schleife wird min. 1x durchlaufen, das hast Du richtig erkannt. Ob die Kopfgesteuerte Schleife min. 1x durchlaufen wird, hängt von den Ausgangsbedingungen vor dem ersten Schleifendurchlauf ab.
Im Prinzip muss man bei der Ersetzung also doch nur dafür sorgen, dass die Bedingung bei der Kopfgesteuerten Schleife min. 1x erfüllt wird.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Anna95 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.01.12 17:08 
okay danke, das hab ich verstanden.und geht es auch umgekehrt?
und wüsstest du ein beispielalgorithmus?

tut mir leid, ich bin nicht so das genie bei dem thema/:
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 17.01.12 19:39 
Hallo,

umgekehrt (die while-Schleife durch repeat-until ersetzen) geht nur im Zusammenhang mit einer if-Abfrage, je nach Umsetzung auch noch mit einem zusätzlichen Break. :idea:

Grüße,
Yogu
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Di 17.01.12 21:33 
Hallo,

Anna95 hat folgendes geschrieben:
Natürlich weiß ich, wie man die beiden Schleifen unterscheidet. Bei der repeat until schleife wird die Schleife mind. einmal durchlaufen.

Nicht nur. Bei der While-Schleife muss die Bedingung erfüllt sein, damit die Schleife weiterläuft. Bei der Repeat-Until-Schleife muss die Bedingung erfüllt sein, damit die Schleife abgebrochen wird.

Im Prinzip lässt sich jede Repeat-Until Schleife durch eine While-Schleife und umgekehrt ersetzten. Nur ist das eben nicht immer sinnvoll.

Hier mal ein möglicher Ansatz:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
//While-Schleife
While not(Bedingung) do
      BEGIN
      END;
//ersetzt durch Repeat-Until-Schleife
If not(Bedingung) then
   Repeat 
   Until Bedingung;

Angaben ohne Gewähr ;-)

Gruß