Sie sind auf Seite 1von 12

Hochschule Deggendorf Platzziffer:

_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 1 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

1 Variablen und Kontrollstukturen 20 Minuten

1.1 Ergänzen Sie den Quellcode in den runden Klammern der jeweiligen if-Anweisung so,
dass die Aussage in der cout-Anweisung korrekt ist.

#include <iostream>
using namespace std;

int main()
{
if ( (1==1)&&(2==2) )

{
cout<<"1 ist gleich 1 und 2 ist gleich 2“<<endl;
}

if ( (3==3) || (3==4) )

{
cout<<"Entweder ist 3 gleich 3 oder 3 ist gleich 4 oder beides ist wahr"<<endl;
}

if ( (3!=2) )

{
cout<<"3 ist gleich 2 ist nicht wahr. "<<endl;
}
}

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 2 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

1.2 Was gibt folgendes Programm auf dem Bildschirm aus?

#include<iostream>
using namespace std;

int main()
{
int a=10;
a=a+10;
cout<<a<<endl;

a=10;
a+=10;
cout<<a<<endl;

int erg=a/7;
int rest=a%7;
cout<<a<<" / 7 ergibt "<<erg<<" und "<<rest<<" Rest"<<endl;
cout<<"a hatte den Wert "<<erg*7+rest<<endl;

a=1;
cout<<"vorher "<<++a<<endl;
cout<<"nachher "<<a<<endl;

a=1;
cout<<"vorher "<<a++<<endl;
cout<<"nachher "<<a<<endl;
}
1.2.
20
20
20 /7 ergibt 2 und 6 Rest.
a hatte den Wert 20

vorher 2
nachher 2

vorher 1
nachher 2

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 3 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

1.3 Ergänzen Sie das Programm um 3 Schleifen (for, while, do while). In jeder Schleife
soll die Variable i von 1 bis 10 hochgezählt und das Ergebnis jedes
Schleifendurchlaufes auf dem Bildschirm ausgegeben werden.

#include <iostream>
using namespace std;

int main()
{
int i=0; for( i=1; i<=10;i++)
{
cout<<i<<endl;
}

i=1;
while( i<=10)
{ cout<<i<<endl;
i++;}

i=1;
do
{cout<<i<<endl;
i++;
} while (i<=10);

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 4 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

1.4 Legen Sie mit Hilfe einer for-schleife die Zahlen 1 bis 10 im „array“ ab.

#include<iostream>
using namespace std;

int main()
{
int array[10];
int i;

for (i=0; i<10;i++)


{
array [i] = i+1;
}

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 5 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

2 Überladen von Konstruktoren 20 Minuten


2.1 Was gibt folgendes Programm auf dem Bildschirm aus? Erklären Sie kurz warum.

#include <iostream>
using namespace std;

class Konto
{
private:
int KtoNr;
//...

public:
Konto () : KtoNr(999)
{ cout << "1: Konto(), KtoNr: " << KtoNr << endl; }

Konto (int kNr) : KtoNr(kNr)


{ cout << "2: Konto(int), KtoNr: " << KtoNr << endl; }
};

class Girokonto : public Konto


{
private:
float Dispo;

public:
Girokonto () : Dispo(2000)
{ cout << "4: - Girokonto(), Disp.: " << Dispo << endl; }

Girokonto (float d) : Dispo(d)


{ cout << "5: - Girokonto(float), Disp.: " << Dispo << endl; }

Girokonto (int kNr, float d) : Konto(kNr), Dispo(d)


{ cout << "6: - Girokonto(int,float), Disp.: " << Dispo << endl; }
};

int main()
{
Girokonto a, b(5500.0), c(123,1000.0);
}

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 6 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

Antwort zu 2.1
2. Ausgabe:
1: Konto(), KtoNr 999 // Aufruf des Konstruktors Konto ohne Übergabeparameter
4: - Girokonto(), Disp.:2000 // Aufruf - des Konstruktors Girokonto ohne Übergabeparameter

b)
1: Konto(), KtoNr 999 // Aufruf des Konstruktors Konto ohne Übergabeparameter
5: - Girokonto(float), Disp.: 5500.0 // Aufruf des Konstruktors Girokonto mit einem Übergangsparameter

c)
2: Konto(int), KtoNr: 123 //Aufruf des Konstruktors Konto mit einem Übergabeparameter
6: - Girokonto(int, float), Disp.: 1000.0 // Aufruf des Kobnstruktors Girokonto mit zwei
Übergabeparametern

2.2 Erklären Sie anhand des obigen Programms das Prinzip des Überladens von
Methoden.

Wird der Konstruktor der Klasse Girokonto aufgerufen, weiß der Compiler
anhand der Übergabeparameterliste und dem Datentyp welchen Konstruktor
er wählen muss.
Bei der Definition mehrerer gleichnamiger Funktionen(Konstruktor), müssen
sich die Übergabeparameterliste unterscheiden.

z. B. Girokonto a; --> Konstruktor Girokonto


Girokonto b (5500.0); --> Konstruktor Girokonto(float d): Dispo(d)
Girokonto c(123,1000.0); --> Konstruktor Girokonto(int KNr, float d):Konto
(KNr), Dispo(d)

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 7 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

3 Vererbung (25 Minuten)

Eine Firma hat angestellte Mitarbeiter und freie Mitarbeiter. Gegeben ist folgende
Klassendefinition

1. #include<iostream>
2. using namespace std;

