Delphi-PRAXiS

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.

Hansa 18. Feb 2007 17:30

Re: Elementare Kontrollstrukturen in Delphi
 
Da hat Nikolas Recht. Zum Break gesellt sich allerdings dann noch Exit. Allerdings : wie weit soll man da jetzt gehen ? Daniels Anmerkung ist auch nur relativ zu sehen. Also das mit den globalen Variablen. Das wird von Delphi teilweise schon abgefangen :

Zitat:

Zitat von Delphi
[Fehler]FOR-Schleifenvariable muss eine einfache lokale Variable sein
[Fataler Fehler] xx.dpr(74): Verwendete Unit '..\yy.pas' kann nicht compiliert werden

Wer also so was benutzt, dem verweigert der Compiler bereits die Arbeit. :-D

dominikkv 18. Feb 2007 17:30

Re: Elementare Kontrollstrukturen in Delphi
 
Zitat:

Zitat von Nikolas
Interessant ist auch, was mit der Schleifenvariablen ist, wenn die Schleife per Break; abgebrochen wird.

stimmt... break und continue gibts ja auch noch^^...wenn du willst kannste auch darüber berichten

TheOneAndOnlyDavidEye 18. Feb 2007 17:36

Re: Elementare Kontrollstrukturen in Delphi
 
vielen dank für Eure rege Anteilnahme.

Ich bin immer offen für Kritik und nehme alle Vorschläge gerne an. Nur solltet ihr mir bitte nicht sagen, was ich tun sollte...ich möchte ja, dass ihr an diesem Projekt MITarbeitet. nehmt euch ruhig einen punkt raus...einen quote...und schreibt dann dazu etwas, also auch schon formuliert.

somit sollte dann am ende ein "werk" entstanden sein, wo jeder mit zufrieden ist, jeder seinen senf dazugegeben hat und man dies dann auch als "Lehrmittel" benutzen kann ;)

Schließlich soll diese Zusammenfassung dazu dienen, dass man auch wirklich über das Thema "Schleifen" bescheid weiß, wenn man es sich durchgelesen hat...und wenn man mal Fragen hat, bzw Probleme nimmt man einfach diese Zusammenfassung zur Hand und kann damit arbeiten.

Ich beschäftige mich gerade damit, Übungsaufgaben zu lösen...damit ich auch richtig in die MAterie reinkomm. Habe nämlich vor einem Jahr das letzte mal Delphi benutzt. Danach wurde mein Können mit php und html beschmutzt :P

dominikkv 18. Feb 2007 18:35

Re: Elementare Kontrollstrukturen in Delphi
 
ok...hier mal eine zusammenfassung...das meiste hast du ja schon:

Schleifen:

:arrow: Beeinflussen den Programmablauf
:arrow: Sparen Programmiercode (zB du musst eine Anweisung 1000 mal ausführen... enteder du schreibst 1000 mal das gleiche hin oder du löst das in 2 Zeilen mit ner schleife).
:arrow: Es gibt 3 Arten von Schleifen:

1) For-Schleife:
- wird verwendet wenn mann von vorneherein weiß wie oft die Schleife wiederholt werden soll.
- Aufbau: For Laufvariable := Startausdruck TO Endausdruck DO Anweidung(en);
- Eine ordinale Laufvariable, ein Startausdruck und ein Endausdruck wird benötigt
- bei jedem Durchgang wird die Laufvariable um eins erhöt
- Laufvariable kann (muss aber nicht) in den Anweisungen verwendet werden (kann allerdings nicht verändert werden)
- Wenn mehrere Anweisungen ausgeführt werden sollen müssen diese in einem Anweisungsblock zusammenganommen werden (begin...end)
- Wenn der Startausdruck kleiner als der Endausdruck ist wird die schleife überhaupt nicht ausgeführt
- Wenn statt dem Schlüsselwort DO das Schlüsselwort DOWNTO steht wird der Wert der Luafwariablen bei jedem Durchgang um eins veringert
- Da Char-Variablen ordinal sind können auch diese als Laufvariable verwebdet werden:
Delphi-Quellcode:
var c: char
for c := 'a' to 'f' do showmessage(c);
- Ab Delphi 2005: Vereinfachte For-Schleife: For...in:
Delphi-Quellcode:
var s: String; c: char;
s := 'ABCDEF';
for c in s do showmessage(c);
2) Repeat-Schleife:
- Flexible Schleife
- Aufbau:
Delphi-Quellcode:
REPEAT [i]Anweisung(en);[/i] UNTIL [i]Boolescher-Ausdruck[/i];
- Umgangssprachliche Übersetzung: Wiederhole .. Bis ..
- Solange der Boolesche Ausdruck False ist wird die Schleife ausgeführt
- Oder andersrum gesagt: Die Schleife wird so lange ausgeführt bis der Boolesche Ausdruck True ist
- Wenn mehrere Anweisungen ausgeführt werden sollen ist es nicht notwendig diese in begin..end einzufassen
- Es gibt keinen Schleifen-Zähler (Laufvariable)
- Der Boolesche Ausdruck wird erst am Schluss überprüft... d.h. die Schleife wird mindestens einmal ausgeführt und erst am Schluss entschieden ob sie noch einmal ausgeführt werden soll

