Uebungs Aufgaben C++ - Übungen zu C++ PDF

Title Uebungs Aufgaben C++ - Übungen zu C++
Course Informatik II
Institution Eberhard Karls Universität Tübingen
Pages 3
File Size 98.5 KB
File Type PDF
Total Downloads 51
Total Views 138

Summary

Übungen zu C++...


Description

Aufgabe 1: G¨ ultigkeit von Variablen (5 Punkte) Gegeben sei folgendes C++ Code-Fragment: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

in t a , b ; c la s s MyClass { in t a , c ; public : v oi d Te s t () { in t e = a + 1 ; a = e; } v oi d Test ( in t & a ) { in t f = a + 1 ; a=f; } }; void T es t () { in t g = a + 1 ; a =g; }

1. Ordnern Sie den Variablen b, c, e, und g die Begriffe LokaleV ariable, P rivatesAttribut, GlobaleV ariable zu. Was bedeuten diese G¨ ultigkeiten? Geben Sie außerdem f¨ ur jede der vier aufgelisteten Variablen ihren G¨ ultigkeitsbereich an ( alle Zeilen im Codefragment, in denen diese Variable verwendet werden kann). 2. Worin unterscheiden sich MyClass::Test() und Test() 3. Wie m¨ usste der Methodenrumpf von MyClass::Test(int &a) aussehen um den gleichen Effekt wie der Rumpf von MyClass::Test() zu haben?

Aufgabe 2 (8 Punkte) a) Beantworten Sie die folgenden Fragen: 1. Welche primitiven Datentypen gibt es in C++? 2. Wie groß ist die Sichtbarkeit von Attributen? 3. Welche drei Schleifentypen gibt es? 4. Wie wird hier die Adresse beim Zugriff auf v[3] bestimmt: 1 2

in t * v = ne w in t [5]; v [3 ] = 5. 0;

5. Was tun die folgenden Operatoren beim Zugriff auf eine Variable: ∗var; &var; var− > ... 6. Was bedeutet in C++ das Schl¨ usselwort virtual? Geben Sie ein Beispiel, in dem virtual einen Unterschied macht. 7. Was ist der Unterschied zu einer ”is-a” und einer ”has-a” Beziehung? 8. F¨ ur was wird const verwendet? Was hat const f¨ur eine Bedeutung bei Methoden? Was hat const f¨ur eine Bedeutung in den folgenden F¨allen? 1 2 3

c on st i nt * pt r1 ; in t * c on s t ptr2; c on st i nt * c o ns t ptr3 ;

1

Aufgabe 3 (8 Punkte) In dieser Aufgabe Implementieren Sie verschiedene M¨oglichkeiten der Parameter¨ubergabe an Funktionen in C++ 1. Beschreiben Sie die drei unterschiedlichen M¨oglichkeiten eine Variable a vom Typ int an eine Funktion zu ¨ubergeben. Gehen Sie dabei besonders auf die verschiedenen M¨oglichkeiten der Parameter¨ubergabe (pass-by-..., auch call-by-... genannt) ein und benennen Sie Vor- und Nachteile der einzelnen Techniken. 2. Schreiben Sie eine Funktion findMax welche in einem ¨ubergebenen Array arr vom Typ int den maximalen Wert sucht und einen Zeiger darauf zur¨uckgibt. ¨ 3. Beschreiben Sie was man unter Uberladen von Funktionen versteht und wozu es benutzt werden kann. ¨ Sie die Funktion findMax in der Art und Weise, dass auch ein Array vom Typ float 4. Uberladen akzeptiert wird.

Aufgabe 4: Rekursion (12 Punkte) In dieser Aufgabe werden Sie in einem C-Programm drei rekursive Methoden entwickeln, die bei ¨ Ubergabe einer Zahl n entweder eine (a) absteigende, (b) aufsteigende oder (c) absteigende und danach aufsteigende Ausgabe erzeugt. ur n = 5: Beispiel f¨ a) Absteigend: 5 4 3 2 1 0 b) Aufsteigend: 0 1 2 3 4 5 c) Absteigend und aufsteigend: 5 4 3 2 1 0 1 2 3 4 5 1. F¨ ullen Sie zuerst die Methode backwardPrint(int n) an den mit ... gekennzeichneten Stellen. 2. Implementieren Sie die noch auskommentierte Methode forwardPrint(int n) ¨ahnlich der Teilaufgabe a). Diesmal sollen Sie allerdings eine aufsteigende Reihenfolge als Ausgabe erhalten! 3. Implementieren Sie nun noch die Methode backwardForwardPrint(int n). Hierbei sollen Sie zuerst eine absteigende und anschließend eine aufsteigende Reihenfolge als Ausgabe erhalten. Achtung: Benutzen Sie dazu NICHT die bisher implementierten Methoden! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

