Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Gleichungen lösen.

Diskussion: Gleichungen lösen. im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo. Ich hab ein Programm selbst geschrieben, welches Gleichungen löst (Funktionsgleichungen....). Jetzt hab ich nur ein Problem.... Hier der ...

Antwort
Alt 15.09.07, 11:01   #1 (permalink)
 
Registriert seit: 16.04.07
D31~$0u1 Leistung: Facit NTK
D31~$0u1 eine Nachricht über ICQ schicken
Likes: 0
Standard Gleichungen lösen.

Anzeige

Hallo.
Ich hab ein Programm selbst geschrieben, welches Gleichungen löst (Funktionsgleichungen....).

Jetzt hab ich nur ein Problem.... Hier der Code

Der Quellcode   
#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#include <fstream>




using namespace std;



int main(int argc, char *argv[])
{

float x, a, b, c, z, l;

cout << "Die Gleichung hat den Aufbau y = a*(x*x) + b*x + c" << endl;
cout << "Wobei y = 0" << endl;
cout << endl;

getch();
cout << "Bitte ale Zahlen mit ihrem Vorzeichen angeben." << endl;

cout << "Bitte a eingeben: ";
cin >> a;
cout << endl;

cout << "Bitte b eingeben: ";
cin >> b;
cout << endl;

cout << "Bitte c eingeben: ";
cin >> c;
cout << endl;


x=0;

do
{
x=x+0.1;

l=((a*(x*x))+(b*x))+c;
cout << l << " l ist so groß" << endl;
cout << x << " l ist so groß" << endl;
getch();


} while (l != 0);

cout << endl;
cout << "Bei der Gleichung: " << a << "*(x*x)+" << b << "*x+" << c <<endl;
cout << "Ist x= " << x << endl;
cout << endl;
system("PAUSE");
}



x wird immer um o,1 erhöht... Ich habs mal mit der Gleichung a=+1 b=-6 und c=+9 probiert, ich weiß, dass da 3 hinmuss, um die Gleichung auf Null zu bringen (Es geht um Nullstellen in Parabeln)

Aber wenn er dann bei 3 angekommen ist, so steh folgenes als Ergebnis da:
5,11591e-013

Wird x immer um 0,2 erhöht, so steht etwas ähnliches da und wenn es immer um 0,5 erhöht wird, dann funktionierts.... aber dann habe ich leider keine garantie, dass wirklich alle möglichkeiten mit einer nachkommarstelle getestet wurden....

Wo liegt da der Fehler?


Danke schonmal im voraus...
Gruß, D31~$0u1
D31~$0u1 ist offline   Mit Zitat antworten
Alt 15.09.07, 11:42   #2 (permalink)
 
Registriert seit: 23.10.06
raven88 Leistung: Facit NTK
Likes: 0
Standard

Das Ergebnis ist richtig. Gib mal 5,11591*e^-13 im Taschenrechner ein... fast! 0
Ich denk mal, dass das Ausgabeformat eines Floats ist (hab grad erst mit C angefangen).

Mal abgesehen davon...
Eine Funktion kann ja auch nur negative Nullstellen haben. Also mit x=0 kanns passieren das du keine Nullstellen findest.
Warum benutzt du eigentlich nicht die Lösungsformel?
raven88 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 15.09.07, 16:18   #3 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

Fließkommazahlen kannst du nicht einfach wie Ganzzahlen auf Gleichheit prüfen, da es zu Rundungsfehlern kommen kann. So eine Abfrage wie if ( l != 0 ) kann somit ziemlich in die Hose gehen, denn du vergleichst einen Float (der auch so gut wie niemals exakt 0 sein wird) mit einem Integer. Wenn du da auf Gleichheit prüfen willst, dann haut das nur über Toleranzbereiche hin, dass du diese Aussage also beispielsweise als wahr betrachtest, wenn l hinreichend weit unterschiedlich von 0 ist.

Die Schreibweise 5,11591*e^-13 bedeutet übrigens nichts anderes als 5,11591 * 10^-13, also 0,000000000000511591, was ja schon ziemlich klein ist
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 15.09.07, 17:22   #4 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
hier der Insider-Tipp um Nullstellen zu finden:
Bei Parabeln kann man die PQ-Formel verwenden, lässt sich sehr leicht programmieren und führt immer zum richtigem Ergebnis.

Bei Funktionen höheren Grades speichert man das Ergebnis des vorherigen durchlaufes zwischen.
Wenn das alte Ergebnis * dem neuen Ergebnis eine negative Zahl (<0) ergibt, so war zwischen diesen beiden Ergebnissen eine Nullstelle.
Natürlich sollte man auch überprüfen, ob das Ergebnis von vornherein 0 ist.
Elderan ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Gleichungen lösen.
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mathe Gleichung lösen Ook! Science & Fiction 7 04.11.08 16:28
crackmes lösen ??? octron195 Doppelte Beiträge 1 17.08.08 14:51
Gleichungen :::Lük::: Code Kitchen 11 02.05.07 19:13
Gleichungssystem lösen Serow Off topic-Zone 1 11.12.06 19:21
rätsel lösen weedmenn Hacks & Crackmes 5 14.04.06 23:10


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61