Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Elementare Kontrollstrukturen in Delphi (https://www.delphipraxis.net/86696-elementare-kontrollstrukturen-delphi.html)

TheOneAndOnlyDavidEye 17. Feb 2007 22:26


Elementare Kontrollstrukturen in Delphi
 
Hallo liebe Delphi Freunde und Anhänger von David Eye.

Ich arbeite gerade an einem Projekt, Turorial bzw einer Wiederholung von Delphi für die schriftliche Abiturprüfung.

Mein Ziel ist es, für das Ober-Thema: "Algorithmen und Datenstrukturen - Mit Übungsbeispielen (Delphi)" zu dem Unterthema
-->"Elementare Kontrollstrukturen - Schleifen"
eine Präsentation zu entwerfen, die im Großen und Ganzen das komplette Thema abdeckt. Ich habe auch schon eine genau Vorstellung wie das aussehen soll.
Meine Frage - Bitte an Euch, Programmiererfreunde, ist jetzt: Könnt ihr mir bei der Erstellung des Aufbaus und der Themen helfen.

<<< Das Ergebnis werde ich Euch natürlich vortragen und zur Verfügung stellen. Ist bestimmt auch für die Allgemeinheit sehr nützlich! >>>

Meine Grobeinteilung, an welcher Ihr Euch bitte orientieren sollt, sieht so aus:

-Abweisende Schleifen (While...Do)
-Nicht-abweisende Schleifen (Repeat...Until)
-Zähler-Schleifen (For...To...Do; For...Downto...Do)


ES IST WIRKLICH ALLES WAS IHR ZU DEM THEMA >>> SCHLEIFEN <<< ZU SAGEN HABT, W I C H T I G ! ! !

Ich bedanke mich schonmal im Voraus für Eure Mitarbeit
und freue mich auf viele Beiträge! :cheers:

Daniel 17. Feb 2007 22:46

Re: Elementare Kontrollstrukturen in Delphi
 
Mal von der Abgrenzung der jeweiligen Schleifen zueinander könntest Du ein wenig im tiefen Schmutz wühlen: Relativ harmlose, weil meist schnell gefundene, aber dennoch gern gemachte Fehler bei Repeat- und While-Schleifen: Vergessen, die Abbruch-Bedingung zu setzen (while i < 15 und dann vergessen, i zu erhöhen ...). Richtig dreckig wird es, wenn man globale Variablen nutzt, um die Abbruchbedingung herbeizuführen. Man denke jetzt an eine Variable, die sowohl innerhalb der Schleife genutzt wird, um die Abbruchbedingung zu schaffen ( inc(i), z.B. ) als auch in einer der Routinen, die innerhalb der Schleife abgearbeitet werden - und dort dann für einen gänzlich anderen Zweck.

Was Du in diesen Zusammenhang auch noch streifen könntest wäre die Frage "iterativ vs. rekursiv". In der Theorie lässt sich das eine durch das andere ersetzen, in der Praxis -sprich: am konkreten Beispiel- wird man jedoch üblicherweise gute Gründe für die eine oder andere Variante finden.

Du könntest auch kurz ein Szenario skizzieren, das eintreten würde, wenn es keine Schleifen gäbe. (Lass' den Rechner mal auf die Eingabe eines Nutzers warten ohne Schleifchen). Somit könntest Du - wenn auch mit einem Augenzwinkern - eine Lanze für die Schleifen dieser Welt brechen und ihre Bedeutung ins rechte Licht rücken.

TheOneAndOnlyDavidEye 17. Feb 2007 23:27

Re: Elementare Kontrollstrukturen in Delphi
 
Danke Dir für deinen Beitrag.

Du scheinst ein richtiger Profi in diesem Gebiet zu sein. Das bin ich und sind meine Mitschüler, die das Abitur schreiben aber leider nicht. Du musst mir quasi deinen ganzen Beitrag auf Schüler-Niveau erklären, damit ich verstehe, was du meinst.

Tut mir leid, aber ich verstehe z.B. nicht:
-was du mit rekursiv gegen iterativ meinst
-was das problem ist mit variablen, wenn man global-definierte benutzt

Da wir selbst nie so tief in die Materie einblicken, da wir auch Accsess, PHP-HTML, EXCEL im Abitur schreiben (in den 5 Stunden jeweils Aufgaben aus diesen Bereichen) kann ich auch nicht so viel Details beschreiben, sondern muss immer einen Grundüberblick geben, auf:
-die Synthax
-Regeln
-Anwendungen
-Aufgabenstellung
-Probleme(was du ja schon zum Teil angesprochen hast)

Daniel 17. Feb 2007 23:39

Re: Elementare Kontrollstrukturen in Delphi
 
Ich bin kein Delphi-Profi, ich erwecke bestenfalls hin und wieder den Anschein, einer zu sein. ;-)


Das mit den globalen Variablen wäre ein krasses Negativ-Beispiel geworden. Wenn Ihr aber nicht so tief einsteigt, solltest Du vielleicht anderen Dingen den Vorzug lassen und Dich auf die typischen, auch für Neulinge nachvollziehbaren, Anwendungsfälle dieser Schleifen konzentrieren. Die Problematiken, die sich aus globalen Variablen ergeben können wenn man nicht Acht gibt, könnten ein eigenes Referat füllen.

Dann zu Deiner zweiten Frage: Als "rekursiv" werden Programmteile bezeichnet, die sich selbst wieder aufrufen und damit auch eine Form von Schleife erzeugen. Diese daraus entstehenden Schleifen haben verschiedene Eigenschaften wie zum Beispiel einen gewissen, "speziellen" Verbrauch des Speichers. Wenn allerdings niemand in Eurer Klasse so recht weiß, was ein Stack/Callstack ist und was dort prinzipiell passiert, dann ist es vermutlich wenig sinnvoll, dieses Thema "mal eben so" anzureißen.


Wie lang soll das Ganze denn werden? Zu den Schleifen an sich würd' mir jetzt nicht so viel einfallen, ich glaube, da wäre ich nach wenigen Minuten durch.

Hador 17. Feb 2007 23:55

Re: Elementare Kontrollstrukturen in Delphi
 
Zitat:

Zitat von TheOneAndOnlyDavidEye
-was du mit rekursiv gegen iterativ meinst

Siehe Wikipedia Iterativ Rekursiv

Zitat:

Zitat von TheOneAndOnlyDavidEye
-was das problem ist mit variablen, wenn man global-definierte benutzt

Stell dir einfach mal vor, du hast eine globale Variable i vom Typ Integer. Diese benutzt du irgendwo für eine Schleife als Zählvariable. Irgendwann später brauchst du dann in einer anderen Methode auch eine Integer-Variable und denkst dir toll ich hab ja schon eine. Nimmst die und wenn du Pech hast, schaffst du dir damit eine Endlosschleife, da du evtl. den Wert der Zählervariable nun gleichzeitig irgendwo anders veränderst. Es gibt noch hunderte ähnluiche Szenarien wo soetwas Probleme geben kann. Daher gilt eigentlich immer: So global wie nötig, so lokal wie möglich.

EDIT: Roter Kasten :gruebel:

HeikoAdams 18. Feb 2007 01:52

Re: Elementare Kontrollstrukturen in Delphi
 
Ich würde auch kurz darstellen, in welchen Fällen es sinnvoll ist, Kopfgesteuerte Schleifen (While, For) zu nutzen und wann es sinnvoll ist, Fußgesteuerte Schleifen (Repeat) zu verwenden. Es sind schon einigen Programmierern graue Haare gewachsen, nur weil sie zuerst den falschen Schleifentyp verwendet haben :wink:
Aber vorsichtig, das kann leicht zu einer (unnötigen) Grundsatzdiskussion ausarten.

Robert Marquardt 18. Feb 2007 05:06

Re: Elementare Kontrollstrukturen in Delphi
 
Die while- und repeat-Schleifen von Pascal sind genau wie in den anderen Programmiersprachen. Interessant ist ein Vergleich der for-Schleifen von Pascal und C. C hat naemlich gar keine for-Schleife. Das was es hat ist vollstaendig ueber die while-Schleife definiert. In Pascal is die for-Schleife wirklich ein eigenes Konstrukt das z. B. die untere und obere Grenze nur einmal auswertet.

TheOneAndOnlyDavidEye 18. Feb 2007 16:15

Re: Elementare Kontrollstrukturen in Delphi
 
Zusammenfassung zum Thema "Schleifen":

Es gibt verschiedene Arten von Schleifen, die sind u.a.
-zählgesteuerte Schleife (Zählerschleife)
-kopfgesteuerte Schleife (abweisende Schleife)
-fußgesteuerte Schleife (nicht-abweisende Schleife)

Begriffsklärung:

Schleifen sind Anweisungen, die innerhalb eines Programmablaufs mehrfach ausgeführt werden können. Dadurch vermeidet man die mehrfache Aufnahme von identischen Anweisungen und kann zur Laufzeit bestimmen, wie oft diese Anweisungen ausgeführt werden sollen.

1. Die zählgesteuerte Schleife:

Anwendung:
Sie wird angewandt, wenn die Anzahl der Wiederholungen(Schleifendurchläufe) von vorneherein(z.B. durch Eingabe) feststeht oder vom Computer berechnet werden kann.

Synthax:
FUER Zaehvariable = Anfangswert BIS Endwert WIEDERHOLE Anweisung
-->
For i:=1 To 10 Do
begin
anweisung1;
anweisung2;
...;
end;

oder

For i:=10 Downto 1 Do
begin
anweisung1;
anweisung2;
...;
end;

Hinweise:


-Die Zaehlvariable wird bei jedem Schleifendurchlauf vom Anfangswert zum Endwert um 1 erhöht. (Es gibt auch die Möglichkeit, die Zaehlvariable um 1 zu vermindern)
-Die Zaehlvariable darf nur innerhalb der Zählerschleife benutzt werden und hat nach der Schleife keinen Wert


2. Die kopfgesteuerte Schleife:

Anwendung:
Sie wird angewandt, wenn die Anzahl der Wiederholungen von vorneherein nicht feststeht, sondern sich erst während der Ausführung des Wiederholungsteils ergibt.

Synthax:

SOLANGE Bedingung WIEDERHOLE Anweisung
-->
While A > 0 Do zaehler:=zaehler+1;

Hinweise:
-ist eine Schleife mit Abbruchbedingung am Anfang
-bei ihr wird am Anfang des Schleifenkörpers abgefragt, ob die Schleife ausgeführt werden soll (=abweisende Schleife)


3. Die fußgesteuerte Schleife:

Anwendung:
Sie wird ebenfalls angewandt, wenn die Anzahl der Wiederholungen von vorneherein nicht feststeht, sondern sich erst während der Ausführung des Wiederholungsteils ergibt.

Synthax:
WIEDERHOLE Anweisung BIS Bedingung
-->
Repeat R:=R+1 Until R<1;

Hinweise:
-ist eine Schleife mit Abbruchbedingung am Ende
-bei ihr wird am Ende des Schleifenkörpers abgefragt, ob die Schleife noch mal ausgeführt werden soll(=nicht-abweisende Schleife)
-jede fußgesteuerte Schleife kann durch eine kopfgesteuerte Schleife ersetzt werden(aber nicht umgekehrt!)
-im Gegensatz zur kopfgesteuerten Schleife wird die fußgesteuerte Schleife mindestens einmal durchlaufen

--> Die Abfrage ist bei der fuß- und der kopfgesteuerten Schleife genau umgekehrt:
-fußgesteuerte: Wiederhole ... bis die Note gleich 6
-kopfgesteuerte: Solange die Note ungleich 6 wiederhole...


Wahl des richtigen Schleifentyps:

-Nutzen Sie die Zählerschleife, wenn Sie wissen, wie oft die Schleife auszuführen ist
-Wählen Sie die kopfgesteuerte Schleife, wenn die Schleife unter Umständen gar nicht ausgeführt werden muss und Sie nicht wissen, wie oft sie ausgeführt werden soll
-Verwenden Sie die fußgesteuerte Schleife, wenn die Schleife mindestens eimal auszuführen ist und Sie nicht wissen, wie oft sie ausgeführt werden soll

Hansa 18. Feb 2007 17:12

Re: Elementare Kontrollstrukturen in Delphi
 
Sieht schon ganz gut aus. Trotzdem Kritik (eher Anregungen) : bei Downto würde ich noch einen Satz dazuschreiben. Einer, der noch nie was von Schleifen gehört hat, dem müsste man etwas mehr helfen. Auf Anhieb ist das nicht klar, bzw. selbsterklärend. Dann würde ich noch einen weiteren Satz formulieren, wegen der bedingten Gleichheit von While und Repeat. Würde ein Beispiel bringen mit IF und letztenendes selbem Ergebnis.

Nikolas 18. Feb 2007 17:15

Re: Elementare Kontrollstrukturen in Delphi
 
Interessant ist auch, was mit der Schleifenvariablen ist, wenn die Schleife per Break; abgebrochen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Seite 1 von 2  1 2      

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