02.08.2013 Aufrufe

Ingenieurinformatik

Ingenieurinformatik

Ingenieurinformatik

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Hochschule München, FK 03 FA WS 2008/09<br />

Zulassung geprüft<br />

vom Aufgabensteller:<br />

________________<br />

<strong>Ingenieurinformatik</strong><br />

Aufgabensteller: Dr. Reichl, Dr. Küpper, Dr. Jäger-Hezel<br />

Teil 1/Aufgabe 1: 30 Minuten ohne Unterlagen, Teil 2/Aufgaben 2-4: 60 Minuten, beliebige eigene<br />

Unterlagen aber keine PC/Laptops, Bearbeitung mit Bleistift erlaubt.<br />

Die Prüfung ist nur dann gültig, wenn Sie die erforderliche Zulassungsvoraussetzung erworben<br />

haben (drei Testate im Praktikum). Dies wird vom Aufgabensteller überprüft.<br />

Aufgabe 2: (ca. 18 Punkte)<br />

Erstellen Sie ein C-Programm, das einen Winkel im Bogenmaß einliest, den Sinus- und Tangenswert<br />

des Winkels berechnet und anschließend am Bildschirm ausgibt.<br />

2a) An die Funktion sin_tan wird der eingelesene Winkel im Bogenmaß übergeben. Es darf angenommen<br />

werden, dass der Winkel stets zwischen 0 und π liegt. Die Funktion sin_tan berechnet den<br />

Sinus- und den Tangenswert für den gegebenen Winkel und gibt beide Werte mithilfe von Zeigern<br />

an das aufrufende Programm zurück. Globale Variablen dürfen nicht verwendet werden!<br />

Der Tangens ist bei π/2 nicht definiert. Daher wird, falls der übergebene Winkel von π/2 um weniger<br />

als 1·10 -6 entfernt ist, weder der Sinus- noch der Tangenswert berechnet. Die Funktion gibt<br />

in diesem Fall den Returnwert 0 zurück. Andernfalls wird der Returnwert 1 zurückgegeben.<br />

2b) In der Funktion main wird der Anwender aufgefordert, einen Winkel im Bogenmaß zwischen 0<br />

und π einzugeben. Der Winkel wird der Variablen w zugewiesen. Fehleingaben werden nicht<br />

berücksichtigt. Danach wird die Funktion sin_tan geeignet aufgerufen. Anschließend werden in<br />

der Funktion main der Sinuswert und der Tangenswert ausgegeben (Beispiel 1). Sind die beiden<br />

Werte nicht berechnet worden, dann wird nur die Meldung „Fehler“ ausgegeben (Beispiel 2).<br />

Ergänzen Sie das Programmgerüst auf der folgenden Seite!<br />

Beispiel 1: Beispiel 2:<br />

Seite 1 von 6


Lösung Aufgabe 2a und 2b:<br />

#include <br />

int main(void)<br />

{ /* Variable w: Winkel im Bogenmass */<br />

double w, ws, wt; /* ws, wt: sin- und tan-Wert von w */<br />

printf("Winkel im Bogenmass zw. 0 und 3.14");<br />

}<br />

{<br />

}<br />

return 0;<br />

sin_tan(<br />

Seite 2 von 6


Aufgabe 3: (ca. 19 Punkte)<br />

Mit dem Datentyp int können nur endlich viele verschiedene Zahlen dargestellt werden – es gibt eine<br />

kleinste und eine größte int-Zahl. Das folgende C-Programm zeigt, bei welcher Zahl ein Überlauf<br />

(Overflow) im Integerbereich auftritt und gibt eine entsprechende Meldung aus.<br />

#include <br />

int main(void);<br />

{<br />

}<br />

int i, j;<br />

i = 0<br />

do<br />

{<br />

}<br />

j = i + 1;<br />

IF ( j > i)<br />

{<br />

}<br />

else<br />

/* noch kein Overflow */<br />

i = i + 1;<br />

printf("Overflow nach %d\n, i);<br />

while ( j > 0 )<br />

return 0;<br />

3a) Das Programm enthält 5 Syntaxfehler. Kennzeichnen und korrigieren Sie diese Fehler.<br />

3b) Beschreiben Sie in Worten den Algorithmus, um den Überlauf zu finden. Warum liefert das Programm<br />

den gewünschten Wert?<br />

Seite 3 von 6


3c) Erstellen Sie das Struktogramm für das angegebene C-Programm.<br />

Seite 4 von 6


Aufgabe 4: (ca. 30 Punkte)<br />

4a) Schreiben Sie eine Funktion minexp, die folgende Aufgabe löst: An die Funktion wird eine ganze<br />

Zahl z übergeben. Die Funktion ermittelt dann die kleinste ganze Zahl k, für die gilt:<br />

z ≤ 2 k<br />

{<br />

}<br />

Besitzt z den Wert 0 oder ist z negativ, dann wird -1 zurückgegeben. Es dürfen keine Funktionen<br />

aus math.h (zum Beispiel „pow“) verwendet werden!<br />

Beispiele: z =16 : Rückgabewert 4, weil 2 3 < 16 ≤ 2 4<br />

minexp(<br />

z =17 : Rückgabewert 5, weil 2 4 < 17 ≤ 2 5<br />

z =32 : Rückgabewert 5, weil 2 4 < 32 ≤ 2 5<br />

z = 1 : Rückgabewert 0, weil 1 ≤ 2 0<br />

z = 0 : Rückgabewert -1<br />

Seite 5 von 6


4b) Eine Matrix ist als globale Variable wie folgt definiert und bereits mit Werten belegt:<br />

double a[10][10];<br />

Schreiben Sie eine Funktion diagonal, die alle<br />

Elemente auf der Hauptdiagonalen auf 1 setzt,<br />

aber nur dann, wenn der „alte Wert“ zwischen<br />

10.0 und 20.0 liegt (Grenzen eingeschlossen).<br />

Ansonsten bleibt der Wert unverändert.<br />

Die Elemente außerhalb der Hauptdiagonalen<br />

bleiben ebenfalls unverändert.<br />

void diagonal(void)<br />

{<br />

}<br />

4c) Schreiben Sie eine Funktion count_char. Diese Funktion ermittelt, wie oft ein bestimmtes Zeichen<br />

(z. B. ein Buchstabe oder eine Zahl) in einer Zeichenkette vorkommt. Die Zeichenkette und<br />

das zu suchende Zeichen werden als Parameter übergeben, als Rückgabewert wird die ermittelte<br />

Anzahl zurückgegeben.<br />

int count_char(char *str, char zeichen)<br />

{<br />

}<br />

Seite 6 von 6

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!