000
04.12.2011, 16:59 Uhr
mclima
|
Hallo zusammen,
habe grade im Forum gesehn, dass Ihr einem meiner Leidensgenossen (BWL Student im Informatikpraktikum) mit Erfahrung und Hilfe zur Seite gestanden habt.
Es wäre echt eine riesige Hilfe für mich, wenn ihr mir da vielleicht auch in ähnlicher Art helfen könntest.
Anscheinend ist eine Aufgabe der Art ja für Informatiker ein Witz, doch wir beissen uns daran echt die Zähne aus und werden dafür nur sehr unwarscheinlich noch einmal einen Nutzen haben.
Die Aufgabe lautet wie folgt (ich glaube der größte Teil des Textes ist aber irrelevant):
Schreiben Sie ein C Programm, das die Exponentialfunktion mit Hilfe einer Reihenentwicklung berechnet, und zwar mit folgender Summen-Formel:
ε^x=∑x^k/k!=1+x+1/2x^2+1/2*3x^3+1/2*3*4x^4+....
Sie sollen die Reihe in jedem Fall ohne die Verwendung von mathematischen Funktionen, also nur mit Hilfe von Addition, Multiplikation und Division, programmieren!
In einer Programmschleife lässt sich xk einfach durch wiederholtes Multiplizieren von x mit einer Variablen realisieren, die den Anfangswert 1.0 bekommen hat (1.0, 1.0*x, 1.0*x*x,
1.0*x*x*x, u.s.w.). k! lässt sich ähnlich berechnen: 1.0, 1.0*1, 1.0*1*2, 1.0*1*2*3, u.s.w. Hinweis: Achten Sie darauf, dass die Variablen für das Bilden von xk und k! und die Variable für die Summenbildung alle den Datentyp double haben!
Wenn die Programmausgabe des Summenwerts "inf" oder "nan" anzeigt liegt ein numerisches Problem vor, das wahrscheinlich durch einen zu hohen Wert in einer Integer-Variablen (Überlauf) entstanden ist. Sie sollen die Reihe in jedem Fall ohne die Verwendung von mathematischen Funktionen, also nur mit Hilfe von Addition, Multiplikation und Division, programmieren! Ihr Programm soll einen Wert für x als Benutzereingabe einlesen (Datentyp double). Danach soll mit einer for–Schleife die Reihe der Exponentialfunktion von k=0 bis k=Ihre_Matrikel_Nummer%100 (mindestens jedoch bis k=10) berechnet werden. Die Reihe soll also abgebrochen werden, wenn k den Wert erreicht, der sich als Rest der Integer- Division Ihrer Matrikelnummer durch 100 ergibt. Wenn dieser Wert kleiner als 10 ist, soll bis k=10 gelaufen werden (if Anweisung verwenden!). Bei jedem Schleifendurchlauf sollen der Wert für k und der aktuelle Summenwert der Reihe mit printf ausgegeben werden. Nach der for–Schleife soll die Reihe noch einmal berechnet werden. Dieses Mal soll dazu eine while–Schleife verwendet werden. Diese Schleife soll nicht eine feste Anzahl von Durchläufen ausführen, sondern sie soll die Reihe solange fortsetzen, bis eine vorgegebene Absolut-Differenz zum Wert der Exponentialfunktion aus der C Mathematik-Bibliothek (Funktion exp(), math.h mit #include einfügen!) erreicht wird. Die Mathematik-Funktion exp liefert den Wert der Exponentialfunktion mit der Genauigkeit des Datentyps double. Für die Berechnung der Laufbedingung der while–Schleife müssen Sie das Ergebnis von exp(x) von dem aktuellen Summenwert Ihrer Reihe abziehen und von der Differenz den Absolutbetrag bilden (mit Funktion fabs, siehe Übung 2). Die Schleife soll nur solange laufen wie diese Absolut-Differenz größer als der Wert 100.0/Ihre_Matrikelnummer (Quotient aus 100.0 und Ihrer Matrikelnummer) ist. Bei jedem Schleifendurchlauf sollen die Absolut-Differenz und der aktuelle Summenwert der Reihe ausgegeben werden. Bitte beachten Sie, dass beide Schleifen, die for–Schleife und die while–Schleife, im selben Programm hintereinander ausgeführt werden sollen. Mit einer if – Anweisung sollen Sie dafür sorgen, dass die for–Schleife mindestens bis k=10 läuft.
Über eine Antwort würde ich mich freuen!
Vielen Dank im Voraus! |