Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilferuf Bitte ansehen!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.12.2011, 19:27 Uhr
0xdeadbeef
Gott
(Operator)


Die Aufgabe ist in der Tat nicht allzu schwierig; man muss nur ein bisschen aufpassen, es so zu formulieren, dass keine zu hohen Zwischenwerte entstehen.

Hausaufgaben für lau gibt's hier aber nicht. Zeig mal her, was du schon hast und erklär, wo du konkrete Probleme hast.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: