Die Folge : Die Folge ist eine Ablaufstruktur !!!!!!! C#-Anweisungen werden in der Reihenfolge nacheinander ausgeführt, wie sie hintereinander oder untereinander angegeben sind. Jede Anweisung muss mit einem Semikolon abgeschlossen werden (dies ist der landläufige Strichpunkt!). Eine Folge von gültigen C#-Befehlen in einer Consolenumgebung könnte so aussehen : Console.WriteLine („Bitte geben Sie zwei Zahlen ein :“); String eingabe; eingabe = Console.ReadLine() ; Int zahl1 = Convert.ToInt32 (eingabe); e ingabe = Console.ReadLine() ; Int zahl2 = Convert.ToInt32 (eingabe); Console.WriteLine („{0} + {1} = {2}“,zahl1,zahl2,zahl1+zahl2); Blöcke : Mit geschweiften Klammern werden Anweisungen zu Blöcken zusammengefasst. Typische Anwendungsbeispiele für Blöcke sind Schleifen, Abfragen oder Definitionen von Klassenmethoden. Auch die Definitionen der Klassen selbst und der Namespaces werden in Blockklammern eingeschlossen. Wichtig : Jede geöffnete Blockklammer muss sein dazugehöriges Pendant besitzen ! Ein wahlloses Setzen von Sonderzeichen kann von einem durchschnittlichen Compiler in der Regel nicht verarbeitet werden Compiler sind streng normalisierte Programme der Leitsatz : „Auch der Computer ist nur ein Mensch“ gilt hier ausnahmsweise nicht ! Die Auswahl Eine Auswahl stellt eine Programmverzweigung dar. Je nachdem ob eine Regel erfüllt ist oder eben nicht, wird eine Anweisung durchgeführt oder nicht, bzw. ev. Eine andere Anweisung durchgeführt. Klingt kompliziert ist es auch ! In C# wird die Auswahl mit den Befehlen if und else realisiert. Syntax (Schreibweise) : If (Ausdruck) Anweisung Else Anweisung 2 Eine gültige C#-Consoleapplikation könnte folgendermaßen aussehen : Console.WriteLine („Bitte geben Sie Ihr Gewicht ein :“); String eingabe = Console.ReadLine(); Int gewicht = Convert.ToInt32 (eingabe); If (gewicht > 100) Console.WriteLine („Sie sind ganz schön übergewichtig !“); Else Console.WriteLine („Lassen wir grad noch gelten !“); Über den inhaltlichen Wert des Programms wird nicht diskutiert. Die Fallunterscheidung : Während die Kontrollstruktur Auswahl genau zwei Fälle unterscheidet und einen oder beide mit Programmcode abhandelt wenn die Bedingung erfüllt ist oder eben nicht, so kann man bei der Fallunterscheidung zwischen (beliebig vielen) Möglichkeiten unterscheiden. Eine Möglichkeit dies programmtechnisch umzusetzen ist eine Folge von if-Befehlen. Sollte die Eingabe eines Benutzers überprüft werden auf das Vorhandensein der Buchstaben n, o, s und w so könnte folgender Quellcode zum Einsatz kommen. Console.WriteLine („In welche Himmelsrichtung wollen Sie gehen ?:“); String eingabe = Console.ReadLine(); Char antwort = Convert.ToChar (eingabe); If (antwort ==“n“) Console.WriteLine („nach Norden „); Else If (antwort==“o“) Console.WriteLine („nach Osten“); Else If (antwort==“w“) Console.WriteLine („nach Westen“); Else If (antwort==“s“) Console.WriteLine (“nach Süden”); Else Console.WriteLine („Schwachkopf !!“); Besser geeignet ist in diesem Fall aber die Fallunterscheidung. Syntax : Switch ( Ausdruck ) case Konstanterausdruck1 : Anweisung1 ; case Konstanterausdruck2 : Anweisung2; [ Default : Anweisung-Standard Sprunganweisung] } Der Tal do holt (Goggi) beschreibt den Programmblock (zusammengehörige Teile des Quellcodes. Klammer zu ! Auch innerhalb der Case-Abfrage kann an Stelle einer einzelnen Anweisung wiederum ein Code-Block stehen. Die jeweilige Konstante einer Case-Abfrage muß eine Ganzzahl sein (beziehungsweise ein konstanter Ausdruck der eine Ganzzahl ergibt. Der Ausdruck im Kopf der Switch-Anweisung wird der Reihe nach mit den Konstanten verglichen. Bei Übereinstimmung wird die Ausführung bei der auf die Marke folgenden Anweisung fortgesetzt. Für den Fall das keine Vergleiche stimmen kann man eine Default-Anweisung setzen, muss aber nicht ! Man muss aber nach den Anweisungen im Case-Block ein break schreiben, damit die Anweisung beendet wird. Der Compiler warnt uns aber trickreich !! Ein Beispiel : static void Main(string[] args) { Console.WriteLine („In welche Himmelsrichtung wollen Sie gehen ?:“); String eingabe = Console.ReadLine(); Char antwort = Convert.ToChar (eingabe); Switch (antwort) { case 'n': Console . WriteLine („Norden“); break ; case 'o': Console . WriteLine („Osten“); break ; case 'w': Console . WriteLine („Westen“); break ; case 's': Console . WriteLine („Süden“); break ; } } Sollten mehrere Möglichkeiten mit einem Case behandelt werden , so schreiben wir noch ein case darunter, z.B. case ‚n': case ‚N': Console . WriteLine (“Norden”); break ; Die Wiederholung : Eine Wiederholung (Schleife) ermöglicht es, eine oder mehrere Anweisungen mehrmals hintereinander auszuführen. Die Schleifensteuerung erfolgt mittels eines logischen Ausdrucks (einer Bedingung). Die Anweisungen werden so lange die Bedingung erfüllt ist wiederholt (Im Extremfall : ewig, immer, endlos, bis PC oder MS den Geist aufgibt etc... [weitere Antworten einsetzen...]). Kopfgesteuerte Schleife : Bei einer kopfgesteuerten Schleife steht die Bedingung am Anfang. Sie wird vor der ersten Ausführung der Anweisung überprüft. Dies kann dazu führen, dass die Schleife [???] ausgeführt wird. Syntax : While (ausdruck) Anweisung Das folgende Beispiel berechnet die Summe der Zahlen von 1 bis 10. Static void Main() { int i = 1, summe = 0; while (i<=10) { summe+=i; // oder : summe = summe+ i; i++; } Console.WriteLine („Die Summe ist {0}“,summe); } Aufgabe 1 : Entwickle ein Programm welches mittels einer kopfgesteuerten Schleife folgende Berechnung erstellt : Eine Zahl soll eingegeben werden (benutze Console.Readline), diese Zahl soll immer mit sich selbst multipliziert werden bis die Summe das erste Mal 1000 überschreitet. Aufgabe 2: Entwickle ein Programm welches mittels einer kopfgesteuerten Schleife folgende Berechnung erstellt : Eine Zahl soll eingegeben werden (benutze Console.Readline), diese Zahl soll immer durch 2 dividiert werden bis die Zahl < 10 wird. Fußgesteuerte Schleife Bei einer fußgesteuerten Schleife steht die Bedingung im Schleifenfuß. Sie wird erst nach der Ausführung des Schleifenblocks ausgeführt. Syntax : Do Anweisung While (ausdruck); Die Summer der Zahlen von oben kann also auch mittels fußgesteuertes Schleife berechnet werden. Static void Main() { int i = 1, summe = 0; do { summe+=i; // oder : summe = summe+ i; i++; } while (i<=10) Console.WriteLine (“Die Summe ist {0}”,summe); } Aufgabe 1 : Löse die oben angeführten Aufgaben 1 und 2 mittels fußgesteuerter Schleife. Aufgabe 2 : Überlege die kürzeste Endlosschleife Anmerkung : Die Schleife : While (Windows-Status = stabil { Anweisungen … } ist technisch unmöglich !! for-Schleife : wie kann ma des erklären führt die Anweisungen aus wi (schaut zu Goggi kann nicht helfen -. Was ? sagt Goggi i steh scho wieder drin im Internetz (hihihi) versinkt hinter Notebook (maxdata !))) Damit eine Schleife jemals endet, muss normalerweise die Anweisung dafür sorgen, dass die Bedingung irgendwann nicht mehr erfüllt wird. Häufig wird dies mit einer Variablen erfüllt, die einen Anfangswert hat, der bei jedem Durchlauf erhöht (oder verringert) wird um irgendwann die Bedinung nicht mehr zu erfüllen. Dies lässt isch besonders gut mit einer for-Schleife realisieren. Syntax : for (ausdruck1;ausdruck2;ausdruck3) Anweisung Der erste Ausdruck dient dazu, die Schleifenkontrollvariablen zu initialisieren (für 6c-Borg-Birkfeld : auf einen Anfangswert bringen), z.B. den Schleifenzähler auf 1 zu setzen. Dieser Ausdruck wird nur ein einziges Mal ausgewertet. Der zweite Ausdruck wird als Bedingung der Schleife ausgewertet (z.B.: i<10). Er gibt an wie lange die Schleife läuft. Der dritte Ausdruck wird nach jedem Schleifendurchgang ausgewertet und dient zur Veränderung der Schleifenkontrollvariablen (Reinitialisierung), z.B. i++. Der Initialisierungsteil kann auch mehrer Ausdrücke enthalten, ebenso wie der Reinitialisierungsteil. Zählschleife Die Zählschleife ist ein Spezialfall der for-Schleife. Sie wird über einen Zähler gesteuert, der von einem Startwert zu einem Endwert (mit einer angegebenen Schrittweite) läuft. Mit einer Zählschleife kann die Summe der Zahlen von 1 bis 10 sehr leicht berechnet werden. Static void Main() { int i=1,summe=0; for (i=1;i<=10;i++) summe+=i Console.WriteLine (“Die Summe ist {0}”,summe); } Aufgabe 1 : Schreibe ein Programm das nach Eingabe einer Zahl die Zahl so oft mit sich selbst multipliziert bis die Konstante 300000 überschritten ist. Wird also 10 eingegeben soll der erste Durchlauf 100 ergeben, der zweite 1000, der dritte 10000. Dieses Programm soll auch mit Fließkommazahlen funktionieren. Aufgabe 2 : Schreibe ein Programm das nach Eingabe einer Zahl die Zahl so oft durch 2 dividiert bis sie kleiner als 10 ist. Ausgabe des Restwertes. Variante : Dieses Programm soll mit Fließkommazahlen ausgeführt werden und durch 0,23 dividiert werden funktionieren. Variante : Das Programm soll auch den Divisor als Eingabe bekommen. Ev Abfrage ob gültige Eingabe ! Durchlaufen von Arrays Mithilfe einer Zählschleife kann man bequem ein Array durchlaufen und für jedes Array eine Operation durchführen, im folgenden Beispiel speichern wir die Quadrate der Zahlen von 0-99 in einem Array feld. Static void main (string[] args) { int [] feld = new int [100]; for ( int i=0;i<100;i++) { feld[i] = i*i; Console . WriteLine (feld[i]); } } Foreach Die Ausführung bestimmter Aktionen für jedes Element eines Arrays ist auch mit der Foreach-Anweisung möglich. Syntax : Foreach (Typ Bezeichner in Ausdruck) Anweisung Im Beispiel werden ebenfalls die Quadrate der Zahlen von 0-99 in dem Array feld gespeichert. Die Ausgabe erfolgt jedoch mit einer foreach Anweisung. Static void main (string[] args) { int [] feld = new int [100]; for ( int i=0;i<100;i++) { feld[i] = i*i; } } foreach (int j in feld) { Console . WriteLine (j); } zur Erinnerung: den gleichen Effekt kann man mittels for-Schleife (allerdings nicht so elegant lösen). for ( int j=0;j<100;j++) { Console . WriteLine (feld[j]); } Aufgabe 1: Programmiere eine Schleife mit 5 Durchläufen, welche den Benutzer auffordert jeweils einen Namen einzugeben und speichere diese Eingabe in ein String-Array Gib anschließend mittels foreach-Anweisung alle Namen aus. |
||