Mastering Programming with Arrays and Functions
Learn about arrays, functions, references, structures, and dynamic data structures in programming. Practice code formatting and understand function calls by value and reference.
Mastering Programming with Arrays and Functions
E N D
Presentation Transcript
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();