1.1. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 1
1.2. Entwicklungsumgebung Qt Creator Anlegen eines neuen C++-Projekts, zunächst noch ohne Qt: Folie 2
1.3. Entwicklungsumgebung Qt Creator Folie 3
1.4. Entwicklungsumgebung Qt Creator Folie 4
1.5. Entwicklungsumgebung Qt Creator Folie 5
1.6. Entwicklungsumgebung Qt Creator (rechte Maustaste) Wenn die Bearbeitung eines Projekts beendet ist, sollte das Projekt geschlossen werden. Es wird dann nicht mehr in der Projektliste im Qt Creator angezeigt. Folie 6
1.7. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 7
1.8. Ein- und Ausgabe /* Ein- und Ausgabe in C */ #include <stdio.h> int main(void) int i; float f; double d; char str[100]; printf("int eingeben: " ); scanf("%d", &i ); printf("float eingeben: " ); scanf("%f", &f ); printf("double eingeben: "); scanf("%lf", &d ); printf("string eingeben: "); scanf("%99s", str); printf("\nfolgende Werte wurden eingegeben:\n"); printf("%6d \n%6.1f \n%6.1f\n%s\n\n", i, f, d, str); return 0; Download-Tipp: Hilfsblatt zum printf-befehl auf http://kuepper.userweb.mwn.de/ Folie 8
1.9. Ein- und Ausgabe Ausgabeformat festlegen, Nachkommastellen, tabellarische Ausgabe: printf(" Formatbeschreibung ", Liste, auszugebender, Variablen); /* Kosinustabelle ausgeben */ #include <stdio.h> #include <math.h> int main(void) double x, y; printf("kosinus-tabelle\n\n"); printf( ); for(x = -M_PI; x <= M_PI; x += M_PI/4) y = cos(x); printf( ); return 0;... (1)?? (2)?? Folie 9
1.10. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 10
1.11. Kontrollstrukturen Aufgabe: Zeichnen Sie ein Struktogramm, welches den genauen Ablauf der Funktion main beschreibt. /* 5x5-Einheitsmatrix ausgeben */ #define DIM 5 #include <stdio.h> int main(void) int row, col, value; for(row = 0; row < DIM; ++row) for(col = 0; col < DIM; ++col) value = 0; if(row == col) value = 1; printf("%4d", value); printf("\n"); return 0; Internet-Tipp: Der deutsche Wikipedia- Artikel zu Struktogrammen ist sehr gut! Folie 11
1.12. Kontrollstrukturen Klausuraufgabe Ingenieurinformatik 1, WS 2014/15 Das Struktogramm auf der folgenden Seite zeigt den Ablauf eines Programms zur Simulation von elektronischen Kippschwingungen. Hinweis: In der Datei chart.h befinden sich alle für den Aufruf der Funktionen chart_lineto und chart_show notwendigen Prototypen und symbolischen Konstanten. /* Simulation von Kippschwingungen */ #include "chart.h" int main(void) int zustand; double t, uc;... Folie 12
1.13. Kontrollstrukturen Folie 13
1.14. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 14
1.15. Funktionen, lokale und globale Variablen /* Quadratische Gleichung */ #include <stdio.h> #include <math.h> double x1, x2; /* glob. Variablen! */ int qsolve(double p, double q); int main(void) double p, q; printf("x^2 + px + q = 0\n\n"); printf("p eingeben: "); scanf("%lf", &p); printf("q eingeben: "); scanf("%lf", &q); Aufgabe: Fügen Sie die Definition der Funktion qsolve zum Lösen quadratischer Gleichungen zum Quelltext hinzu. if(qsolve(p, q)!= 0) printf("reelle Nullstellen bei %.2f und %.2f\n\n", x1, x2); else printf("keine reellen Nullstellen!\n\n"); return 0; Folie 15
1.16. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 16
1.17. Felder und Matrizen, Zeiger Klausuraufgabe Ingenieurinformatik 1, WS 2014/15 Das folgende Programm soll das Kreuzprodukt ( Vektorprodukt ) der Vektoren v1 und v2 berechnen und im Vektor erg speichern. Ergänzen Sie den abgebildeten C-Quelltext. #include <stdio.h> int main(void) double v1[3], v2[3], erg[3]; printf("vektor 1:\n"); scanf("%lf", &v1[0]); scanf("%lf", &v1[1]); scanf("%lf", &v1[2]); printf("vektor 2:\n"); scanf("%lf", &v2[0]); scanf("%lf", &v2[1]); scanf("%lf", &v2[2]); /* Kreuzprodukt berechnen und in Vektor "erg" speichern */?? printf("ergebnis: (%f, %f, %f)\n", erg[0], erg[1], erg[2]); return 0; Folie 17
1.18. Felder und Matrizen, Zeiger Klausuraufgabe Ingenieurinformatik 1, WS 2014/15 Das folgende Programm soll alle 100 Elemente der Matrix m mit Zufallszahlen belegen. Die Zufallszahlen sollen im Intervall von 0,25 bis 0,75 liegen. Ergänzen Sie den C-Quelltext! #include <stdlib.h> #include <stdio.h> int main(void) double m[10][10]; /* Matrix mit Zufallszahlen von 0.25 bis 0.75 belegen */?? printf("zufallszahl in Element m[3][3] = %f\n", m[3][3]); printf("zufallszahl in Element m[5][5] = %f\n", m[5][5]); printf("zufallszahl in Element m[7][7] = %f\n", m[7][7]); return 0; Folie 18
1.19. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen Felder und Matrizen Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 19
1.20. Zeiger und Adressen Fragen: Wie kann man die Adresse im Hauptspeicher des Rechners ermitteln, an der eine bestimmte Variable abgespeichert ist? Wie kann man eine solche Adresse zwischenspeichern? Wie liest man bzw. wie beschreibt man eine Variable, wenn man deren Adresse im Hauptspeicher aber nicht deren Namen kennt? Welche Vorteile bringt dieser direkte Zugriff auf den Hauptspeicher? Mit Zeigern können Funktionen programmiert werden, die mehrere Rückgabewerte (Ergebnisse) an den Aufrufer zurückgeben sollen. Und zwar ohne globale Variablen! Außerdem werden Zeiger benötigt, um Felder (Vektoren, Matrizen, Zeichenketten) zur Weiterverarbeitung an eine Funktion zu übergeben. Folie 20
/* Rückgabe mehrerer Ergebnisse (ohne globale Variablen) */ 1.21. Zeiger und Adressen #include <stdio.h> #include <math.h> int qsolve(double p, double q, double *x1, double *x2); int main(void) double p, q, nst1, nst2; printf("x^2 + px + q = 0\n\n"); printf("p eingeben: "); scanf("%lf", &p); printf("q eingeben: "); scanf("%lf", &q); if(qsolve(p, q, &nst1, &nst2)!= 0) printf("reelle Nullstellen bei %.2f und %.2f\n\n", nst1, nst2); else printf("keine reellen Nullstellen!\n\n"); return 0; int qsolve(double p, double q, double *x1, double *x2) double w = p*p/4.0 - q; if(w < 0) return 0; *x1 = -p/2.0 - sqrt(w); *x2 = -p/2.0 + sqrt(w); return 1; Tipp: Video-Tutorial zu Zeigern http://commons.wikimedia.org/wiki/ File:Pointer_(Zeiger)_in_C.ogv Folie 21
1.22. Zeiger und Adressen /* Vektor an Funktion übergeben */ /* Zeigerschreibweise */ #include <stdio.h> #include <math.h> double laenge3d(double *vec); int main(void) double len, a[3] = 3, 4, 0 ; len = laenge3d(&a[0]); printf("laenge: %.2f\n\n", len); return 0; double laenge3d(double *vec) double quad = 0; int i; for(i = 0; i < 3; ++i) quad += pow( *(vec+i), 2 ); return sqrt(quad); /* Vektor an Funktion übergeben */ /* Vektorschreibweise */ #include <stdio.h> #include <math.h> double laenge3d(double vec[]); int main(void) double len, a[3] = 3, 4, 0 ; len = laenge3d(a); printf("laenge: %.2f\n\n", len); return 0; double laenge3d(double vec[]) double quad = 0; int i; for(i = 0; i < 3; ++i) quad += pow(vec[i], 2); return sqrt(quad); Folie 22
1.23. Gliederung Kapitel 1 Wiederholung C-Programmierung Entwicklungsumgebung Qt Creator Ein- und Ausgabe Kontrollstrukturen, Verzweigungen, Schleifen Funktionen, lokale und globale Variablen siehe Felder und Matrizen Praktikum! Zeiger und Adressen Modulare Programmierung Mehrere Quelldateien in einem Projekt Folie 23