exponentialfunktion darstellen
-
das mit k=0 steht in der aufgabenstellung.. ...
Schreiben Sie ein C Programm, das die Exponentialfunktion mit Hilfe einer
Reihenentwicklung berechnet, und zwar mit folgender Summen-Formel: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.
-
nu fang mal langsam an meen jung
-
wonmit anfangen???
-
mit programmieren vielleicht?
-
wie du siehst habe ich angefangen aber kann dem aufgebentext nicht ganz gerecht werden.
und den 2ten teil mit der while schleife bekomme ich noch weniger hin
-
Wo ist eigentlich groß das Problem?
http://ideone.com/DxNhuT
Alles wie gewollt.
-
nicht ganz .. aber vllt kann ich da ewtwas für meine zwecke gebrauchen, danke
-
@ SeppJ
der link, den du gepostet hast ist gut aber nicht meine aufgabe.. leider. scheint wohl doch nicht so leicht zu sein
-
Jan1989 schrieb:
@ SeppJ
der link, den du gepostet hast ist gut aber nicht meine aufgabe.. leider. scheint wohl doch nicht so leicht zu sein
Das brauchst du doch nur noch auszubauen.
-
wenn ich das ausbaue, bin ich genauso weit, wie ich es oben gepostet habe.. kommt es dann zur rechnung mit k, stört wieder die null. weil 0 mal irgendwas ja bekanntlich 0 ist
-
Nö, das siehst du verkehrt.
Was du gepostet hast ist schon vom Ansatz her falsch, jetzt hast du ne vernünftige Basis, nämlich die Berechnung der Fakultät.
-
vom ansatz stimmt meins, das kann ich ja im compiler prüfen.
dann verstehst du die aufgabe nicht ganz.. schade. habe gehofft, dass mir im forum einer helfen kann.
oder was stimmt denn deiner meinung nach bei meinem ansatz nicht.
-
Das würdest du schon sehen, wenn du wenigstens den Ansatz lauffähig machen und dir dann die Werte anschauen würdest.
Tipp: nicht initialisierte Variable ergeben nicht vorhersehbare, nicht berechenbare Ergebnisse.
Vielleicht kommst du dann auch darauf, dass du gar nichts mit 0 multiplizieren brauchst.
-
sprich doch in klaren worten. was kann ich bei meinem programm verändern, dass es läuft.? in der forschleife muss K=0 stehen, das ist aufgabenstellung
-
Tipp: Mein Programm ist in der Tat ein guter Ansatz und mit Bedacht so gewählt, dass du darauf aufbauen kannst. Ein bisschen Eigeninitiative musst du schon zeigen. Schau dir die wenigen Zeilen an und verstehe, was ich warum anders mache und wieso ich zu jedem k die passende Fakultät erhalte und du nicht.
-
sollte das stimmen, was du sagst und du meine aufgebe verstehst, komme ich nicht auf den springenden punkt, wo sich deins von meinem im grundaufbau unterscheidet.
ps: eingeninitiative zeige ich seit 3 wochen und weiter als nun bin ich nicht.. also sitze nun insgesamt vllt 20 h dran. montag ist abgabe ..
-
Das mag ja alles sein, das sieht hier bloß niemand.
Hier ist nur eine for-Schleife zu sehen, die wilde Zufallswerte 'berechnet' und allenfalls eine Fakultät von 0 = const liefert.
Naja - das Geschenk von SeppJ hast du ja frei Haus geliefert bekommen.
Hier ist die zugehörige Exponentialfunktion:int main ( void ) { double zaehler; double x = 2; int n = 11, k; for ( k = 0; k < n; k++ ) { zaehler = pow ( x, k ); printf ( "%lf\n", zaehler ); } return 0; }
Falls du pow nicht benutzen darfst, musst du ein bischen tricksen, gucke dir mal den Post von rkhb dazu an.
-
Hallo,
noch einen Tip: Es ist nicht gut die Fakultät und pow getrennt zu berechnen, weil die Werte schnell sehr groß werden.
schreib lieber als
-
Jan1989 schrieb:
was kann ich bei meinem programm verändern, dass es läuft.? in der forschleife muss K=0 stehen, das ist aufgabenstellung
-
Wenn in der FOR-Schleife k==0 ist, dann soll die eigentliche Berechnung von xhochk und kfakultaet nicht stattfinden wg. falscher Ergebnisse - sondern etwas anderes. Klingelt es bei Dir beim Wörtchen "wenn"?
-
Eine For-Schleife ist nur ein spezieller Fall der While-Schleife. Eine Schleife
for (A; B; C;) { D; }
kannst Du immer aufdröseln in:
A; while (B) {D; C;}
Beispiel:
for (i=0; i<10; ++i) { x *= x; } kann man umwandeln zu: i=0; while (i<10) { x *= x; ++i; }
Für den zweiten Teil, empfehle ich, die For-Schleife aufzudröseln und die entstandene While-Schleife nach den neuen Abbruchbedingungen zu verändern.
viele grüße
ralph
-
-
#include <stdio.h> double my_exp_n (double x, int degree) { int i; double exp_val=1.0; double x_div_l = x; for (i=0;i<degree;++i) { exp_val += x_div_l; x_div_l *= x / (i+2); } return exp_val; } #define my_exp(x) my_exp_n((x), 100) int main() { int i; for (i=0;i<=10;++i) { int x = 3*i; printf("exp(%d) = %e\n", x, my_exp(x)); } return 0; }