Grundlagen der Programmierung

Grundlagen der
Programmierung
11.Vorlesung
21.12.2016
Mittwoch, 21. Dezember 16
1
Noch mehr Operatoren...
• Präinkrement: ++Variable
Prädekrement: --Variable
• Postinkrement: Variable++
Postdekrement: Variable--
• Präinkrement erhöht den Wert der Variablen um
1, liefert den neuen Wert der Variablen zurück
• Postinkrement erhöht den Wert der Variablen um
1, liefert den alten Wert der Variablen zurück
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
Merke:
Prä...: erst erhöhen, dann liefern
Post: erst liefern, dann erhöhen
2
Bedingungsoperator
• Allgemein:
Bedingung ? Ausdruck1 : Ausdruck2 ;
• Wenn Bedingung wahr ist, ist das Ergebnis der
Wert von Ausdruck1, sonst der Wert von
Ausdruck2
• Es wird entweder Ausdruck1 oder Ausdruck2
ausgewertet
• Damit:
Fallunterscheidungen innerhalb von Ausdrücken
möglich
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
3
Schleifen
Mittwoch, 21. Dezember 16
4
do...while
do
block
while ( bedingung );
block: eine Anweisung
oder Anweisungen in { }
block
bed
JA
NEIN
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
5
while
while ( bedingung )
block
Hier kein ;
bed
NEIN
JA
block
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
6
for
Hier
kein
;
for(Initialisierung; Bedingung; Anweisung)
Block
Hier ;
Hier ;
block: eine Anweisung
oder Anweisungen in { }
Init.
Bed.
NEIN
JA
Block
Anw.
Mittwoch, 21. Dezember 16
7
Typische Anwendung
Zählvariable
Anfangswert
Endwert
int i;
for(i=0; i < 10; i++){
printf("%d", i);
}
Dieser Block wird
10 mal ausgeführt...
i nimmt dabei die
Werte 0, 1, 2, ... 9 an
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
8
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
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
9
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
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
10
Sprünge in Schleifen
• continue
• Überspringt den Rest des Schleifenblocks,
beginnt neuen Durchlauf der Schleife
• break
• Bricht Schleife ab
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
11
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;
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
12
Aufgabe: “Tannenbaum”
#include <stdio.h>
int main() {
int h,i,j;
printf("Wie hoch? ");
scanf("%d", &h);
for ( i = 0; i < h; i++) {
for ( j = 0; j <= i; j++) {
printf("*");
}
printf("\n");
}
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
13
Aufgabe: Zahlenrätsel
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
14
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
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
15
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);
printf("N 52° 28.%d\n", (b-a)*b+d-c );
printf("E 013° 32.%d\n", a*(f-e)*(d-c));
return 0;
}
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
16
Funktionen
Mittwoch, 21. Dezember 16
17
Funktionen
• "neue Befehle" definieren
• Ziel: Programmtext gliedern / strukturieren
• Teilprobleme lösen
• Wiederverwertbaren Code schreiben
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
18
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
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
19
Funktionen als Unterprogramme
• Allgemeine Form (vereinfacht):
void name () {
Funktionsrumpf
}
Befehle, wie bei main
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
20
Funktionen mit Parametern
• Funktion, die nicht
ohne weitere
Angaben arbeiten kann
• Beispiel: wie lang soll
das Quadrat werden?
• seitenlaenge als Parameter
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
21
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
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
22
Funktionen mit Parameter: Aufruf
formaler Parameter
#include<stdio.h>
void print_n_stars( int n ) {
...
}
aktueller Parameter
int main() {
print_n_stars( 5 );
}
Funktion print_n_stars
wird mit n=5 ausgeführt
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
23
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("*");
}
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
24
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");
}
}
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
25
Funktionen mit Rückgabe
• Funktion in der Mathematik:
f : IN ! IN
•
• Eingabe: x
• Ausgabe: x
y = f(x) = x2
x 7 ! x2
2
•
int square ( int x ) { ...
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
26
Funktionen
Ergebnistyp
(oder void)
Funktionsname
Parameter
int square( int n ) {
return n * n;
}
Rumpf
Ergebnis liefern
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
27
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
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
28
Funktionsdeklaration
• Allgemeine Form:
•
ergebnistyp name ( formale Parameter ) {
Funktionsrumpf
}
Ergebnistyp: void, wenn die Fkt. kein Ergebnis
liefert
• Formale Parameter: Liste von
Variablendeklarationen (durch , getrennt)
• Funktionsrumpf: Liste von Befehlen
•
return ausdruck;
liefert Ergebnis und bricht die Funktion ab
Grundlagen der Programmierung
Mittwoch, 21. Dezember 16
29