Mathematische Funktion eingeben und Nullstellen berechnen
-
Hallo Leute,
schreibe ein Programm, das Nullstellen einer Funktion berechnen kann.
Es funktioniert auch prächtig, leider kann ich nur eine "fixe" Funktion ausrechnen.int main(int argc, char* argv[]) { float x[10], y, xmin, xmax, dx; float losung; xmin=-5; xmax=5; dx=0.001; x[1]=xmax; x[2]=xmin; //printf("fx=x^2-3\n") do { y=pow(x[1],2)-3; x[1]-=dx; }while (y >=0 ); do { y=pow(x[2],2)-3; x[2]+=dx; }while (y >=0 ); printf("losung x1=%f, x2=%f ", x[1],x[2]);
(Das wäre jetzt mal die Grundidee)
Ziel dieses Programms wäre es, dass man eine Funktion und die Grenzwerte angibt und einem dann die Nullstellen berechnet werden.
Aber wie kann ich eine Funktion wie zB. den ln() eingeben, ohne mei gesamtes Programm zu verändern ???
Grüße Martin
-
dazu müßtest du einen "mathematischen parser" bauen. der übersteigt vermutlich im aufwand dein bisheriges programm um den faktor 100 und kommt deswegen eher nicht in frage.
-
Naja der Faktor 100 ist schon eher bedenklich...
-
Bist du eigentlich der, der dieses Tutorial geschrieben hat?
-
ja.
-
Wenn du der bist der das Tutorial hier geschrieben hat:
http://tutorial.schornboeck.net/inhalt.htm
Warum hat dann Shade of Mine einen Link "zu seinem Tutorial" welcher genau auf das selbe zeigt? Bin gerade etwas verwirrt, habe ich mich schon immer jefragt?
-
Firefighter schrieb:
Wenn du der bist der das Tutorial hier geschrieben hat:
http://tutorial.schornboeck.net/inhalt.htmder bin ich nicht.
-
Ahhh alles klar...dann habe ich einfach nur falsch gelesen. Sorry. deins ist www.volkard.de oder? Weil die seite ist blöder weiße nicht erreichbar
-
Firefighter schrieb:
Ahhh alles klar...dann habe ich einfach nur falsch gelesen. Sorry. deins ist www.volkard.de oder? Weil die seite ist blöder weiße nicht erreichbar
ja, ist mir bekannt.
es gibt zum glück genügend spiegel wie http://webneu.rz.hs-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/
-
Ok danke, genug OT
-
volkard schrieb:
es gibt zum glück genügend spiegel wie http://webneu.rz.hs-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/
Ob man es Glück nennen kann? Ich meine schon nur Lektion 2:
void main() // <- AAAAARGH, void! Nein, Nein, Nein! { };
Lektion 3:
#include <iostream.h> // <- Kein ISO C++ Standard void main() { // Dies ist das Hello-World-Programm cout<<"Hello, world!"<<endl; // <- Dadurch kein std Namensraum! };
usw.
Das Tutorial sollte mal dringends überarbeitet werden oder all die Spiegel sollten verschwinden.Grüssli
-
pah, sind doch nur ganz unwesentliche sachen.
http://wwws.htwk-leipzig.de/~sschwarz/volkart/html/klasse_nimmspiel__void_main_oder_int_main.html
http://ittk.falb.at/pt/unterlagen/vcppk/die_klasse_string.html
-
volkard schrieb:
pah, sind doch nur ganz unwesentliche sachen.
Vor allem "unwesentlich" wenn sich die Implementierungen der <iostream.h> und der <iostream> in mehr als dem Namensraum std unterscheiden (Solche Fälle habe ich bereits erlebt).
-
volkard schrieb:
pah, sind doch nur ganz unwesentliche sachen.
Finde ich persönlich gar nicht.
Man sollte zuerst den Standard lernen, danach kann man immer noch Kompilereigenheiten erlernen. Erst recht, sollte man mit gültigem Standard anfangen, da sich der Neuling darüber nerven wird, dass er sich zuerst etwas anderes angewöhnt hat.
Das ganze Tutorial hält sich teilweise nicht so wirklich an den Standard und vermischt auch gern mal C++ und C, statt die beiden gut zu trennen. Es gibt keinen Grund, wieso ein Anfänger C Code in seinem C++ Code verwenden sollte. Er kann höchstens in Zukunft in Fehler hineinlaufen, da er sich über die Unterschiede nie bewusst war.
Ich persönlich halte so ein Vorgehen für fahrlässig.Grüssli
-
Dravere schrieb:
und vermischt auch gern mal C++ und C
beispiel?
-
@Dravere: Steht nicht im Standard It shall have a return type of type int, but otherwise its type is implementation-defined?
-
David_pb schrieb:
@Dravere: Steht nicht im Standard It shall have a return type of type int, but otherwise its type is implementation-defined?
Doch, das steht genau drin. Und es steht auch noch drin, dass jeder standardkonformer Kompiler die folgenden zwei Arten sicher aktzeptieren muss:
`int main() { /* ... */ }
int main(int argc, char* argv[]) { /* ... */ }
Also anders gesagt, ist der Rückgabewert
int` standardisiert, der Rest ist den Kompilerherstellern freigegeben und dadurch nicht standardisert. Es wird einfach nur erlaubt.Ich meinte mit "Standard lernen", dass man das Zeug lernt, was sicher auf jedem standardkonformer Kompiler funktionieren wird.
Edit:
@Volkard,
Einfach ein Beispiel, frei herausgegriffen:
http://webneu.rz.hs-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/char_short_int_und_long.html
limits.h
ist C, in C++ hat man dafürlimits
und die Klassestd::numeric_limits
.Grüssli
-
Dravere schrieb:
[
Also anders gesagt, ist der Rückgabewertint
standardisiert, der Rest ist den Kompilerherstellern freigegeben und dadurch nicht standardisert. Es wird einfach nur erlaubt.Ist zwar nicht standardisiert aber trotzdem konform. Klar, es ist immer gut zu wissen was definitiv überall funktioniert. Aber falsch sind die anderen Varianten nicht.
-
David_pb schrieb:
Aber falsch sind die anderen Varianten nicht.
Habe ich das gesagt?
Ich halte es nur für falsch, dass man etwas lernt, was völlig unterschiedlich sein kann.
Sonst könnte man zum Beispiel den Leuten auch beibringen, dass C-Array Grenzen geprüft sind, weil das gewisse Kompiler machen. Dabei ist es völlig frei, ob da eine Prüfung passiert oder nicht.Kompilerspezifische Erweiterungen kann man immer noch später erlernen.
Grüssli
-
Dravere schrieb:
David_pb schrieb:
Aber falsch sind die anderen Varianten nicht.
Habe ich das gesagt?
Nein hast du nicht. Aber es wird oft als falsch dargestellt.