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 = 9 1.2 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

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

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

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

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