3. class Mitarbeiter
4. {

5. public:
6. Mitarbeiter (string nn, string vn, float g): (Nachname (nn), Vorname(vn), Gehalt (g);

7. void datenausgeben(){
8. cout<<“Vorname “ << Vorname <<“Nachname:“ <<Nachname<<“Gehalt:“<<Gehalt<< endl;};
9. };

3.1 Erklären Sie Programmzeile 6 unter Verwendung der entsprechenden


Fachausdrücke.
Es wird ein Konstruktor (gleicher Name wie die Klasse)
deklariert.
Nach dem Doppelpunkt ist eine
Elementinitialisierungsliste angegeben welche die
Variablen der Klasse Mitarbeiter mit Werten initialisiert.
Variable Nachname mit dem Wert von nn, die Variable
Vorname mit dem Wert vn und die Variable Gehalt wird
mit dem Wert von g initialisiert

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 8 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten
3.2 Ergänzen Sie oben im Quelltext (Seite 7/12) die Klasse Mitarbeiter um die nötigen
Attribute. Die Attribute sollen auch von abgeleiteten Klassen geändert werden
können.
protected:
string Nachname, Vorname;
float Gehalt;

3.3 Schreiben Sie eine von der Klasse Mitarbeiter abgeleitete Klasse Angestellter. Diese
erhält das Attribut Urlaubsanspruch (int). Ergänzen Sie zudem eine entsprechende
Methode datenausgeben(). Die Methode soll außerhalb der Klasse definiert werden.

class Angestellter:public Mitarbeiter


{
private:
int Urlaubsanspruch;
public:
Angestellter():Mitarbeiter("--", "--", 0), Urlaubsanspruch(0){}
Angestellter(string nn, string vn, float g, int urlaub):Mitarbeiter(nn, vn, g),
Urlaubsanspruch(Urlaub)
{}
≈ Angestellter(){}
void datenausgeben();
};
void Angestellter::datenausgeben()
{
cout<<"Nachname"<<Nachname;
cout<<"Vorname"<<Vorname;
.
.
.
}

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 9 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

3.4 Das nachfolgende Hauptprogramm enthält 3 Fehler. Korrigieren Sie diese.

int main()
{
Mitarbeiter Meier;

Mitarbeiter.Gehalt=2000;

Mitarbeiter.datenausgeben();

Mitarbeiter Meier(" "," ",


2000);
Meier.datenausgeben();

system("Pause");
return 0;
}

3.5 Erzeugen Sie im vorstehenden Hauptprogramm eine Instanz der Klasse Angestellter
und rufen Sie für diese Instanz die Methode datenausgeben() auf.

Angestellter ang1("Kindermann", "Katharina",256350, 35);

ang1.datenausgeben();

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 10 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten
4 Klassen (25 Minuten)

Die folgende C++-Klasse liegt vor:

#include <iostream>
using namespace std;

class Division
{

private:
Deklaration von zwei Integervariablen mit
Namen zahl1 und zahl2
int zahl1, zahl2; //___________________________________________________

//_______________________________________________________________________
public Standard Konstruktor der
Klasse Division
Division (){}; //_______________________________________________________

//_______________________________________________________________________

float Dividiere(int , int ) ; //__________________________________________________


Deklaration der Methode Dividiere mit Rückgabetyp float und

zwei Übergabeparameter vom Datentyp int


//________________________________________________________________________

};

4.1 In der Klassendeklaration sind 2 Fehler enthalten. Korrigieren Sie diese direkt im
Quelltext

4.2 Dokumentieren Sie die angegebenen Programmabschnitte in den dafür vorgesehenen


Zeilen. Nennen Sie dabei jeweils die programmiersprachlichen Fachbegriffe der
verwendeten Syntaxelemente.

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 11 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten

4.3 In der Methode Dividiere() soll der ersten Eingabeparameter durch den zweiten geteilt
und das Ergebnis auf dem Bildschirm ausgeben werden. Ergänzen Sie die
Methodendefinition von Dividiere() außerhalb der Klasse. Stellen Sie dabei sicher,
dass als Nenner keine Null eingegeben werden kann.

float Division::Dividiere(int zahl1, int zahl2)


{
if (zahl2 == 0)
{
cout<<"Keine Division durch 0 möglich"<<endl;
}
else
{
cout<<"Ausgabe":<<zahl1/zahl2;
return(zahl1/zahl2);
}
}

4.4 Was gibt die Methode Dividiere() aus, wenn man ihr als ersten Eingabeparameter die
Zahl 7 und als zweiten Parameter die Zahl 2 übergibt. Begründen Sie.

Ausgabe:
3,5
da als Rückgabewert float gewählt wurde.
Würde die Methode Dividiere als Rückgabewert int
haben, dann würde die Methode 3 ausgeben.

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010


Hochschule Deggendorf Platzziffer:
_____________________________________________________________________________________________________________________________________________________________________

Wintersemester 2009/2010 Seite 12 von 12 Blätter:


Studiengang Wirtschaftsinformatik Prüfer: Prof. Dr. Herbert Fischer

Prüfungsfach: Grundlagen der Softwareentwicklung BEWERTUNG


Hilfsmittel: keine Zeit: 90 Minuten
4.5 Erzeugen Sie im untenstehende Hauptprogramm eine Instanz der Klasse Division und
rufen Sie für das Objekt die Methode Dividiere auf.

int main()
{
cout << "Testausgabe:" << endl;

Division div1;
cout<<"Division von 7/2"<<endl;
div1.Dividiere(7,2);

system("Pause");
return 0;
}

Prof. Dr. Herbert Fischer Viel Erfolg !!! am 26.01.2010