Klausurvorbereitung Info II
Eine Musterklausur zur Ansicht.
Listen
Denken Sie sich zur Übung eigene Funktionen zur Erweiterung aus! Achten Sie dabei auf Rückgabetyp und Parameter der Funktion.
Stellen Sie die Datenstruktur grafisch dar, die in diesem Programm auf gebaut wird
(inklusive aller vorkommenden Zeiger nach Abarbeitung des Programms und der Datenwerte).
Ergänzen Sie das Programm um eine Funktion
int delete_lower (int value, lelem *&pAnchor)
die alle Elemente löscht, deren Datenelement kleiner ist, als value. Die Anzahl der gelöschten Elemente soll zurück gegeben werden.
int delete_lower (int value, lelem *&pAnchor)
die alle Elemente löscht, deren Datenelement kleiner ist, als value. Die Anzahl der gelöschten Elemente soll zurück gegeben werden.
Ergänzen Sie das Programm um eine Funktion, die den Duchschnitt aller Datenwerte in der Liste ermittelt und
diesen Wert der rufenden Funktion über einen Referenzparameter zurück gibt. Wenn die Funktion keine
Datenelemente enthält, soll false zurück gegeben werden (der Referenzparameter ist dann 0), ansonsten
true.
Entwerfen Sie ein C++-Programm zur Verwaltung einer Einkaufsliste. Jedes Element der Liste stellt einen Artikel dar und besitzt folgende Informationen:
Das Programm soll folgende Aktionen bzw. Berechnungen in Form von einzelnen Funktionen beinhalten:
Nutzen Sie die Lösungshinweise erst dann, wenn Sie sich trotz intensiver Beschäftigung mit der Aufgabenstellung, keine Fortschritte erreichen.
void artikel_einfuegen (artikel* &head, string who, string what, float anz, float p)
bool artikel_entfernen (artikel* &head, string who, string what)
float preis_gesamt (artikel* head)
float preis_nutzer (artikel* head, string who)
saldo_von* preis_nutzer_all (artikel* head)
void print (artikel* head)
- Nutzername
- Artikelname
- Menge
- Preis je Mengeneinheit
Das Programm soll folgende Aktionen bzw. Berechnungen in Form von einzelnen Funktionen beinhalten:
- Einfügen eines neuen Artikels am Anfang, extistiert Artikel-Nutzer-Kombination bereits sind nur Menge und Preis anzupassen.
- Gibt true nach Entfernung einer extistierenden Artikel-Nutzer-Kombination zurück, sonst false.
- Gibt den Gesamtpreis des Einkaufs zurück.
- Gibt den Preis des Einkaufs eines Nutzers (Name muss der Funktion übergeben werden) zurück. Ist der Nutzer nicht enhalten, wird 0 zurück gegeben.
- Gibt die Preise und Namen der Einkäufe aller in der Liste enthaltenen Nutzer zurück.
- Gibt die Daten aller Elemente in der Liste aus.
Nutzen Sie die Lösungshinweise erst dann, wenn Sie sich trotz intensiver Beschäftigung mit der Aufgabenstellung, keine Fortschritte erreichen.
Aus den Informationen eines Artikels muss eine Struktur erstellt werden, die dann ein einzelnes Listenelement darstellt. Zeichnen Sie verschiedene Listen (Unterscheidung in Anzahl der Elemente - welche sind wichtig?) mit Beispielelementen. Entwerfen Sie für die Funktionen jeweils erst den Funktionskop: Überlegen Sie dazu welcher Datentyp muss für der Rückgabewert genutzt werden. Welcher Funktionsname beschreibt die Aufabe der Funktion kurz und präziese? Welche “Eingaben” muss die Funktion bekommen, um ihre Aufgabe zu erfüen? Diese entsprechen dann den Parametern der Funktion. Welchen Datentyp haben die Parameter? Müssen Referenzen verwendet werden?
Die Musterlösung findet Verwendung für folgende Strukturen:
struct artikel
{
struct saldo_von
{
struct artikel
{
string wer; // Nutzername
string was; // Artikelname
float menge;
float preis; // Preis je Mengeneinheit
artikel* next;
};string was; // Artikelname
float menge;
float preis; // Preis je Mengeneinheit
artikel* next;
struct saldo_von
{
string name;
float preis;
saldo_von* next;
};float preis;
saldo_von* next;
void artikel_einfuegen (artikel* &head, string who, string what, float anz, float p)
bool artikel_entfernen (artikel* &head, string who, string what)
float preis_gesamt (artikel* head)
float preis_nutzer (artikel* head, string who)
saldo_von* preis_nutzer_all (artikel* head)
void print (artikel* head)
Objektorientierung
Denken Sie sich zur Übung eigene Klassen aus! Dazu können sie ein beliebiges Objekt ihrer Umwelt beschreiben: Die für Sie relevanten Eigenschaften bilden private Elemente und Veränderungen des Objektes werden auf Methoden abgebildet.
Geben Sie eine Klassendefinition für eine Klasse kreis an, welche einen privaten Member (Datenelement)
radius vom Typ float verwaltet. Folgende Methoden sollen in der Klasse enthalten sein:
Hinweis:
Es gelten folgende Formeln:
Kreisfläche: f = π*r*r
Kreisumfang: u = 2*π*r
Kreissegment: s = π*r*r*α / 360
Pi: π = 3.141592653589793
- 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 flaeche. Diese Methode gibt den Wert der Fläche des durch den privaten Member beschriebenen Kreises zurück.
- Methode flaeche sektor mit einem Parameter vom Typ float. Diese Methode gibt den Wert der Fläche des durch den privaten Member und dem Parameter, welcher als Winkel α interpretiert werden soll, beschriebenen Kreissegmentes zurück.
- Methode umfang. Diese Methode gibt den Wert des Umfanges des durch den privaten Member beschriebenen Kreises zurück.
- Methode print. Diese Methode gibt den Wert des Members auf den Bildschirm aus.
Hinweis:
Es gelten folgende Formeln:
Kreisfläche: f = π*r*r
Kreisumfang: u = 2*π*r
Kreissegment: s = π*r*r*α / 360
Pi: π = 3.141592653589793
Objektorientierung & Listen
Gegeben ist folgende Struktur:
Schreiben Sie darauf aufbauend eine Klasse, die mindestens eine Methode mit folgender Funktionalität enthält:
Die Methode füllt die Komponente check mit dem Wert
Folgend löscht die Methode alle Elemente deren Komponente check den Wert 0 besitzt. Der Löschvorgang soll nur ausgelöst werden, wenn der Nutzer diesen explizit bestätigt!
Anschließend wird die Liste nocheinmal mit entsprechendem Hinweis,
Ergänzen Sie zusätzliche Methoden selbstständig, falls Sie sie benötigen.
Schreiben Sie darauf aufbauend eine Klasse, die mindestens eine Methode mit folgender Funktionalität enthält:
Die Methode füllt die Komponente check mit dem Wert
- 1, wenn Vorgänger durch Nachfolger teilbar ist
- 0, wenn nicht
- -1, wenn einer der beiden Teiler nicht vorhanden ist.
Folgend löscht die Methode alle Elemente deren Komponente check den Wert 0 besitzt. Der Löschvorgang soll nur ausgelöst werden, wenn der Nutzer diesen explizit bestätigt!
Anschließend wird die Liste nocheinmal mit entsprechendem Hinweis,
- ob Löschvorgang ausgeführt wurde oder nicht und
- ob Daten gelöscht wurden oder nicht,
Ergänzen Sie zusätzliche Methoden selbstständig, falls Sie sie benötigen.