Sie sind auf Seite 1von 5

Fakultät für Informatik

Klausur Informatik I
Studiengänge B ET, B EP, B SK, B IK, B Ma, M IG
29. Juli 2016

Name
Vorname
Matrikelnummer

Aufgabe 1 2 3 4 Note
Punkte
erreichte Punktzahl

Bearbeitungszeit:
90 Minuten
Erlaubte Hilfsmittel:
Vorlesungs- und Übungsunterlagen, themenbezogene Fachliteratur, eigene Mitschriften
NICHT erlaubte Hilfsmittel:
alle elektronischen Geräte (insbesondere Geräte mit WLAN und Bluetooth)
1. Matrixoperationen (13 Punkte)
Für eine Rechteckmatrix rm4,10 (4 * 10 ganzzahlige Matrixelemente) soll ein
C++-Programm mit folgendem Ablauf geschrieben werden:

(a) Einlesen der Elemente der letzten Zeile der Matrix (die am weitesten unten
befindliche Zeile).

(b) Das erste Element der Matrix (Position (1, 1)) soll den Wert 1 und das letzte
Element der zweiten Zeile (Position (2, 10)) soll den Wert 121 erhalten.

(c) Bilden der restlichen Elemente in den Zeilen 1 und 2 nach folgendem Muster:

 rmi,j−1 + (j + 1)

für i = 1
rmij =
 rmi−1,j + rmi−1,j+1

für i = 2

(d) Die Elemente der ersten Reihe ergeben die ersten 10 aufeinanderfolgenden
Dreieckszahlen (d). Eine Kubikzahl (k) ist eine Zahl, die entsteht, wenn man
eine natürliche Zahl zweimal mit sich selbst multipliziert (z.B. 27 = 3 ∗ 3 ∗ 3).
Die Differenz der Quadrate zweier aufeinanderfolgender Dreieckszahlen ergibt
eine Kubikzahl:
dn+1 ∗ dn+1 − dn ∗ dn = kn
Beispiel:
erste Kubikzahl: 3 ∗ 3 − 1 ∗ 1 = 9 − 1 = 8
zehnte Kubikzahl: 66 ∗ 66 − 55 ∗ 55 = 1331

Füllen Sie die 3. Zeile der Matrix mit den entsprechenden Kubikzahlen.

(e) Berechnen Sie die Spaltensummen der Matrix und speichern Sie die Ergebnisse
in einem von Ihnen dafür neu angelegten Feld. Geben Sie das Ergebnis
anschließend nach folgendem Schema aus:

Spaltensummen: ...14 ...42 ..108

Reservieren Sie für die Angabe der Zahlen jeweils 5 Zeichen. Als Füllzeichen
soll das Zeichen . (Punkt) verwendet werden. Die Zahlen sind durch ein
Leerzeichen getrennt.

Hinweis: Die hier angegebenen numerischen Indizes beziehen sich auf die in der
Mathematik üblichen Werte, nicht auf die in C++ gebräuchlichen.

2
2. Funktionen, Rekursion (10 Punkte)

Entwerfen Sie eine C++-Funktion, die die maximale Reichweite eines Fahrzeugs in
Abhängigkeit aller folgenden Angaben rekursiv ermittelt:

• Größe des Kraftstofftanks im Auto (in Liter)


• Vebrauch in Liter pro 100 km
• Nachfüllmenge von Kraftstoff aller 200 km (in Liter)

Zeigen Sie in einer main()-Funktion die Entwicklung (6 Schritte) der Reichweite


anhand einer sich immer verdoppelnden Tankgröße (Startwert: 6 Liter). Bei welcher
Tankgröße beträgt die Reichweite mehr als 1000 km?

Wenn Sie diese Aufgabe ohne Rekursion lösen, sind maximal 5 Punkte zu erreichen.

Hinweis: Zur Vereinfachung können Sie annehmen, dass der Verbrauch pro 100 km
immer größer ist, als die Nachfüllmenge pro 200 km. Das Auto fährt also nie un-
endlich lange.

3
3. Strukturen, Felder (10 Punkte)
Gegeben sei eine Struktur tier
struct tier
{
char art[20]; // Welches Tier?
int gewicht; // Gewicht in kg
float futtermenge; // Futtermenge in kg
};

Aus dieser Struktur wird ein Feld aufgebaut:


tier raubkatze[20];

welches bereits mit den Daten für art und gewicht der Raubkatzen belegt sei, die
futtermenge ist für jede Raubkatze 0.
Bsp.: Puma 50 0
Luchs 12 0
Leopard 30 0
Luchs 13 0
Simons Cat 4 0

Wenn weniger als 20 Raubkatzen enthalten sind, ist die Komponente gewicht des
ersten nicht belegten Elementes mit dem Wert 0 beschrieben.

Entwerfen und implementieren Sie eine Funktion main(), in der zunächst die Fut-
termenge für jede Katze nach folgender Formel berechnet und im Feld raubkatze
gespeichert wird:

f uttermenge = gewicht/3 ∗ 0.15

Berechnen Sie anschließend die Gesamtfuttermenge für alle Luchse und geben Sie
das Ergebnis aus.

In einem anderen Gehege, in dem sich nur Luchse befinden, beträgt die Futtermenge
22 kg. Berechnen und geben Sie aus, wie viele Luchse in diesem Gehege leben. Sie
können davon ausgehen, dass das durchschnittliche Gewicht der Luchse im Luchs-
gehege und im Feld raubkatze gleich ist.

4
4. Algorithmierung (12 Punkte)

Gibt es eine natürliche Zahl n (n ist größer als 0), die mit 4 multipliziert ein Produkt
ergibt, das die gleichen Ziffern enthält wie die Ausgangszahl n - aber in umgekehrter
Reihenfolge?

Ein Beispiel: Wenn 139 eine Lösung für n wäre, müsste 139 ∗ 4 genau 931 ergeben,
was aber nicht der Fall ist - das Ergebnis lautet vielmehr 556. 139 erfüllt die
Forderung der Aufgabe deshalb nicht.

Im Bereich zwischen 1 und 99 Mio. gibt es mehr als 20 solcher Zahlen!

Entwerfen Sie ein C++-Programm, das prüft und ausgibt, ob diese Behauptung
stimmt, und geben Sie die entsprechenden Zahlen aus, falls vorhanden. Prüfen Sie,
ob die ersten 20 (falls vorhaben) dieser Zahlen eine Zahlenfolge ergeben, in der die
Summe zweier Nachbarelemente dem Wert des als nächstes folgenden Elementes
entspricht.

Ein Beispiel für eine solche Folge ist: 2 3 5 8 13

Das könnte Ihnen auch gefallen