Seite 1 von 1

Gleichungseingabe in einer xxx.exe?

Verfasst: 05.04.2007 18:23
von HemSA
Hallole Ihr hier im Board und in der Lounge,
ihr habt ja bald Ostern - hier gibt es sowas nicht.
Ich wünsche Euch jedenfalls schon mal schöne Feiertage.

Ich habe eine Frage.

Ich habe mir auf die Schnelle eine Konsole geschrieben. Thema: Numerische Ermittlung der Nullstellen einer Funktion anhand des REGULA FALSI Verfahrens. ( Für die die ihr Wissen nochmal auffrischen wollen hier ein interesanter Link mit Animation wie das Verfahren funktioniert: http://de.wikipedia.org/wiki/Regula_Falsi)

Ich weiss, es ist nicht die beste Programmierung mit den vielen GOTO / GOSUB etc., aber der Code ist ja nicht allzulange und ich will es später komplett sauber in einer WINDOWS-Ausführung mit Prozeduren schreiben (mit Funktionswertausgaben, graphische Darstellung der Funktion, Simpson Formel etc.).

Hier ist der Code:

Code: Alles auswählen

;Nullstellenberechnung nach Regula Falsi

OpenConsole()
EnableGraphicalConsole(1)                      
ConsoleTitle ("Nullstellenberechnung nach Regula Falsi")                                                  
ConsoleColor(15,0)

Neueingabe1:
;Neueingabe der Werte

ClearConsole()

ConsoleLocate(3,3):Print ("Eingabe vom unterem X-Wert= "):xus.s = Input()
ConsoleLocate(3,4):Print ("Eingabe vom oberem X-Wert = "):xos.s = Input()
ConsoleLocate(3,5):Print ("maximale Abweichung (Format:0.001,kein Komma!) von der Y-Achse= "):gs.s = Input()

xul.l=Val(xus.s)
xol.l=Val(xos.s)
gf.f=ValF(gs.s); oder als Wert 0.0001 eingeben (max. zulässige Y-Standartabweichung )
                                      
ConsoleLocate (3,20):Print("Weiter mit Return Taste")

Repeat
x.s = Inkey()
Until Left(x.s, 1) = Chr(13);Abfrage für Returntaste 

ClearConsole()

Goto Start

Schleife1:
If x1f.f>=xol.l:Goto Abruchbedingung:EndIf
xul.l=x1f.f
Start:
x2f.f=xul.l
x1f.f=xul.l+1
x2s.s=StrF(x2f.f)
x1s.s=StrF(x1f.f)
;PrintN(x2s.s+"   "+x1s.s) ;zur Kontrolle der Schleife
xf.f=x1f.f
Gosub Formel
y1f.f=yf.f
xf.f=x2f.f
Gosub Formel
y2f.f=yf.f

If y1f.f*y2f.f > 0 :Goto Schleife1:EndIf;keine Nullstelle zwischen x1 und x2
losungl.l=1; Nullstelle gefunden

Schleife2:
x3f.f=x1f.f-(((x2f.f-x1f.f)*y1f.f)/(y2f.f-y1f.f))

xf.f=x3f.f
Gosub Formel
If Abs(yf.f)<gf.f:Goto Nullstellenausgabe:EndIf
x2f.f=xf.f
y2f.f=yf.f
Goto Schleife2

Nullstellenausgabe:
xs.s=StrF(xf.f)
ys.s=StrF(yf.f)
PrintN("Nullstelle bei X= "+xs.s+" mit einer Y-Abweichung von "+ys.s)
Goto Schleife1

Abruchbedingung:
If losungl.l=1:Goto Losung:Else :Goto Keine_Losung:EndIf

Losung:
ConsoleLocate(3,20):Print("Bei Neustart bitte Returntaste druecken, sonst 1 eingeben zum Beenden  ")
e.s=Input()
If e.s = "1":Goto Ende:Else:Goto Neueingabe1:EndIf

Keine_Losung:
ConsoleLocate(3,5):Print("Keine Nullstelle im angegebenen Bereich gefunden")
ConsoleLocate(3,20):Print("Bei Neustart bitte Returntaste druecken, sonst 1 eingeben zum Beenden  ")
e.s=Input()
If e.s = "1":Goto Ende:Else:Goto Neueingabe1:EndIf

Ende:
End

Formel:
yf.f=Pow(xf.f,3)+2*Pow(xf.f,2)-3*xf.f+2
Return
Jetzt die Frage.
Ihr könnt es ja gut benutzen, da ihr ja die Funktion ganz am Schluss vom Programm "von Hand" nach bestimmten Regeln ( auch in Excel benötigt man die richtige Syntax ) eingeben könnt und sowieso PureBasic habt.
Aber wie kann ich es anstellen in einer xxx.exe, daß man die Funktion in enem Gadget eingibt und dann das Ganze nach der eingegebenen ( in der richtigen Syntax natürlich ) Funktion berechnet wird ( wie z.B. in Excel oder meinem alten Taschenrechner )?
Irgendwie hat es wohl mit Parser zu tun, oder? Aber was ich gefunden habe funktionier ja nicht bei allen Berechnungen ( Klammer, Winkel,-Wurzel,-etc. Funktionen).
Hat da jemand eine Idee wie man das in PureBasic lösen könnte, es würde mir reichen wenn es nur unter WINDOWS laufen würde ( vielleicht auch eine API? )?

Vielen Dank schon mal im Vorraus und nochmal schöne Feiertage mit hoffentlich sonnigem Wetter beim Eiersuchen.

Formeln berechnen in der EXE

Verfasst: 09.06.2007 00:17
von NicknameFJ
Hallo !

Ich habe es selbst zwar nicht ausprobiert, bin aber unter

http://www.purearea.net/pb/download/dll/fmlcalc.zip

auf eine DLL gestoßen.

Schau mal ob sie Dir weiterhilft

Grüße

Verfasst: 10.06.2007 17:13
von HemSA
Danke NicknameFJ

ich habe mir die Sache angeschaut. Das Hinzufügen von neuen Funktionen klappt ( habe Log hinzugefügt ), aber wenn ich gleichzeitig eine Wurtzel und Log-Funktion hätte stünde ich wieder auf dem Schlauch, weil ich ja nicht weiß was die DLL macht. Von dem her nicht ganz so meine Sache. Ich mag Sachen, die alle in einem Code untergebracht sind.

Ich habe mich entschlossen es mit den "Eval (Eingabe-Auswertung)" auch aus dem purearea.net zu lösen. Aber da es ein grösseres Projekt sein wird ( Nullstellen, Funktionswerte, Integral, Graphdarstellung etc. ) und es keine Eile hat, habe ich es erst einmal hinten angestellt.

Trotzdem Danke nochmal.

Verfasst: 10.06.2007 21:23
von Vallan
http://tobiasgriese.rshost.de/

Hab ich auch mal gemacht. Da sind auch andere codes dabei, aber caotischer. (mein Proggrammierstil hat sich im laufe der letzten jahre gebessert ^^)

Verfasst: 12.06.2007 21:01
von HemSA
Danke Vallan,
werde mir das Ganze mal anschauen. Wenn ich Fragen habe komme ich wieder auf dich zu.