C-Uebung

Hausaufgabe "Module"

C | | CMake und SVN

a) Starten Sie mit dem Beispielprogramm aus der Vorlesung und realisieren ein Modul, das eine Funktion zur Berechnung der n-ten Fibonacci Zahl enthält. Übersetzen Sie es auf der Kommandozeile.

b) Realisieren die folgende einfache Aufgabenstellung mit Hilfe eines weiteren Moduls in Modultechnik:

  1. 10-elementiges Array in Modul #1 deklarieren und mit den Zahlen von 1–10 initialisieren.
  2. 5tes Element des Array’s in Modul #2 (Hauptmodul) ausgeben.

Zur Motivation: Stellen Sie Sich vor, das Array repräsentiert eine Bank mit 10 Bankschließfächern.

Das Array soll modullokal in einem Nebenmodul deklariert werden (array.cpp/.h). Aus dem Hauptmodul dürfen Sie daher nicht auf das Array direkt zugreifen, sondern Sie benötigen eine Funktion (d.h. einen sog. Getter), welche den Wert des i-ten Array-Elements ausliest und zurück gibt.

Hinweise zur Bearbeitung:

  • Erstellen Sie zunächst die Module, in dem sie nur ein (noch) leeres Nebenmodul und ein Hauptmodul mit der leeren main-Funktion erstellen (Beispiel-Code finden Sie hier)!
  • Testen Sie, ob das leere Basisprogramm kompiliert (Salamitaktik)!
  • Erstellen Sie nun die benötigten Funktionen (im Prinzip nur eine einzige, d.h. eine sog. Zugriffsfunktion bzw. access function = getter) prototypisch im Header “array.h” und die Implementierung entsprechend in der C++ Datei “array.cpp”. Zusätzlich benötigen Sie ein Main-Modul “main.cpp”, welches den Getter bzw. die Zugriffsfunktion aufruft und die Ausgabe mittels printf() bewerkstelligt.

Compilieren Sie Ihr Programm unter Unix mit dem g++.

Optionale Zusatzaufgaben:

c) Realisieren Sie ein weiteres Nebenmodul (newton.cpp/.h), in dem die Wurzelberechnung (per Newton-Iteration) als Funktion bereitgestellt wird.

d) Beschleunigen Sie die Wurzelberechnung mit Hilfe einer vorberechneten Tabelle: Verwenden Sie im Modul array.cpp/.h anstelle eines 10-elementigen Arrays ein 1000-elementiges Array und initialisieren Sie das i-te Element auf die Quadratwurzel von i per Newton-Iteration.

Q Was ist der Vorteil bzw. Nachteil einer solchen Wurzel-Tabelle in Bezug auf Speicherverbrauch und Geschwindigkeit?

Q Angenommen wir inkludieren in array.h die Prototypen von newton.h, was wĂĽrde passieren?


C | | CMake und SVN

Options: