Informatik 1 ( ) D-MAVT F2010. Letzte Übungsstunde. Yves Brise Übungsstunde 12

Ähnliche Dokumente
Informatik I (D-MAVT)

Elementare Datentypen in C++

Kurze Einführung in die Programmiersprache C++ und in Root

0. Einführung & Motivation

2. Semester, 2. Prüfung, Lösung

RO-Tutorien 3 / 6 / 12

3. Semester : 1. Prüfung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Angewandte Mathematik und Programmierung

1.4. Funktionen. Objektorientierte Programmierung mit C++

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Verwendung von Klassen in C++

Zeiger, Arrays und Strings in C und C++

Einführung in die Programmierung

Praktikum Betriebssysteme 1. Aufgabe (1)

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

Die Programmiersprache C99: Zusammenfassung

Quiz und Übungen. C++ Übung am 19. Mai 2016

Probeklausur: Programmierung WS04/05

4 Schleifen und Dateien

Probeklausur: Programmierung WS04/05

Meeting C++ C++11 R-Value Referenzen

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Programmierung mit C Zeiger

Zählen von Objekten einer bestimmten Klasse

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Einführung in die Programmierung

Klausurvorbereitung Lösung

Objektorientierte Programmierung mit C++ Vector und List

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Grundlegende Anweisungen in C++

Assoziative Container in C++ Christian Poulter

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Advanced Programming in C

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Aufgabe 5: Die Paderbox

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Grundlagen. Kapitel 1

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

5. Elementare Befehle und Struktogramme

Einstieg in die Informatik mit Java

AuD-Tafelübung T-B5b

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Die abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,

Informatik 1 ( ) D-MAVT F2011. Einführung C++ Yves Brise Übungsstunde 1

Klausur in Programmieren

Vergleich verschiedener OO-Programmiersprachen

Übung HP Beispielaufgaben 3

Errata-Liste zum Kurs: Einführung in die Programmiersprache C++ (9. Auflage)

Vorkurs C++ Programmierung

Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015)

5.5.8 Öffentliche und private Eigenschaften

Hochschule Darmstadt Informatik-Praktikum WS 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

Modellierung und Programmierung

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

5. Tutorium zu Programmieren

Einführung in die Programmierung mit C++

Einstieg in die Informatik mit Java

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Einführung in die Programmierung Wintersemester 2011/12

Der C++ Crashkurs v1.0

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

CORBA Implementierung von Client und Server

Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung

Relationen-Algebra und Persistenz Teil I

Tutorium Rechnerorganisation

5.4 Klassen und Objekte

Objektbasierte Entwicklung

Algorithmen zur Datenanalyse in C++

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Einführung in C++ Operatoren überladen (Klassen)

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Einführung in die Programmierung

Technische Infor matik 2 C/C++-Kurs. Datenabstraktion (Klassen) 2005 AG Rechner netze 4.1

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Welche Informatik-Kenntnisse bringen Sie mit?

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

1. Übung zu "Numerik partieller Differentialgleichungen"

Programmier-Befehle - Woche 10

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

Übungspaket 23 Mehrdimensionale Arrays

Codingstandard. Softwareentwicklung Praktikum Stand:

Operatoren und Ausdrücke

Deklarationen in C. Prof. Dr. Margarita Esponda

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

PIWIN 1 Übung Blatt 5

Übungen zu C++ Kapitel 1

Fakultät Angewandte Informatik Lehrprofessur für Informatik

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektorientierung Grundlagen

Transkript:

Informatik 1 (251-0832-00) D-MAVT F2010 Letzte Übungsstunde

Evaluation S3 Frage zu Assistierenden INFK Anz. Der/die Assistent/in war fachlich k.ä. 0 kompetent 1 0 2 0 3 0 4 23% 3 5 77% 10 MW = 4.8 SA = 0.4 ungültig 0 gültig 13 k.ä. 1 2 3 4 5 23% 50% 100% 77% MW = 4.8 SA = 0.4 un ülti 0 ülti 13 S4 Frage zu Assistierenden INFK Anz. Der/die Assistent/in vermochte den k.ä. 0 Stoff verständlich und anschaulich 1 0 zu erklären 2 0 3 31% 4 4 62% 8 5 8% 1 MW = 3.8 SA = 0.6 ungültig 0 gültig 13 k.ä. 1 2 3 4 5 8% 50% 100% 31% 62% Kommentare: Mehr Tipps für die Übungen wären hilfreich gewesen. Punktevergabe ok - eher streng.

