exponentialfunktion darstellen
-
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; }
-
Hab gerad ma den kompletten thread gelesen
, versteh auch nicht wo das Problem ist:
Ein etwas ausführlicherer Ansatz
http://ideone.com/C4MjnzEdit: Außerdem ist die Aufgabenstellung banane; was soll der Vergelich mit der exp-funktion aus c-math? Dann kann man sich die ganze Programmiererei doch sparen.
Mach ne vernünftige Restgliedabschätzung (ich mein das is exp!) und bau ne Toleranz ein, dein Dozent wird sich freuen
-
Die Lösung von Ralph ist schon sehr schön:
1. Er berechnet weder die Potenz noch die Fakultät pro Schritt neu, sondern schreibt die Werte weiter. Der Link auf ideone.com zur Fakultätsberechnung ist daher nicht besonders zielführend.
Trotzdem habe ich folgende Anmerkungen bzw. ernste Warnungen, ohne seine Leistungen schmälern zu wollen:
1. Schönheit: Das Format %.50f ist wohl eine Art Angstanweisung, da double nur 17 signifikante Dezimalstellen hat? Ggf. muss der Punkt das Vorzeichen dazugezählt werden. Wird der Ganzzahlanteil größer, so treten hinten immer mehr bedeutungslose Nullen auf.
2. Das Abbruchkriterium bereitet mir dagegen Bauchschmerzen. Es wird vorausgesetzt, dass bei der Reihenentwicklung keine Änderung im Ergebnis mehr zu erkennen ist. Das funktioniert bei monoton kleiner werdenden Gliedern ganz gut. Wehe aber, die Reihe hat alternierende Vorzeichen, dann kann es passieren, dass die letzte Binärstelle immer hin- und herschaltet, so dass der Vergleich versagt und das Programm in Dauerschleife gerät.
====================================================
Vergleiche nie zwei Gleitkommazahlen auf Gleichheit!Ok, im Programm steht !=, aber die Schleife hört erst bei exakter (binärer) Gleichheit auf. Ein guter Bauingenieur hört in seinen jungen Jahren viel über die Epsilontik, bei dem der Betrag zweier Reihenglieder unter eps fallen soll usw. usw. eps=0 darf auch in der EDV nicht ungestraft vorausgesetzt werden.
Liebe Bauingenierue und Programmierer merkt euch für die Zukunft (aber nicht für die Klausur):
Eine Reihenentwicklung sollte daher in ernsthaften Programmen nie bis auf die letzte Binärstelle ausgenutzt werden.Übrigens bei irgendeiner Appolo-Mission musste der Pilot der Landefähre während des Andockens auf Handsteuerung umschalten, weil der Entfernungsmesser genau dieses Problem im letzten Bit hatte. Das hätte ziemlich teuer werden können.