Programmieren lernen mit Groovy Schleifen Seite 1 Th Letschert While-Schleife Schleife, While-Schleife Schleife: Eine Anweisung / Anweisungsfolge wiederholt ausführen While-Schleife Zahl der Durchläufe wird vom Wert einer Bedingung gesteuert Allgemeine Form auch: „Schleifenkörper“ while ( Bedingung ) Anweisung(-sfolge) Beispiel def zaehler = 0 println "Die ersten 15 Quadradzahlen:" while ( zaehler < 15 ) { zaehler = zaehler+1 println zaehler + " -> " + zaehler*zaehler } Seite 2 Th Letschert While-Schleife Schleife, While-Schleife Beispiel: Die Summe der ersten n natürlichen Zahlen def n = Integer.parseInt(args[0]) Angenommen n=5: Welche Variablen haben welche Werte im Laufe einer Berechnung? def sum = 0 def i = 0 while ( i < n ) { i = i+1 sum = sum + i } println "Summe 1 ... " + n + " = " + sum n i sum 5 5 5 0 1 2 ··· 0 1 3 Angenommen die Anweisungen in der Schleife werden vertauscht. Was passiert? Ist Berechnung noch korrekt ? Wenn nein: warum nicht ? Seite 3 Th Letschert Schleife Schleife und Wertverlaufstabelle Tabelle mit Variablen und ihren wechselnden Werten n i sum 5 0 0 5 1 1 5 2 3 5 3 6 5 4 10 5 5 15 Schleifenende Einstieg erste Zeile def n = 5 def sum = 0 def i = 0 Schleifenkörper von Zeile zu Zeile while ( i < n ) { i = i+1 sum = sum + i } Schleifenende Bedingung nicht mehr erfüllt, keine weitere Zeile Seite 4 Th Letschert While-Schleife Übung Die Summe der ersten n natürlichen Zahlen kann nach einer Formel berechnet werden: n ∑i = ½ n * (n+1) i=1 ➢ ➢ ➢ Schreiben Sie eine Funktion, die sumF(x), die die Summe der ersten x natürlichen Zahlen nach dieser Formel berechnet. Schreiben Sie eine Funktion sumW(x), die die Summe der ersten x natürlichen Zahlen durch Aufsummieren berechnet. Schreiben Sie eine Schleife in der die Summe der der ersten n Zahlen für n = 1 · · · 100 jeweils mit beiden Funktionen berechnet und ausgegeben wird. Seite 5 Th Letschert For-Schleife For-Schleife / Basis-Form Die Schleife durchläuft eine Folge von Werten Allgemeine Form for ( Start-Anw; Bedingung; Inkrement-Anw ) Anweisung(-sfolge) Beispiel for ( i = 0; i <= n; i=i+1 ) { sum = sum + i } Seite 6 def i = while ( sum i = } 0 i <= n ) { = sum + i i + 1 Th Letschert For-Schleife For-Schleife / Basis-Form Ausführung for ( Start-Anw; Bedingung; Inkrement-Anw ) Anweisung(-sfolge) ≈ Start-Anw while ( Bedingung ) { Anweisung(-sfolge) Inkrement-Anw } Beispiel for ( i = 0; i <= n; i=i+1 ) { sum = sum + i } Seite 7 ≈ def i = while ( sum i = } 0 i <= n ) { = sum + i i + 1 Th Letschert For-Schleife Übung Modifizieren Sie Ihr Programm zur Berechnung der Summe der ersten n natürlichen Zahlen derart, dass nur For-Schleifen verwendet werden. Seite 8 Th Letschert For-Schleife For-Schleife / „For-Each“-Form Allgemeine Form for ( Variable in Bereich ) Anweisung(-sfolge) Beispiel def n = Integer.parseInt(args[0]) def sum = 0 bevorzugte Standard-Form for ( i in 1..n ) { sum = sum + i } println sum Seite 9 Th Letschert For-Schleife For-Schleife / „For-Each“-Form For-Each- vs. Standard-Form for ( i = 0; i < n; i = i+1 ) { sum = sum + i } def sum = 0 for ( i in 1..n ) { sum = sum + i } ≈ ? ≈ for ( i = 0; i <= n; i = i+1 ) { sum = sum + i } Seite 10 Th Letschert Times-Schleife „Times“-Schleife Eine besonders einfache Schleife: Zahl der Wiederholungen angeben 10.times{ println "Hallo" } def i = 10 def s = 0 5.times{ println it+" "+ s s = s + it } println s it innerhalb der Schleife durchläuft die Werte 0 . . Anzahl der Wiederholungen - 1 0 0 1 0 2 1 3 3 4 6 10 Seite 11 Th Letschert Schleife Übung Schleifenkonstruktion Berechne in einer Funktion den Wert a = a0 + a1 + · · · an mit a0 = 0, und ai = ai-1 + c für ein vorgegebenes n und c (Funktionsparameter). Gehen Sie systematisch vor: 1. Berechnen Sie ein Beispiel „händisch“. 2. Welche Werte / Wertefolgen müssen berechnet werden? 3. In welchen Variablen werden diese abgespeichert? 4. Erstellen Sie eine Wertverlaufstabelle. 5. Konstruieren Sie die Schleife nach der Wertverlaufstabelle. Seite 12 Th Letschert