P1.1. Gliederung Rechnerpraktikum zu Kapitel 1 Wiederholung C-Programmierung Sicherheitsunterweisung Klausur Ingenieurinformatik 1, WS14/15 Export/Import von Qt-Creator-Projekten Projekte mit mehreren Quelldateien Beispiel: Elektronik, gedämpfte Schwingung Folie 1
P1.2. Sicherheitsunterweisung Sicherheitsunterweisung: - Es gilt die Laborordnung - In den Laboren nicht Rauchen, Essen und Trinken - Fluchtwege aus dem Labor auf den Flur ins Treppenhaus - Grüne Fluchtwegemarkierungen an der Flurdecke - Feuerlöscher auf dem Flur, Feuermelder in beiden Treppenhäusern - Im Brandfall keinen Aufzug benutzen (möglicher Stromausfall) - Im Brandfall die Fenster geschlossen halten - Informationen an den Türen: Verhalten im Brandfall, Rufnummern für den Notfall, erste Hilfe Ein Unfall was ist zu tun? - Verbandskästen in den Räumen B362, B372, B0055 (Sekretariat) - Notausschalter sind in allen KCA-Laboren vorhanden Bei Hard- und Softwareproblemen (Login nicht möglich, Fragen zu Netzwerklaufwerken/Backups usw.) hilft Herr Schneider, Raum B350 Folie 2
P1.3. Gliederung Rechnerpraktikum zu Kapitel 1 Wiederholung C-Programmierung Sicherheitsunterweisung Klausur Ingenieurinformatik 1, WS14/15 Export/Import von Qt-Creator-Projekten Projekte mit mehreren Quelldateien Beispiel: Elektronik, gedämpfte Schwingung Folie 3
P1.4. Klausur Ingenieurinformatik 1, WS14/15 Aufgabe 1: Eine Kugel wird zum Zeitpunkt t = 0s schräg nach oben geworfen. Erstellen Sie ein C-Programm, welches die x- und y-koordinaten der Flugbahn (s x und s y ) in Zeitschritten von Δt = 0,01s berechnet und tabellarisch auf dem Bildschirm ausgibt. Bildschirmfoto des Programmablaufs: Folie 4
P1.5. Klausur Ingenieurinformatik 1, WS14/15 Flugbahn der Kugel ( Wurfparabel ): Folie 5
P1.6. Klausur Ingenieurinformatik 1, WS14/15 1. Zu Beginn (t = 0) ist die x-komponente der Geschwindigkeit v x = 5m/s und die y-komponente der Geschwindigkeit v y = 15m/s. Die Kugel befindet sich zu Beginn an der Position s x = s y = 0. 2. Wenn die Koordinaten s x (t), s y (t) und die Geschwindigkeiten v x (t), v y (t) zu einem Zeitpunkt t bekannt sind, können s x (t + Δt), s y (t + Δt) und v y (t + Δt) wie folgt berechnet werden: s x (t + Δt) = s x + Δt v x, s y (t + Δt) = s y + Δt v y, v y (t + Δt) = v y - Δt g (mit g = 9,81 m/s²), die Komponente v x ändert sich nicht. 3. Nach jedem Zeitschritt Δt = 0,01s werden s x, s y und der Betrag der Geschwindigkeit v mit zwei Nachkommastellen ausgegeben. 4. Die Berechnung wird bis zum Zeitpunkt t = 5s durchgeführt. 5. Vor dem Ende des Programms wird der maximale Wert von s y ausgegeben, der während des Programmablaufs aufgetreten ist. Folie 6
P1.7. Klausur Ingenieurinformatik 1, WS14/15 Aufgabe 2: Das Struktogramm auf der folgenden Seite zeigt den Ablauf eines Programms zur Simulation von elektronischen Kippschwingungen. Schreiben Sie ein C-Programm, das genau dem abgebildeten Struktogramm entspricht. 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 7
P1.8. Klausur Ingenieurinformatik 1, WS14/15 Folie 8
P1.9. Klausur Ingenieurinformatik 1, WS14/15 Aufgabe 3a: 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 9
P1.10. Klausur Ingenieurinformatik 1, WS14/15 Aufgabe 3b: 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 10
P1.11. Gliederung Rechnerpraktikum zu Kapitel 1 Wiederholung C-Programmierung Sicherheitsunterweisung Klausur Ingenieurinformatik 1, WS14/15 Export/Import von Qt-Creator-Projekten Projekte mit mehreren Quelldateien Beispiel: Elektronik, gedämpfte Schwingung Folie 11
P1.12. Export/Import von Qt-Creator-Projekten Frage: Wie kopiere ich ein C++-Projekt auf den USB-Stick, um es zur Weiterverarbeitung mit nach Hause zu nehmen? a) Qt Creator legt für jedes C-Projekt ein eigenes Unterverzeichnis an. Schließen Sie zuerst den Qt Creator. b) Nun öffnen Sie den Windows Explorer und kopieren das gewünschte Projektverzeichnis mit dem kompletten Inhalt auf Ihren USB-Stick (eventuell vorher ZIP-Archiv erstellen). c) Das build-xxx-verzeichnis muss nicht kopiert werden! Folie 12
P1.13. Export/Import von Qt-Creator-Projekten Frage: Wie kopiere ich ein C++-Projekt vom USB-Stick auf meinen Rechner, um es dort mit Qt Creator weiter zu bearbeiten? Konkretes Beispiel: Kopieren Sie das Beispielprojekt Matrix_Demo.zip vom Transferlaufwerk ins C++-Projektverzeichnis auf Ihrem Rechner (zum Beispiel U:\Praktikum). Entpacken Sie dort die ZIP-Datei. Folie 13
P1.14. Export/Import von Qt-Creator-Projekten Wechseln Sie nun mit dem Windows Explorer ins Projektverzeichnis (zum Beispiel U:\Praktikum\Matrix_Demo) und löschen Sie dort zunächst die Datei mit der Endung.pro.user! Öffnen Sie dann die Projektdatei mit der Endung.pro per Doppelklick. Löschen Öffnen Folie 14
P1.15. Export/Import von Qt-Creator-Projekten Aufgabe: Übersetzen und starten Sie das Programm Matrix_Demo. Versuchen Sie, den Quelltext des Programms zu verstehen und überprüfen Sie das Berechnungsergebnis mit MATLAB. Folie 15
P1.16. Gliederung Rechnerpraktikum zu Kapitel 1 Wiederholung C-Programmierung Sicherheitsunterweisung Klausur Ingenieurinformatik 1, WS14/15 Export/Import von Qt-Creator-Projekten Projekte mit mehreren Quelldateien Beispiel: Elektronik, gedämpfte Schwingung Folie 16
P1.17. Elektronik, gedämpfte Schwingung Aufgabe: Der Stromverlauf i(t) in einem elektrischen Schwingkreis soll simuliert werden. Zum Zeitpunkt t = 0 ist (von außen) ein Strom i(0) = 30mA eingeprägt und der Kondensator auf eine Spannung von u C (0) = -4,9V geladen. Anschließend wird der Schwingkreis sich selbst überlassen. u C + u R + u L = 0 q di + R i + L C dt q C + R q + L = 0 mit i = dq dt q = 0 q = 1 LC q R L q Anfangsbeding. : q 0 = 4,9V 1µF und q 0 = i(0) = 30mA Folie 17
P1.18. Elektronik, gedämpfte Schwingung Mit den Zustandsvariablen y 1 = q und y 2 = q wird die DGL zweiter Ordnung in ein DGL-System erster Ordnung umgewandelt: y 1 = y 2 y 1 0 = q 0 = 4,9V 1µF y 2 = 1 LC y 1 R L y 2 y 2 0 = i 0 = 30mA In vektorieller Schreibweise mit y = y 1 ; y 2 folgt schließlich: y = 0 1 1/(LC) R/L y y 0 = 4,9V 1µF 30mA Erstellen Sie nun ein neues C++-Projekt und fügen Sie zunächst die Module matrix.c/matrix.h und chart.c/chart.h zum Projekt hinzu. Folie 18
P1.19. Elektronik, gedämpfte Schwingung Zur Verwendung des Chart-Moduls muss in der Projektdatei (mit der Dateiendung.pro) die folgende Zeile angefügt werden: LIBS += -luser32 -lgdi32 -lcomdlg32 Wählen Sie nun den Menüpunkt Erstellen: qmake ausführen, jetzt kann der Quelltext des Programms eingegeben werden. 2x2-Matrix M definieren und mit Werten belegen, Vektoren y = y 1 ; y 2 und y = y 1 ; y 2 definieren, Integer-Variable i definieren Vektor y = y 1 ; y 2 mit Anfangswerten belegen Für alle i von 0 bis (Simulationsschritte 1) Ableitungen mittels y = M y berechnen y y + t y berechnen (Euler-Verfahren) Aktuellen y 2 -Wert (= Strom) in Chart darstellen Chart auf dem Bildschirm anzeigen #include "chart.h" #include "matrix.h" #define L 0.15 #define R 170. #define C 1e-6 #define U 4.9 #define I 0.03 #define DELTA_T 1e-6 #define STEPS 10000 int main(void) { double M[2][2] = double y[2], dy_dt[2]; Folie 19
P1.20. Elektronik, gedämpfte Schwingung ma Folie 20