Informatik I Übung 2 : Programmieren in Eclipse 5. März 2014 Daniel Hentzen dhentzen@student.ethz.ch
Downloads : http://n.ethz.ch/~dhentzen/download/
Heute 1. Nachbesprechung Übung 1 2. Theorie 3. Vorbesprechung Übung 2
Übung 1 : Linux, Terminal und Kompilieren
Linux Terminal...
Hello World... argc, argv
Fehler
im Debugger nur Debugger-Befehle benutzen!
auf Gross -und Kleinschreibung achten!
falls nicht im korrekten Verzeichnis : ganzen Pfad angeben Dateiendung nicht vergessen falls [info1@virtualfedora ~] $ verschwindet : ctrl -c Kompilieren : g++ -c main.cpp g++ -o Programmname main.o
Prüfungsaufgabe Sommer 2013
"Die Datei test.txt befindet sich im Ordner Info1/2013/Test/. Verschieben Sie diese Datei in das Verzeichnis 2013 und benennen Sie sie um in test2.txt " Lösung : mv Info1/2013/Test/test.txt Info1/2013/test2.txt
Theorie
Einführung in Eclipse Elemente eines C++ Programmes Input / Output (cin / cout) Datentypen Variablen (Deklaration und Zuweisung) Arithmetische Operatoren Typenumwandlung
Eclipse
How to get started... 1. "File > New > C++ Project" 2. Projekt Namen eingeben (z.bsp : Serie2) 3. Linux GCC auswählen 4. Finish 5. Rechtsklick auf [Projektname] in der linken Spalte 6. "New > File" 7. Filename.cpp eingeben (z.bsp : aufgabe1.cpp) keine Sonderzeichen benutzen!
Programm ausführen 1. Speichern 2. Kompilieren "Hammer" (Build Debug) 3. Ausführen "Grüner Pfeil" (Play) Regelmässig speichern!
eigene Argumente : " Run Configurations... > Arguments " Aufruf im Programm mit argv[ ]
Elemente eines C++ Programmes
Präprozessor #include<iostream> using namespace directive main () - Funktion Eingabe und Ausgabe mit cin und cout Objekten Deklaration und Verwendung von Variablen
main() - Funktion muss in jedem C++ Programm vorliegen hier werden Anweisungen erteilt
main() - Funktion Funktionskopf : int main() // Teil vor main gibt Rückgabetyp an (hier: integer) Funktionskörper : { statements; // Anweisungen mit Semikolon enden! return 0; // Beendet die Funktion und gibt 0 zurück. } main() oder main(void) : Funktion ohne Argumente mean(int a, int b) : Funktion mit Argumenten
Output (cout) cout : vordefiniertes Objekt gibt einen Zeichenstrom aus (ostream) kann viele verschiedene Datentypen ausgeben << übergibt Daten an cout Konkatenation
cout << "This is Info1"; // zur Ausgabe der Zeichen in Anführungszeichen cout << "Konka" << "tenation"; // Konkatenation int var = 3; cout << "Die Variable beträgt : " << "var"; cout << "Die Variable beträgt : " << var; // Ausgabe von Variablen cout >> "This is Info I"; // invalid "This is Info I" >> cout; // invalid Achtung :
cout << "line1" << endl; cout << "line2"; cout << "line1\n"; cout << "line2"; cout << "line1" << endl << "line 2"; cout << "line1\nline 2; Formatiere n in neue Linie springen cout << "line1 endl line2"; // invalid cout << "line1" << \n << "line2"; // invalid
Input (cin) Dateneingabe an das Programm cin liest Zeichenstrom (istream) weist Variablen zu aufpassen auf Typen! (siehe Typenumwandlung) >> übergibt Daten an cin Konkatenation
int i; cin >> i; int a; int b; cin >> a >> b; // Konkatenation implizite Typenumwandlung : int a; cin >> a; // falls Benutzer einen String eingibt, a=0 // falls Benutzer einen Kommazahl eingibt, wird die Zahl abgerundet int a,b; cin >> a; // Programm wartet auf Input // Input : 65 73 cin >> b; // b = 73;
Beispiel
Variablen
Deklaration : <type> <name>; int fleas; // macht den Namen "fleas" für ein C++ Programm kenntlich // deklariert den Namen "fleas" vom Typ Integer und ordnet Speicher zu Variablendeklaration an beliebigen Stellen im Programm auf Gültigkeitsbereich achten (scope)!
Einige Datentypen :
Erlaubte Variablennamen alphabetische Zeichen, Ziffern und underscore (_) erstes Zeichen darf keine Ziffer sein! Name sollte nicht mit _ beginnen... keine C++ Wörter! (main, int, for,...) Case-sensitive! (Gross-/Kleinschreibung)
int firstname; // valid int Firstname; // valid, unterscheidet sich von "firstname" int info2014; // valid int 2014info; // invalid, erstes Zeichen ist eine Zahl int what_a_great_name; // valid int var!; // invalid, enthält Sonderzeichen int main; // invalid, C++ keyword int main_test; // valid int _thisvar; // valid, sollte aber nicht benutzt werden
Zuweisung int a; // Deklaration a = 3; int a,b,c; // Deklaration in Serie a = b = c = 5; in Serie :
Arithmetische Operatoren + - * / % % : modulo : gibt den Rest einer Division an Bsp : 7 % 3 = 1 Klammern > Operatoren /, *, mod > +, - sonst : links nach rechts
5 * 4 + 1; 5 * (4 + 1); 2 * 3 + 3 * 4 / 2; 9 % 4 + 1; 9 % (4 + 1); 5 * 3 % 4 * 2; 5 * (3 % 4) * 2; // 30
Typenumwandlung float a = 3.14 int b = a; Die Variable b kann keine reelle Zahl abspeichern. Der Wert der b zugewiesen wird, wird umgewandelt. Nachkommastellen werden abgeschnitten. b = 3 Wenn ein numerischer Wert einer Variable eines anderen Typs zugewiesen wird, passt sich der Typ des Werts an den Typ der empfangenden Variable an.
Umwandlung in arithmetischen Operationen 5.453f * 3 * 9.86 = float/int/double?? Faustregel : C++ wandelt Ausdruck in den "generellen" Typ um. float * int = float float * double = double 5.453f (float) * 3 (int) * 9.86 (double) = 16.359 (float) * 9.86 (double) = 161.29974 (double)
Achtung : Integer Division 5 / 2 == 2 // 0.5 wird abgeschnitten 1 / 2 == 0 // hier auch
Mehr Beispiele 13.0f * 4 = 52.0 (float) 7.0 * (3 / 7) = 0.0 (double) 20 / (10 / 6) = 20 (int) 20 / (10.0 / 6) = 12 (double)
Übung 2 : Programmieren in Eclipse
Aufgabe 1 : Eclipse Starten
Aufgabe 2 : Neues Projekt erstellen
Aufgabe 3 : Temperaturumwandlung
Achtung auf Integer Division! welcher Datentyp wird benötigt? integer? float? double?
Aufgabe 4 : Erweiterte Temperaturumwandlung
Programmargumente sind strings (Zeichenketten) falls damit gerechnet werden soll, müssen sie in eine Zahl umgewandelt werden! atof - Funktion benutzen! in <stdlib.h> definiert im Header "includen" http://www.cplusplus.com