LeMoS Einführung in die C++ Programmierung für Ingenieure M ATTHIAS WALTER / J ENS K LUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 1 / 21 LeMoS Inhaltsverzeichnis Grundlagen Kompilieren unter Linux Basisstruktur eines C++ Programms Grundlegende Begriffe Grundstrukturen Übungen Rechenoperationen Kräfteberechnung Härtebestimmung nach Brinell 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 2 / 21 LeMoS Inhaltsverzeichnis Grundlagen Kompilieren unter Linux Basisstruktur eines C++ Programms Grundlegende Begriffe Grundstrukturen Übungen Rechenoperationen Kräfteberechnung Härtebestimmung nach Brinell 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 2 / 21 LeMoS Kompilieren von C++ Programmen unter Linux Kompilieren user: g++ dateiname.cpp -o Programmname Ausführen des Programms user: ./Programmname 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 3 / 21 LeMoS Basisstruktur eines C++ Programms #include <Bibliotheksname> #include "Bibliotheksname" using namespace std; int main() { .... return 0; } 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 4 / 21 LeMoS Begriffe Bibliothek Sammlung nützlicher Funktionen und Klassen Anweisungen, zusammengefasst durch geschweifte Klammern Block Programm zum Übersetzen des Quellcodes in Objektcode Compiler Deklaration Definition Einführung und Bekanntmachung eines Bezeichners (z.B. Variablenname) gegenüber dem Compiler im Quellcode Reservierung von Speicher für Bezeichner Initialisierung Wertezuweisung an Bezeichner (Füllen der Variable) Linker 14. November 2012 Programm, das aus kompilierten Quellcode eine ausführbare Programmdatei erstellt. c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 5 / 21 LeMoS Grundstrukturen Kommentare • Wichtig: So häufig wie möglich verwenden, für bessere Lesbarkeit des Quellcodes Verwendung von Kommentaren // <- leitet Kommentar für eine Zeile ein /* Die Zeichenkombination "/*" leitet einen Kommentar über mehrere Zeilen ein wobei "*/" den Kommentar beendet */ 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 6 / 21 LeMoS Grundstruktur Namensräume I • Namensräume erlauben es, dass unabhängig voneinander entwickelte Quellcodes Funktionen gleichen Namens beinhalten und verwenden dürfen namespace test2 namespace test { { int number; int number; int count(); int count(); } } .... { sum=test::number+test2::number; sum=test::count(); } 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 7 / 21 LeMoS Grundstruktur Namensräume II • Durch die Verwendung des Befehls "using"können Namensräume auch benutzt werden, ohne das vor jedem Bezeichner der Namensraum konkret genannt werden muss • Allerdings, bei Verwendung von mehr als einem Namensraum weniger sinnvoll Verwendung des Befehls using { } using namespace test; sum=number; 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 8 / 21 LeMoS Grundstruktur Datentypen Datentypen short int unsigned short int int long int unsigned int float double long double char signed char unsigned char string 14. November 2012 Wertebereich -32768 bis 32768 0 bis 65535 -2147483647 bis 2147483647 -2147483647 bis 2147483647 0 bis 4294967295 1.2 · 10−38 bis 3.2 · 1038 2.2 · 10−308 bis 1.7 · 10308 3.3 · 10−4932 bis 1.7 · 104932 -128 bis 128 -128 bis 128 0 bis 255 variabel Speicherbedarf 2 Byte 2 Byte 4 Byte 4 Byte 4 Byte 4 Byte 8 Byte 10 Byte 1 Byte 1 Byte 1 Byte dynamisch c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 9 / 21 LeMoS Grundstruktur Variablen • • Aufbau: Datentyp Bezeichner = Wert Zugriff: über Name oder Adresse (Pointerarithmetik) Deklaration und Initialisierung einer/mehrerer Variablen { } int number; //Definition einer und int number1, number2, number3; //mehrerer Variablen int* pNumber; //Deklaration number = 1; 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 10 / 21 LeMoS Grundstruktur Konstanten • • Aufbau: const + Name + Wert Besonderheiten: 1.) müssen bei Definition gleichzeitig initialisiert werden 2.) Wert kann nicht verändert werden 3.) Notation: meist mit Großbruchstaben bezeichnet Deklaration und Initialisierung einer Konstante { } const int number = 100; 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 11 / 21 LeMoS Grundstruktur Operatoren - Übersicht • Operatoren beschreiben Operationen, die auf den jeweiligen Datentypen definiert sind. • Besondere Operator ist der Zuweisungsoperator “=”, mit dem ein Wert einer Variablen zugewiesen wird. Operator + * / % ++ -14. November 2012 mathematische Bezeichnung Addition Subtraktion Multiplikation Division modulo Division Inkrement (Erhöhung) um 1 Dekrement (Verminderung) um 1 Datentyp reelle Zahlen reelle Zahlen reelle Zahlen reelle Zahlen ganze Zahlen ganze Zahlen ganze Zahlen c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 12 / 21 LeMoS Grundstruktur Operatoren - Verwendung Verwendung von Operatoren a b c d f g = = = = = = a b c d f g + * / + - 14. November 2012 5; 5; 5; 5; 1; 1; // // // // // // verkürzt verkürzt verkürzt verkürzt verkürzt verkürzt a += b -= c *= d /= f++; g--; 5; 5; 5; 5; c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 13 / 21 LeMoS Grundstruktur Operatoren - Besonderheiten Besonderheit beim Inkrement und Dekrement: Präfix/Postfix int x=10, y=15; y y y y = = = = ++x; x++; --x; x++; 14. November 2012 // // // // Präfix liefert y = 11, x = 11 Postfix liefert y = 10, x = 11 Präfix liefert y = 9, x = 9 Postfix liefert y = 10, x = 9 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 14 / 21 LeMoS Grundstruktur Operatoren - Vergleichsoperatoren Operator == != <= >= < > mathematische Bezeichnung Addition Subtraktion Multiplikation Division modulo Division Inkrement (Erhöhung) um 1 Verwendung von Vergleichsoperatoren 5==10 //falsch 22.3>3 //richtig 22.3<3 //falsch ... 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 15 / 21 LeMoS Grundstruktur Operatoren - logische Operatoren Operator && || ! mathematische Bezeichnung logisches UND logisches ODER negation bzw. Verneinung Verwendung von logischen Operatoren (5==10) && (13.3 == 13.3) (5==10) || (13.3 == 13.3) 14. November 2012 //falsch //richtig c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 16 / 21 LeMoS Grundstruktur Standard Eingabe und Ausgabe • Eingabe: cin / Ausgabe: cout (aus dem Namensraum std) Ein- und Ausgabe int number1=100; int number2=0; std::cout << "Text" << std::endl; // Ausgabe von Text std::cout << number1 << std::endl; // Ausgabe Wert einer Variable std::cout << "Text" << number1<<std::endl; // verknüpfte Ausgabe std::cin >> number2; // Eingabe einer ganzzahligen Zahl 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 17 / 21 LeMoS Übungen 1.) Schreibe ein Programm, welches die folgenden Rechenoperationen berehnet und das Ergebnis ausgibt a) double x = int a + int b b) double x = double a + double b c) double x = int a+ double b d) double x = double a double b e) double x = int a double b f) double x = double a int b g) string x = String1 + String2 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 18 / 21 LeMoS Übungen 2.) Welches Ergebnis ist zu erwarten, wenn in 1.b) die Ergebnisvariable “x” als int (Integer) deklariert wird. Hinweis: Welche Genauigkeit kann mit dieser Rechenoperation dann noch erreicht werden? 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 19 / 21 LeMoS Übungen 3.) Kräfteberechnung Gegeben ist die in der Abbildung dargestellte Kräfteverteilung. Erstelle ein Programm, in dem die Kräfte und die jeweiligen Hebelarme (bezüglich Punkt O) vom Benutzer y eingegeben werden können. 1.5m F~ = r P ~ =1 F F2=100N n i i 1m ~ |= |F qP M = P r i =x ,y ,z F1=300N F~ 2 F3=250N ri 1m r ~ =1 a · F n i 14. November 2012 i i O 2m c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY x 20 / 21 LeMoS Übungen 4.) Härtebestimmung nach Brinell a) Berechne die Eindringtiefe h der Hartmetallkugel unter Angabe des Kugelradius r sowie des Eindruckradius x . b) Die Brinellhärte ist definiert als das Verhältnis von Prüfkraft zur Eindruckoberfläche und kann mit folgender Formel direkt berechnet werden: 0.102 √·2 F2 2 , HBW = D (D − D −d ) r h π wobei F ist die Kraft, D = 2 r der Kugeldurchmesser und d = 2 x der mittlere Eindruckdurchmesser. Ergänze das Programm Programm um diese Rechnung. Hinweis: Verwende den Satz des Pythagoras und stelle die Formel nach h um. Überlege welche der Lösungen sinnvoll ist. x 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK | FACULTY OF MECHANICAL ENGINEERING AND MARINE TECHNOLOGY 21 / 21