# include < iostream > u si n g na m e s pa c e st d ; // Teilaufgabe a) Rekursiv abwaerts zaehlen void b a c k w a r d P r i n t ( in t n ) { if ( n == 0) { // ... } e ls e { // ... b a ck wa rd P r i nt ( n - 1) ; } } void f o r w a r d P r i n t ( in t n ) { // Teilaufgabe b) Rekursiv aufwaerts zaehlen } void b a c k w a r d F o r w a r d P r i n t ( in t n ) { // Teilaufgabe c) Rekursiv abwaerts und danach aufwaerts zaehlen } in t main ( in t ar gc , ch ar c on s t *argv []){ /* c o de * / return 0; } }

Listing 1: Programm Fragment “Rekursives Z¨ahlen”

2

Aufgabe 5: OOP (14 Punkte) In dieser Aufgabe wird eine Klasse Modulo.cpp und modulo.hpp implementiert, welche Methoden f¨ur die Modulo Arithmetik bereitstellt. Außerdem wird eine Klasse zum Testen (main.cpp) implementiert. 1. Implementieren Sie zun¨achst die Klasse Modulo welche als Attribut das Modul (eine Nat¨urliche Zahl) erh¨allt. Implementieren Sie einen Default Konstruktor, welcher das Modul auf 17 setzt und einen Konstruktor Modulo(int n), welcher das Modul auf n setzt. Implementieren Sie zus¨atzlich eine Klasse main.cpp, welche zum Testen der Modulo-Klasse dient. 2. Implementieren Sie die Methoden add und mul der Klasse Modulo f¨ur die Modulo Addition und Multiplikation. Diese sollen die Operanden als Parameter erhalten und das Ergebnis im R¨ uckgabewert zur¨uck geben: c = (a + b) mod n , c = (a · b) mod n . Testen Sie die Methoden in der main-Routine ihrer Testklasse. 3. Implementieren eine Methode power, welche die Funktion c = (ab ) mod n berechnet. (Tipp: Verwenden Sie eine Schleife.) Der Ausdruck ab kann schnell sehr groß werden, um das zu verhindern beachten Sie: (a · a · a) mod n = (((a · a) mod n) · a) mod n . Tipp: Modulo-Operator in C++: %

Aufgabe 6: Arraymethoden (8 Punkte) In dieser Aufgabe sollen verschiedene Arraymethoden programmiert werden. Programmieren Sie dazu jeweils eine Methode, die: 1. Schreiben Sie eine Main Methode in der Sie ein leeres Array f¨ur die folgenden Methoden anlegen. 2. Eine Zahl z 6= 0 an die erste freie Stelle in ein Array a einf¨ ugt, wobei eine freie Stelle im Array mit dem Wert 0 markiert ist: void einfuegen(int a[], int z, int l). (Die L¨ange des Arrays wird mit der Variablen l u ¨ bergeben) 3. Eine Null an die k-te Stelle des Arrays a schreibt: void loeschen(int a[], int k, int l). 4. Die Summe der Arrayelemente von a zur¨ uckgibt: int summe(int a[], int l). 5. Das Array a spiegelt: void spiegeln(int a[], int l). Legen Sie dazu kein neues Array an in der Methode!

Aufgabe 7: Rekursion (5 Punkte) Die Funktion quersumme (Listing 1) berechnet rekursiv die Quersumme einer eingegebenen positiven Zahl. Schreiben Sie ein nun eine Funktion quersummeIterativ, dass die Quersumme gleichwertig wie diese Funktion, allerdings iterativ berechnet! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

# include < iostream > u si n g na m e s pa c e st d ; in t q u er su m me ( int z ah l ){ if ( z a hl == 0) { return 0; } e ls e { return z ah l % 10 + q ue r su mm e ( za hl / 10 ); } } in t m ai n () { in t eingabe = 0; c ou t > e i ng a be ; q u er s u mm e ( ei n ga be ); c ou t...


Similar Free PDFs