Grundlagen der Programmierung 11. Vorlesung 14.06.2017 1
Schleifen 2
do...while do block while ( bedingung ); block: eine Anweisung oder Anweisungen in { block bed JA NEIN 3
while while ( bedingung ) block Hier kein ; bed JA NEIN block 4
for for(initialisierung; Bedingung; Anweisung) Block Hier kein ; Hier ; Hier ; Init. block: eine Anweisung oder Anweisungen in { NEIN Bed. JA Block Anw. 5
Typische Anwendung Zählvariable Anfangswert int i; for(i=0; i < 10; i++){ Endwert printf("%d", i); Dieser Block wird 10 mal ausgeführt... i nimmt dabei die Werte 0, 1, 2,... 9 an 6
Andere Zählweisen int i; for(i=10; i >= 0; i--){ printf("%d", i); i nimmt die Werte 10, 9, 8,..., 0 an int i; for(i=0; i < 21; i+=2){ printf("%d", i); i nimmt die Werte 0, 2, 4,..., 20 an 7
Geschachtelt Dieser Block wird N mal ausgeführt... int i,j; for(i=0; i < N; i++){ for (j=0; j < M; j++){ printf("(%d,%d)", i, j); Dieser Block wird N*M mal ausgeführt i und j nehmen alle Wertepaare (i, j) mit i {0, 1,..., N-1 und j {0, 1,..., M-1 an 8
Sprünge in Schleifen continue Überspringt den Rest des Schleifenblocks, beginnt neuen Durchlauf der Schleife break Bricht Schleife ab 9
Beispiel: Fakultät berechnen n! =1 2 3... n #include <stdio.h> int main() { int n, i, fak = 1; printf("n: "); scanf("%d", &n); for( i = 1; i <= n; i++ ){ fak *= i; printf("%d! = %d\n", n, fak); return 0; 10
Aufgabe: Tannenbaum #include <stdio.h> int main() { int h,i,j; printf("wie hoch? "); scanf("%d", &h); for ( i = 1; i <= h; i++) { for ( j = 1; j <= i; j++) { printf("*"); printf("\n"); 11
Aufgabe: Zahlenrätsel Gesucht sind sechs natürliche Zahlen a,b,c,d,e,f. Für diese Zahlen gelten folgende Bedingungen: 1.) 0 < a < b < c < d < e < f < 50 2.) a + b + c + d + e + f = 161 3.) a * b * c * d * e * f = 138607200 12
Aufgabe: Zahlenrätsel #include<stdio.h> int main() { int a,b,c,d,e,f; for( a = 1; a < 50; a++) for( b = a+1; b < 50; b++) for( c = b+1; c < 50; c++) for( d = c+1; d < 50; d++) for( e = d+1; e < 50; e++) for( f = e+1; f < 50; f++) if (( a+b+c+d+e+f == 161 ) && ( a*b*c*d*e*f == 138607200 )) { printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d\n", a, b, c, d, e, f); return 0; 13
Funktionen 14
Funktionen "neue Befehle" definieren Ziel: Programmtext gliedern / strukturieren Teilprobleme lösen Wiederverwertbaren Code schreiben 15
Funktionen als Unterprogramme #include <stdio.h> Funktionsdeklaration void hilfe_ausgeben() { printf("tolles Programm (c)..."); printf("blablablabla"); // usw. int main() { hilfe_ausgeben(); //... return 0; Programm strukturieren 16
Funktionen als Unterprogramme Allgemeine Form (vereinfacht): void name () { Funktionsrumpf Befehle, wie bei main 17
Funktionen mit Parametern Funktion, die nicht ohne weitere Angaben arbeiten kann Beispiel: wie lang soll das Quadrat werden? seitenlaenge als Parameter 18
Funktion mit Parameter: Deklaration formaler Parameter void print_n_stars( int n ) { int i; for ( i = 0; i < n; i++) { printf("*"); Formale Parameter: Angaben, die die Funktion "braucht", um Arbeiten zu können 19
Funktionen mit Parameter: Aufruf #include<stdio.h> formaler Parameter void print_n_stars( int n ) {... int main() { print_n_stars( 5 ); aktueller Parameter Funktion print_n_stars wird mit n=5 ausgeführt 20
Funktionen mit Parametern Die Auswirkung des Aufrufs print_n_stars(5) kann man sich wie folgt vorstellen: void print_n_stars() { int n = 5; int i; for ( i = 0; i < n; i++) { printf("*"); 21
Funktionen mit Parametern #include<stdio.h> void print_n_stars( int n ) {... int main() { int i; for (i = 1; i < 5; i++) { print_n_stars( i ); printf("\n"); 22
Funktionen mit Rückgabe Funktion in der Mathematik: f :IN! IN x 7! x 2 y = f(x) = x2 Eingabe: x Ausgabe: x2 int square ( int x ) {... 23
Funktionen Ergebnistyp (oder void) Funktionsname Parameter int square( int n ) { return n * n; Ergebnis liefern Rumpf 24
Funktionen: Aufruf in Ausdruck int main() { int n; printf( "Bitte Zahl eingeben: "); scanf( "%d", &n ); printf( "%d hoch 2 ist %d", n, square( n ) ); return 0; Funktionsaufruf 25