3) While-Schleife:
- Auch Flexibel
- Aufbau:
Delphi-Quellcode:
WHILE [i]Boolescher-Ausdruck[/i] DO [i]Anweisung(en)[/i];
- Umgangssprachliche Übersetzung: Solange .. tue ..
- Solange der Boolesche Ausdruck True ist wird die Schleife ausgeführt
- Wenn er False ist wird die Schleife nicht mehr ausgeführt
- Begingung wird am Anfang der Schleife überprüft.. es kann also sein das die Schleife überhaupt nicht ausgeführt wird
- Mehrere Anweisungen in der Schleife müssen mit begin..end zusammengefasst werden

:arrow: Eine Schleife die nie abgebrochen wird nennt man Endlosschleife
:arrow: 2 weitere Kontrollfunktionen für eine Schleife: Break und Continue:
- lassen sich in allen 3 Schleifenarten einsetzen
- beenden vorzeitig den schleifendurchlauf
- break: bricht die komplette schleife ab
- continue: bricht nur den aktuellen Durchlauf ab und macht beim nächsten weiter

TheOneAndOnlyDavidEye 19. Feb 2007 17:21

Re: Elementare Kontrollstrukturen in Delphi
 
ah danke.

kannst du mir das mit dem booleschem ausdruck und der break-continue sache mal an einem beispiel zeigen?

ich versteh nicht so recht, wie das dann mit den variablen funktioniert, weil die ja als typ, boolean bekommen müssen oder so und außerdem bei break und continue...was es da mit auf sich hat?!

IngoD7 19. Feb 2007 17:37

Re: Elementare Kontrollstrukturen in Delphi
 
Zitat:

Zitat von TheOneAndOnlyDavidEye
und außerdem bei break und continue...was es da mit auf sich hat?!

Lies die Online-Hilfe. Darin sind Erklärungen und Beispiele zu for, while, repeat, continue und break.

TheOneAndOnlyDavidEye 19. Feb 2007 22:50

Re: Elementare Kontrollstrukturen in Delphi
 
danke für den tipp. ich blick nur leider nicht durch, wo ich jetzt nach was suchen muss. borland hp? delphi hp?

sorry, aber bist du bitte so nett und sagst mir den link etc wo ich das finde, was mir weiterhilft?
ich hab heut wohl zu lange an delphi gehockt...mir raucht der schädel und ich mach jez auch ma schluss.

IngoD7 19. Feb 2007 23:06

Re: Elementare Kontrollstrukturen in Delphi
 
Zitat:

Zitat von TheOneAndOnlyDavidEye
danke für den tipp. ich blick nur leider nicht durch, wo ich jetzt nach was suchen muss. borland hp? delphi hp?

sorry, aber bist du bitte so nett und sagst mir den link etc wo ich das finde, was mir weiterhilft?
ich hab heut wohl zu lange an delphi gehockt...mir raucht der schädel und ich mach jez auch ma schluss.

In Delphi die Hilfe. Cursor auf ein Wort und F1 drücken. Oder die Hilfedatei zu Fuß öffnen (oben rechts im Menü).

Luckie 19. Feb 2007 23:14

Re: Elementare Kontrollstrukturen in Delphi
 
Als kleines Schmakerl vielleicht noch: for-Schleife läuft rückwärts :zwinker:

TheOneAndOnlyDavidEye 20. Feb 2007 13:38

Re: Elementare Kontrollstrukturen in Delphi
 
danke michael.

du hast wirklich ahnung, nur leider überteigt das die kompetenzen von mir und meinen mitschülern :D

aber ich werde wohl erwähnen, dass die for to do schleife auch rückwärts läuft, selbst wenn kein for..DOWNto gesetzt wurde...ist das richtig? wie formuliere ich da am besten einen satz draus-mit einer erklärung, die nicht so viel von codes oder sowas erwähnt, weil wir davon keine ahnung haben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 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