Tutorium Software-Engineering SS14 Florian Manghofer.

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Programme in C++.
Ein- und Ausgabe von Dateien
Funktionen, Felder und Parameter-übergabe
Funktionen.
Forschungszentrum caesar
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Indirekte Adressierung
SWITCH - Anweisung.
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Erweiterte Zuweisungskompatibilität
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
ARRAY oder FELD oder VEKTOR
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Abstrakter Datentyp in C++ I - Klasse -
Repetitorium PG : Pointer FH-Darmstadt, FB Informatik.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Informatik 1 Letzte Übung.
Dynamische Datentypen
Parameterübergabemechanismen für den Methodenaufruf
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Programmiervorkurs WS 2014/15 Instanzmethoden
Repetitorium PG : Standard Template Library FH-Darmstadt, FB Informatik.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
IOStreamLibrary.
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
IOStreamLibrary.
Einführung in die Programmierung
Implementieren von Klassen
 Präsentation transkript:

Tutorium Software-Engineering SS14 Florian Manghofer

Zeiger (Pointer) 1.1 Was ist das Ergebnis der folgenden Berechnung? (SS09 4.1) int myFeld[] = { 1, 2, 3, 4, 5 }; int result = myFeld[3] + myFeld[4]; Ergebnis: 4+5 = Was gibt das Programm nach folgendem Aufrufen aus? Begründen Sie (SS09 4.2) cout <<*myFeld; cout <<myFeld; 1 0x6ff3 //Name des Feldes ist Zeiger auf das erste Feldelement //“* gibt den Wert aus, auf das er zeigt“ //Ohne * wird der Wert des Zeigers also von myFeld ausgegeben //Da Zeiger Adressen als „Wert“ haben, wird die Adresse des ersten //Feldelements ausgegeben

Klassenvariablen 2. Folgendes Programm liegt vor. (WS09/10 4.) #include using namespace std; class Counter { private: static int count; public: Counter() { ++count; cout<<"Es existieren "<<count<<" Objekte”<<endl; } }; int Counter::count = 0; int main() { Counter a, b; Counter c, d; Counter e, f; system ("Pause"); } 2.1 Was gibt das Programm auf dem Bildschirm aus? Skizzieren Sie die Bildschirmausgabe. Es existieren 1 Objekte Es existieren 2 Objekte Es existieren 3 Objekte Es existieren 4 Objekte Es existieren 5 Objekte Es existieren 6 Objekte 2.2 Was würde das Programm ausgeben, wenn man keine Klassenvariablen verwendet. Begründen Sie Ihre Antwort. Es existieren 1 Objekte Es existieren 1 Objekte Bei jeder Instanzierung eines neuen Objektes wird das Attribut neu gesetzt, auf 0. Daher Ausgabe immer 0+1.

Zeiger (Pointer) 3. Was gibt folgendes Programm auf dem Bildschirm aus? Erklären Sie warum. (WS09/10 5.2) #include using namespace std; void tausche(int&, int); int main() { int a=2; int b=5; cout<<"a = "<<a<<"\nb = "<<b<<endl; tausche(a,b); cout<<"a = "<<a<<"\nb = "<<b<<endl; system("Pause"); } void tausche(int& a, int b) { int temp=a; a=b; b=temp; } Ausgabe: a = 2 b = 5 a = 5 b = 5 Call by Referenz (als Referenz) An die Speicheradresse von a(main) wird der Wert vom Parameter b(tausche) gespeichert. Im Parameter b(tausche) wird der Wert von a gespeichert, aber am Ende der Funktion tausche ist dieses b nicht mehr verfügbar und so bleibt der wert von b(main) unverändert.

Strings 4. Gegeben ist folgendes Programm. (SS10 5.) #include using namespace std; void M(string *pa,string *pb) { string tmp=*pa; *pa=*pb; *pb=tmp; }; void S(string *array, int size) { for(int A=size-1;A>0;--A) { for(int pos=0;pos<A;++pos) { if(array[pos]>array[pos+1]) M(&array[pos],&array[pos+1]); }; int main() { int i; const int Z=5; string N[Z]; cout<<"Bitte geben Sie "<<Z<<" Vornamen ein!"<<endl; for(i=0;i<Z;++i){ cin>>N[i]; } S(N,Z); cout<<"Ausgabe des Programms:"<<endl; for(i=0;i<Z;++i){ cout<<N[i]<<endl;} system("pause"); return 0; };

Strings 4.1 Was gibt das Programm am Bildschirm aus? Erläutern Sie die Bildschirmausgabe anhand geeigneter Eingabedaten Eingabedaten: Andrea Katrin Sabrina Alexandra Michael Ausgabe des Programms: Alexandra Andrea Katrin Michael Sabrina Die Vornamen werden alphabetisch Sortiert. Groß/Kleinschreibung wird Unterschieden!

Strings 4.2 Kommentieren Sie Syntax und Semantik der Methode M. void M(string *pa, string *pb) { string tmp=*pa; *pa=*pb; *pb=tmp; }; Tauscht zwei Strings (Call by Referenz als Zeiger) Der Wert der Variablen, auf die pa zeigt, wird in Tmp zwischengespeichert. Der Wert der Variablen auf die pa zeigt wird mit dem Wert der Variablen auf die pb zeigt überschrieben. Der Wert der Variablen auf die pb zeigt wird mit dem Zwischengespeicherten Wert von pa in tmp überschrieben.

