Springe zum Hauptinhalt
Grundlagen der Informatik I & II und Informatik I & II
Klausurvorbereitung
Grundlagen IF - Ariane Jacobs

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

Quellcode zum Aufbau einer Liste
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.
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:
  • Nutzername
  • Artikelname
  • Menge
  • Preis je Mengeneinheit
Bsp: Ich hätte gern 2 Liter Milch: “Ariane”, “Milch”, 2, 1.09

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.
Testen Sie Sie alle Funktionen auf eine korrekte Arbeitsweise!

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
{
string wer;  // Nutzername
string was;  // Artikelname
float menge;
float preis;  // Preis je Mengeneinheit
artikel* next;
};

struct saldo_von
{
string name;
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:

  • 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.
Geben Sie die Implementierung der Methoden an (gegebenenfalls inline-Code). Demonstrieren Sie die Verwendung der Klasse kreis in einem kurzen Hauptprogramm, in dem alle Methoden verwendet werden.

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:

Struktur der doppelt verketteten Liste

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.
Nach dem Eintrag von check werden die Informationen ausgegeben.

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,
ausgegeben. Die Methode gibt zurück, ob der Löschvorgang ausgeführt wurde, oder nicht.

Ergänzen Sie zusätzliche Methoden selbstständig, falls Sie sie benötigen.