Nachbesprechung Blatt 10 Im Konstruktor müssen alle Datenmitglieder initialisiert werden. cpolynom::cpolynom() { for (i = 0, i <= deg, ++i){ coef[i] = 0; // alle Koeffizienten auf 0 setzen cpolynom::cpolynom() { deg = 0; coef = new double[1]; coef[0] = 0.0;

Nachbesprechung Blatt 10 Der Zuweisungsoperator soll das Objekt auf der linken Seite der Zuweisung verändern! cpolynom cpolynom::operator= (const cpolynom& rhs) { cpolynom ret; ret.deg = rhs.deg; for (int i = 0; i <= deg; ++i) ret.coef[i] = rhs.coef[i]; return ret; cpolynom& cpolynom::operator= (const cpolynom& rhs) { if (this!= &rhs) { delete[] this->coef; this->coef = new double[rhs.deg+1]; this->deg = rhs.deg; for (int i = 0; i <= this->deg; ++i) this->coef[i] = rhs.coef[i]; return *this;

Nachbesprechung Blatt 10 cpolynom cpolynom::operator+ (const cpolynom &rhs) { cpolynom sum = *this ; if (sum.deg < rhs.deg) sum.deg = rhs.deg; for (int i = sum.deg; i >= 0; --i) sum.coef[i] += rhs.coef[i]; return sum; Beim operator+ braucht man ein Objekt mit dem richtigen Speicherplatz! cpolynom cpolynom::operator+ (const cpolynom &rhs) { cpolynom sum; if (this->deg >= rhs.deg) { sum = *this; for (int i = rhs.deg; i >= 0; --i) sum.coef[i] += rhs.coef[i]; else { sum = rhs; for (int i = this->deg; i >= 0; --i) sum.coef[i] += this->coef[i]; return sum; Man könnte den Ansatz oben auch dadurch reparieren, dass man die Funktion realloc verwendet. Eher kompliziert, aber leicht effizienter...

Nachbesprechung Blatt 10 Anstelle von const int kann auch int gebraucht werden; nur umgekehrt nicht. void foo (const int& a); void bar (int& b); int a; const int b; foo(a); // OK foo(b); // OK bar(a); // OK bar(b); // NOK Nach einer Funktionsdefinition braucht es kein Semikolon. Dies ist nur nach Klassendefinitionen (wozu auch structs gehören) notwendig. void foo (const int& a) {... ; // Semikolon nicht nötig

Nachbesprechung Blatt 11 Aufgabe 1 - Memory Layout Die eine Variante traversiert das Feld nicht in der natürlichen Weise. Dadurch kommt es aufgrund der Grösse des Feldes vermehrt zu Ladeanweisungen. int a[n][4]; a[0] a[1] a[2]... Aufgabe 3 - Raytracer erweitern In der letzten Stunde haben Sie gesehen, wie zwei Spiegel in der Szene aussehen. Falls Sie selbst ein interessantes Bild generiert haben, können Sie dieses an Cyril Flaig <cflaig@inf.ethz.ch> senden. Es wird gegebenenfalls auf der Homepage veröffentlicht.

Nachbesprechung Blatt 11 Aufgabe 2 - Ausdrücke b) Wenn man die Funktion f auf die doubles a und b anwendet, ist der Betrag des Resultates ungerade und grösser als 12. int f (double, double); double a, b; (f(a,b) > 12 f(a,b) < -12) && f(a,b) % 2!= 0; c) Der Quotient von x und y ist ein Teiler von 30, wobei y nicht Null ist. int x, y; y!= 0 && 30 % (x / y) == 0;

Nachbesprechung Blatt 11 Aufgabe 2 - Ausdrücke d) Der double q ist eine ganzzahlige Quadratzahl. #include <cmath> double q; (static_cast<int>(sqrt(q)) * static_cast<int>(sqrt(q))) == q; e) Wenn x grösser ist als y, dann ist y ein Teiler von x. int x, y; x <= y x % y == 0;

Blatt 12, Aufgabe 1 Stammbaum Definieren Sie eine geeignete Struktur, um den folgenden Stammbaum zu speichern. Die Stuktur soll den Namen der Person und einen Zeiger auf deren Vater und deren Mutter enthalten. Person shmi = { Shmi, 0, 0; Person anakin = { Anakin, 0, &Shmi;... Für c) können Sie davon ausgehen, dass alle relavanten Zeiger nicht-null sind. Für d) verwenden Sie einen STL Container!

Blatt 12, Aufgabe 2 Benutzernamen generieren int main(int argc, int* argv[]) { if (argc!= 2) return 1; ifstream infile(argv[1]); if (!infile) { cout << "Kann Datei " << argv[1] << " nicht oeffnen!" << endl; return 1; string vorname, name; string usernames; infile >> vorname >> name; while (!infile.eof()) { // Generiere Benutzernamen und gib ihn aus infile >> vorname >> name; return 0; Namen und Vornamen aus einer Datei auslesen und eindeutige Benutzernamen generieren. Die Benutzernamen sollen: genau 6 Zeichen enthalten. aus kleinen Buchstaben bestehen. tolower(char) wenn möglich aus Vorund Nachnamen bestehen (z.b. Yves Brise ybrise).

Blatt 12, Aufgabe 2 Schreiben Sie eine Funktion, die aus einem zusätzlichen Vornamen und Nachnamen den Benutzernamen generiert. Dazu hat die Funktion Zugriff auf die bislang generierten Benutzernamen (usernames). string genusername(string vorname, string nachname, string &usernames); Suchen Sie in den schon generierten Namen nach den neuen Kandidaten. string tmpuser; size_t found = string::npos; found = usernames.find(tmpuser); if (found == string::npos) { // Name existiert noch nicht! Weitere Tipps zum Gebrauch der string Klasse und Datei Ein- und Ausgabe finden Sie auf den Folien zur Vorlesung 11; insbesondere auf Folien 7 und 17ff.

Prüfungsaufgabe String-Zahl-Umwandlung (22 von 120 Punkten) Schreiben Sie die Funktion convert_a_to_i, welche einen String (char*) in eine positive ganze Zahl umwandelt. Z.B. soll 42 in 42 umgewandelt werden. Überlegen Sie sich die Signatur der Funktion und implementieren Sie sie. Der Rückgabewert soll die Zahl als int sein oder -1 falls ein Fehler auftritt. Mögliche Fehler sind: Die Zahl ist negativ. Der String enthält auch Zeichen, die keine Ziffern sind. Der String hat die Länge 0. Das Zeichen 0 hat ASCII Code 48 und das Zeichen 9 hat den Code 57.

Prüfungsaufgabe Lösung #include <iostream> int convert_a_to_i(char* string, int n) { if (n <= 0) return -1; int ret = 0; int cur; for (int i = 0; i < n; ++i) { ret *= 10; cur = static_cast<int>(string[i]) - 48; if (cur < 0 cur > 9) return -1; ret += cur; return ret; int main() { std::cout << convert_a_to_i("123s", 4) << std::endl; std::cout << convert_a_to_i("-123", 4) << std::endl; std::cout << convert_a_to_i("1239887", 7) << std::endl; return 0;

Goodbye Wie schon mehrfach erwähnt: Heute ist die letzte Übungsstunde! Abgaben zu Serie 12 bitte ausschliesslich per Email. Die Korrekturen und Testatinfos kommen auch per Email zurück (bis spätestens 8.6.). Korrigierte und nicht abgeholte Serien können sie bei mir im Büro abgeholt werden. Sie sind ab dem 27.5. bei Frau Salow CAB G19.1 hinterlegt. Bitte Legi mitbringen. ACHTUNG: Wir werden die Serien für 4 Wochen aufbewahren; danach werden sie entsorgt. Viel Erfolg bei der Prüfung!