Informatik - Grundlagen

Werbung
”Informatik - Grundlagen”
MB
2005
1. Programmanalyse (6 Punkte)
Gegeben sei folgendes C++-Programm:
#include <iostream>
using namespace std;
int l(int a, int b)
{
int c;
c = a + 7 % b - 6;
return c;
}
int main()
{
int a = 3;
int b = 2;
cout << l(b,a) << endl;
b *= 3 + 2;
cout << b << endl;
b = a++;
cout << ++a << "
" << b << endl;
cout << a << endl;
}
Welche Ausgabe liefert das C++-Programm?
1
2. Dynamische Datenstrukturen (23 Punkte)
Gegeben sei folgendes C++-Programm:
#include <iostream>
using namespace std;
struct lelem{
int a;
lelem * pNext;
};
main()
{
lelem * pAnker = new lelem;
lelem * pNeu;
lelem * pLast;
int i,j;
cin >> j;
pAnker -> a = j % 5;
pAnker -> pNext = NULL;
pLast = pAnker;
for ( i = 1; i < 12; i++)
{
pNeu = new lelem;
cin >> j;
pNeu -> a = j % 5;
pNeu -> pNext = NULL;
pLast -> pNext = pNeu;
pLast = pNeu;
}
}
a. Stellen Sie die Datenstruktur grafisch dar, die in diesem Programm aufgebaut wird (inklusive aller vorkommenden Zeiger nach Abarbeitung des
Programms) bei folgender Eingabefolge: 2 3 5 7 11 13 17 19 23 29 31 37.
(die Reihenfolge des Aufbaus der dynamischen Datenstruktur muß erkennbar sein).
4 Punkte
b. Ergänzen Sie das Programm um eine Funktion
int alarm (int & anzahl, int wert,lelem *
pAnker1)
mit folgender Funktionalität:
In der Funktion alarm wird die Anzahl der a-Instanzen (Datenelemente)
der Datenstruktur, die durch den Parameter pAnker1 adressiert wird, die
den Wert wert haben, ermittelt. Die Anzahl wird der rufenden Funktion
2
über den Referenzparameter anzahl übermittelt. Die Funktion liefert als
Rückgabewert den Wert 1, wenn mehr als die Hälfte der a-Instanzen der
Elemente der durch den Parameter pAnker1 adressierten Datenstruktur
den Wert wert besitzen, sonst den Wert 0. Es ist nicht davon auszugehen,
daß die Anzahl der Elemente bekannt ist. .
5 Punkte
c. Ergänzen Sie das Programm um eine Funktion
int delete_item (int wert, lelem *&
pAnker1)
mit folgender Funktionalität:
In der Funktion delete item wird das erste Element aus der Datenstruktur,
die durch den Zeiger pAnker1 adressiert wird, gelöscht, dessen Datenelement
a gleich dem Parameter wert ist. Wenn das Löschen erfolgreich war, soll der
Wert 1 zurückgegeben werden, sonst der Wert 0.
5 Punkte
Demonstrieren Sie die Verwendung von alarm und delete item im Hauptprogramm wie folgt:
Wenn in der Datenstruktur, die durch den Zeiger pAnker adressiert wird,
mehr als 50% Elemente enthalten sind, deren Datenwert a gleich einem vom
Nutzer einzugegeben Wert ist, so ist das erste Element aus der Datenstruktur zu löschen. Dies soll solange wiederholt werden, bis weniger als 50 % der
Elemente mit dem angegebenen Datenwert in der durch pAnker adressierten Datenstruktur enthalten sind.
5 Punkte
d. Ergänzen Sie das Hauptprogramm derart, daß alle a-Instanzen durch Tabulatoren getrennt auf dem Bildschirm angezeigt werden. Dabei sollen 5
Elemente auf einer Bildschirmzeile ausgegeben werden (in der letzten Zeile
sind möglicherweise weniger als 5 Elemente auszugeben). Es ist nicht davon
auszugehen, daß die Anzahl der Elemente bekannt ist.
2 Punkte
e. Ergänzen Sie das Hauptprogramm derart, daß der gesamte dynamisch angeforderte Speicherplatz freigegeben wird. Es ist nicht davon auszugehen, daß
die Anzahl der Elemente bekannt ist.
2 Punkte
3. Objektorientierte Programmierung (15 Punkte)
Geben Sie eine Klassendefinition für eine Klasse kugel an, welche einen privaten
Member (Datenelement) radius vom Typ float verwaltet. Folgende Methoden
sollen in der Klasse enthalten sein:
3
– Konstruktor mit keinem Parameter, der Member soll mit 0 initialisiert werden (Standardkonstruktor)
– Konstruktor mit einem Parameter vom Typ float. Der Member soll mit dem
Werten des Parameters initialisert werden
– Methode set mit einem Parameter. Diese Methode setzt den Wert des Members mit dem Wert des Parameters.
– Methode oberflaeche. Diese Methode gibt den Wert der Oberfläche der durch
den privaten Member beschriebenen Kugel zurück.
– Methode volumen. Diese Methode gibt den Wert des Volumens der durch
den privaten Member beschriebenen Kugel zurück.
– Methode volumen abschnitt mit einem Parameter vom Typ float. Diese Methode gibt den Wert des Volumens des durch den privaten Member und dem
Parameter, die als Höhe h des Kugelabschnittes interpretiert werden sollen,
beschriebenen Kugelabschnittes zurück.
– Methode print. Diese Methode gibt den Wert des Members auf den Bildschirm aus.
Geben Sie die Implementierung der Methoden an (gegebenenfalls inline-Code).
Demonstrieren Sie die Verwendung der Klasse kugel in einem kurzen Hauptprogramm, in dem alle Methoden verwendet werden.
Hinweis: Es gelten folgende Formeln:
Kugeloberfläche: f = 4πr 2
Kugelvolumen: v = 34 πr 3
Kugelabschnittvolumen: va = 31 πh2 (3r − h)
Pi: π = 3.141592653589793
4. Matrixoperationen (10 Punkte) Gegeben sei eine Integermatrix 6 x 12 (6 Zeilen
mit je 12 Zahlen). Implementieren Sie ein C++-Programm mit folgendem Ablauf:
a. Einlesen der Zahlen der Matrix
b. Ermitteln der zwölf Spalten-Minimalwerte (Minimalwert aus allen Zahlen
in einer Spalte)
c. Ausgabe der Elemente der Matrixspalte mit dem größten Minimalwert und
des zugehörigen Minimalwertes in übersichtlicher Form (die Matrixelemente
sollen jeweils mit einer Breite von 8 Zeichen dargestellt werden).
5. Funktionen (6 Punkte)
Eine Rehpopulation in einem Erzgebirgswald wird am 1.1. des ersten Jahres
gezählt. Es ergibt sich eine Zahl von 15 Rehen. Die Population ändert sich nach
Beobachtungen von Naturfreunden wie folgt:
– Im Laufe eines Jahres verdoppelt sich die Zahl der Rehe durch Vermehrung
4
– Zur Sicherung des Silversterbratens der umliegenden Dörfer werden am Jahresende 8 Rehe geschoßen. Zum Schutz des Waldes vor Wildverbiß werden
am Ende des Jahres zusätzlich 70% der verbliebenen Rehe geschossen, wenn
deren Zahl größer als 40 ist.
Schreiben Sie eine C++-Funktion
int rehe r(int n) die rekursiv die Zahl der Rehe am 1.1. des n-ten Jahres berechnet.
D
5
Herunterladen