Strings 4.3 Was würde passieren, wenn man die Eingabeparameter der Methode M nicht als Zeiger sondern als Variable übergeben und auch im Methodenkörper alle Stern- Operatoren (*) jeweils weglassen würde? Erklären Sie diesen Mechanismus kurz. Es würde nicht sortiert werden, da die Funktion (Methode) dann mit Kopieen der Objekte/Variablen arbeiten würde und daher würde nicht getauscht, sondern nur innerhalb der Funktion/Methode, welches keine Auswirkungen auf das Feld hätte.

Zeiger (Pointer) 5. Gegeben ist folgendes Programm. (WS 10/11 5.) int a = 3, b = 6; int *x, *y; x = &a; y = &b; int feld[] = {4,5,6,7}; system("PAUSE"); return 0; } Geben Sie alle Möglichkeiten, um folgende Ausgaben am Bildschrim zu realisieren: a) den Wert der Variable a Lösung: cout << a; cout << *x;

Zeiger (Pointer) int a = 3, b = 6; int *x, *y; x = &a; y = &b; int feld[] = {4,5,6,7}; system("PAUSE"); return 0; } b) den Wert der Variable b Lösung: cout << b; cout << *b; c) die Adresse der Variable a Lösung: cout << &a; cout << x; d) die Adresse der Variable b Lösung: cout << &b; cout << y; e) den Wert des ersten Elements der Variable feld Lösung: cout << *feld; cout << feld[0]; f) die Adresse des ersten Elements der Variable feld Lösung: cout << feld; cout << &feld[0]; cout << &feld;

Zeiger (Pointer) int main(int argc, char *argv[]) { double preis = 12.50; int stueck = 5; double *zpreis = &preis; int *zstueck = &stueck; cout << zpreis << endl; cout << *zstueck << endl; int **zzstueck = &zstueck; int ***zzzstueck = &zzstueck; cout << zzzstueck << endl; cout << **zzstueck << endl; double **zzpreis = &zpreis; cout << *zzzstueck << endl; cout << **zzzstueck << endl; cout << ***zzzstueck << endl; stueck = 10; double betrag; int &rstueck = stueck; rstueck = 10; betrag = stueck * preis; cout << "Es kostet " << betrag << " Euro um " << **zzstueck << " Stueck zu kaufen" << endl; system("PAUSE"); return EXIT_SUCCESS; }

Zeiger (Pointer) int main(int argc, char *argv[]) { double preis = 12.50; int stueck = 5; double *zpreis = &preis; int *zstueck = &stueck; cout << zpreis << endl; cout << *zstueck << endl; int **zzstueck = &zstueck; int ***zzzstueck = &zzstueck; cout << zzzstueck << endl; cout << **zzstueck << endl; double **zzpreis = &zpreis; cout << *zzzstueck << endl; cout << **zzzstueck << endl; cout << ***zzzstueck << endl; stueck = 10; double betrag; int &rstueck = stueck; rstueck = 10; betrag = stueck * preis; cout << "Es kostet " << betrag << " Euro um " << **zzstueck << " Stueck zu kaufen" << endl; system("PAUSE"); return EXIT_SUCCESS; } 6. Gegeben ist folgendes Programm.

Zeiger (Pointer) 6.1 Was gibt dieses Programm auf dem Bildschirm aus?

Zeiger (Pointer) 6.2 Erklären sie kurz wieso. //Adresse von preis //Wert von stueck //Adresse von zzstueck //Wert von stueck über zstueck //Adresse von zstueck (da Wert von zzstueck) //Adresse von stueck(da Wert von zstueck) //Wert von stueck (über zzstueck und zstueck)

Zeiger (Pointer) 6.3 Erklären sie folgende Zeilen. double *zpreis = &preis; Zeiger zpreis deklariert und auf die double Variable preis gesetzt (die Adresse wird zugewiesen) cout << *zstueck << endl; Ausgabe des Wertes der Variable stueck über den Zeiger zstueck int **zzstueck = &zstueck; Zeiger zzstueck wird deklariert und auf den int Zeiger zstueck gesetzt(die Adresse des Zeigers wird zugewiesen). ** ist nötigt, da Zeiger auf Zeiger. int ***zzzstueck = &zzstueck; cout << zzzstueck << endl; Zeiger zzzstueck wird deklariert und auf den int Zeiger zzstueck gesetzt(die Adresse des Zeigers wird zugewiesen). *** ist nötigt, da Zeiger auf Zeiger auf Zeiger. Ausgabe des „Wertes“ von zzzstueck, was ja die Adresse von zzstueck ist.

Zeiger (Pointer) 6.3 Erklären sie folgende Zeilen. double **zzpreis = &zpreis; Zeiger zzpreis wird deklariert und auf den double Zeiger zpreis gesetzt(die Adresse des Zeigers wird zugewiesen). ** ist nötigt, da Zeiger auf Zeiger. cout << ***zzzstueck << endl; Ausgabe des Wertes von stueck. *** Hier nötig da Zeiger auf Zeiger auf Zeiger. int &rstueck = stueck; rstueck = 10; Rstueck ist eine Referenz auf stueck. Durch die Zuweisung von 10 ändert sich der Wert von stueck ebenso auf 10.