Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Tutorium Software-Engineering SS14 Florian Manghofer.

Ähnliche Präsentationen


Präsentation zum Thema: "Tutorium Software-Engineering SS14 Florian Manghofer."—  Präsentation transkript:

1 Tutorium Software-Engineering SS14 Florian Manghofer

2 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 <

3 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 "<

4 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 = "<

5 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;posarray[pos+1]) M(&array[pos],&array[pos+1]); }; int main() { int i; const int Z=5; string N[Z]; cout<<"Bitte geben Sie "<>N[i]; } S(N,Z); cout<<"Ausgabe des Programms:"<

6 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!

7 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.

8 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.

9 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;

10 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;

11 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; }

12 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.

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

14 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)

15 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.

16 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.


Herunterladen ppt "Tutorium Software-Engineering SS14 Florian Manghofer."

Ähnliche Präsentationen


Google-Anzeigen