480 likes | 574 Views
Informatik 1. Übung 6. Übung 6. Nachbesprechung. Ich gebe nicht auf. Code schön formatieren. if ( x > 0) { a = 1; b = 1; // Kommentar. if (y > 0) { c = 1; } else { d = 1; } e = 1; }. Maximaler Wert im Array. Programmiermuster.
E N D
Informatik 1 Übung 6
Übung 6 Nachbesprechung
Ich gebe nicht auf • Code schön formatieren if (x > 0) { a = 1; b = 1; // Kommentar. if (y > 0) { c = 1; } else { d = 1; } e = 1; }
Maximaler Wert im Array • Programmiermuster const int N = 100; // Anzahl Elemente int data[N]; // Das Array int maximum = 0; // Maximales bisher gefundenes Element // Alle Elemente durchprobieren for(int i=0; i<N; i++) { // Elementweise mit dem bisheringen Maximum vergleichen if (data[i] > maximum) { maximum = data[i]; } }
Quiz • Was gibt das Programm aus? int x = 10; int y = 20; cout << x;
Quiz • Was gibt das Programm aus? int x = 10; int y = 20; int* p = &y; cout << p;
Quiz • Was gibt das Programm aus? int x = 10; int y = 20; int* p = &y; cout << *p;
Quiz • Was gibt das Programm aus? int x = 10; int y = 20; int* p; cout << *p;
Quiz • Was gibt das Programm aus? int x = 10; int y = 20; int* p = &x; *p = 11; p = &y; *p = 21; cout << x; cout << y;
Quiz • Was gibt das Programm aus? int x[2] = {10, 20}; cout << (x+1);
Quiz • Was gibt das Programm aus? int x[2] = {10, 20}; cout << *x + 1;
Quiz • Was gibt das Programm aus? int x[2] = {10, 20}; cout << *(x + 1);
Quiz • Was gibt das Programm aus? int x[4] = {1,2,3,5}; cout << *(x + x[*(x + 1)]);
Listen • Dynamische Datenstrukturen • Besteht aus Zellen • Daten • Zeiger auf nächste Zelle • Zellen werden bei Bedarf erstellt
Listen • Dynamische Datenstrukturen • Besteht aus Zellen • Daten • Zeiger auf nächste Zelle • Zellen werden bei Bedarf erstellt data data data data head next next next next
Listen data data data data knoten head next next next next struct knoten { int data; // Daten der Zelle knoten* next; // Nächste Zelle } knoten* head; // Anfang der Liste (globale Variable)
Listen data data data data head next next next next // Anfang der Liste knoten* head; // Wie komme ich zum markierten Element?
Listen data data data data head next next next next // Anfang der Liste knoten* head; // Wie komme ich zum markierten Element? head->next->next->data
Listen data data data data head next next next next // Anfang der Liste knoten* head; // Wie erstelle ich ein neues Element?
Listen data data data data data head next next next next k next // Anfang der Liste knoten* head; // Wie erstelle ich ein neues Element? knoten* k = new knoten; k-> next = head; head = k;
Listen data data data data head next next next next // Anfang der Liste knoten* head; // Wie gebe ich alle Elemente aus?
Listen data data data data k head next next next next // Anfang der Liste knoten* head; // Wie gebe ich alle Elemente aus? knoten* k = head; while(k != NULL) { cout << k->data; k = k->next; }
Vorlesung 6 wiederholung
Referenzen • Wie Zeiger, aber • zeigen immer auf das selbe • können nicht „umgehängt“ werden • sind immer initialisiert
Referenzen • Schreibweise // Schreibweise typ& name = ziel; // Ganze Zahl x int x = 1; // y zeigt auf x int& y = x; // Verändert den Wert von x von 1 auf 2 y = 2;
Referenzen • Vergleich mit Zeigern
Funktionen • Auslagern von Funktionalität • Wie mathematische Funktionen • y = f(x) • Rückgabewert • Argumente
Funktionen • Schreibweise // Schreibweise rückgabe-typ name(argument-typargument-name, ...) { ... returnresultat; } // Schreibweise int summe(int a, int b) { return a + b; }
Funktionen • Alle Typen erlaubt • ausser Arrays als Rückgabewerte • Kein Rückgabewert • void verwenden // Schreibweise void summe(int a, int b) { }
Funktionen • Aufruf von Funktionen // Summiert zwei Zahlen int summe(int a, int b) { return a + b; } // Benutzt die summe-Funktion int main() { int i = summe(1,2); }
Funktionen • Aufruf von Funktionen • Funktion muss definiert sein • Typen müssen stimmen
Funktionen • Prototypen • Deklariert eine Funktion, die später implementiert wird // Schreibweise int summe(int a, int b); // Schreibweise int summe(int, int);
Funktionen • Aufbau .cpp-Datei // Bibliotheken #include <iostream> // Globale Variablen – überall sichtbar int evil; // Funktionen int summe(int a, int b) { int r = a + b; // lokale Variable – nur im Block sichtbar return r; }
Funktionen • Funktionsargumente • Typen müssen stimmen • Werte werden kopiert int summe(int a, int b) { return a + b; } int main() { int x = 1; int y = 2; int i = summe(x,y); }
Funktionen • call by value void increase(int x) { x = x + 1; } int main() { int i = 1; increase(i); cout << i; }
Funktionen • call by reference void increase(int&x) { x = x + 1; } int main() { int i = 1; increase(i); cout << i; }
Quiz • Was gibt das Programm aus? int summe(int a, int b) { return a + b; } int main() { cout << summe(1,1); }
Quiz • Was gibt das Programm aus? int summe(int a, int b) { return a + b; } int main() { cout << summe(1, “abc“); }
Quiz • Was gibt das Programm aus? int summe(int a, int b) { return a + b; } int main() { cout << summe(1.9f, 1.8f); }
Quiz • Was gibt das Programm aus? int summe(int a, int b) { return (a + b) / 2.0f; } int main() { cout << summe(1, 2); }
Quiz • Was gibt das Programm aus? int increase(int a) { ++a; return a; } int main() { int x = 1; increase(x); cout << x; }
Quiz • Was gibt das Programm aus? int increase(int&a) { ++a; return a; } int main() { int x = 1; increase(x); cout << x; }
Quiz • Was gibt das Programm aus? int increase(int&a) { ++a; return a; } int main() { int a = 1; int x = 2; x = increase(x); cout << a; }
Serie 7 Übung
Turtle-Graphik • SchildkrötemitFarbe • Richtung • Position • Funktionssyntax • :: TeilvomFunktionsnamen // Bewegt die turtle 10 pixel vorwärts. ifm::forward(10);
Raytracer • Fertiges Programm • Zwei Funktionen implementieren • Diese werden bereits verwendet
Raytracer • Vector3f • magischerTyp • Vektoraddition und Skalarmultiplikation Vector3f v1, v2, v3; // Vektoraddition v1 = v2 + v3; // Skalarprodukt float f = v1.dot(v2); // Normalisiert den Vektor v1. normalize();