Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Plasmarain Mini JLI'ler
Anmeldedatum: 21.11.2003 Beiträge: 37
Medaillen: Keine
|
Verfasst am: 01.02.2004, 11:54 Titel: Formel umstellen |
|
|
Hallo,
ich bin mal wieder auf ein Problem gestoßen und zwar habe ich eine Formel, und muß die öfter mal umstellen.
jetzt habe ich das versucht über switch und in jedem case die formel anders umgestellt hinengeschrieben. Dann brauche ich nurnoch auswählen welches case ich brauche.
Wenn die Formel aber umständlicher wird oder ich brauche mehrer Formeln dann ist mein Programm voller switch anweisungen...
Noch schlimmer wenn der benutzer z.B. eine Funktion eingibt, die ich ja nicht kenne, dann geht auch das mit der switch anweisung nicht mehr...
Kann man bei C++ mit Buchstaben rechnen?
Beispiel:
v = s / t |*t
v * t = s
Oder der Benutzer gibt volgenden String ein:
y = x^2 + 3
Das muß man doch auswerten können, ich habe mir gedacht, y= in einem statischen Textfeld vorgeben und dann nur den teil rechts daneben auswerten. ok das geht wohl nur wenn ich dann nach x umstellen will stoße ich wieder auf das Problem nicht mit Buchstaben rechnen zu können...
Hat da wer eine Idee?
MFG
Matthias |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 01.02.2004, 11:59 Titel: Re: Formel umstellen |
|
|
Plasmarain hat Folgendes geschrieben: | Kann man bei C++ mit Buchstaben rechnen?
|
Nun mit Variablen halt, wie in der Mathematik auch. Allerdings nicht ganz so leicht. Man kann z.B. nich einfach y = x^2 + 3 schreiben, sondern:
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.02.2004, 12:26 Titel: |
|
|
Du könntest mal nach Programmen (ASCII kein ASM) für Casio oder Texas Instruments Rechner diese bieten dafür Programme an. Die kann man relativ leicht für C oder ähnliches umstellen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Plasmarain Mini JLI'ler
Anmeldedatum: 21.11.2003 Beiträge: 37
Medaillen: Keine
|
Verfasst am: 01.02.2004, 12:40 Titel: |
|
|
@Vision
Hi Vision, du hast mich etwas falsch verstanden, wenn ich in den Variablen zahlen habe und wie in diesem Fall
y = pow(2, x) +3
habe und y ausrechnen will ist das kein Problem aber wenn ich jetzt y habe und x ausrechen will... Dann muß ich die Formel amstellen.
@Fallen
Hi Fallen, du meinst diese programmierbaren Taschenrechner? Ja mal sehen, das könnte sein, ich werde gleich mal versuchen was bei Google zu finden... |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 01.02.2004, 13:47 Titel: |
|
|
Ein viel großeres Problem ist es, einen eingegebenen String zu parsen.
Man muss die ganze rechnung in einen Binärbaum zerlegen, das kann recht kompliziert werden. |
|
Nach oben |
|
|
Plasmarain Mini JLI'ler
Anmeldedatum: 21.11.2003 Beiträge: 37
Medaillen: Keine
|
Verfasst am: 02.02.2004, 19:15 Titel: |
|
|
Ja ich weiß noch nicht ob es geht aber ich dachte mir das so:
Der Benutzer gibt z.B. ein (jetzt mal ganz leicht anfangen)
200+300
Das sähe dann ja so aus:
"200+300\0"
jetzt untersuchen (mal sehen wie) was Zahl ist und was nicht und dann aufspalten:
"200\0" '+' "300\0"
IntToStr("200\0");
und so weiter, ich muß mir noch überlegen wie ich die Auswahl gestalte.
Hat jemand eine bessere Idee oder kann mir sagendas es nicht geht?
Dann macht das bitte ruhig.
MFG
Matthias |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 02.02.2004, 20:45 Titel: |
|
|
nun möglich ist alles doch musst du nun auch unterscheiden das 200-100
so aufgesplittet werden kann 200 -100 parsen ist eben eine kleine Wissenschaft für sich. Besonders wenn es dann zu komplizierteren Aufgaben kommen sollte: 200-100*50/(1000*2-10) oder so was ähnliches. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 02.02.2004, 21:05 Titel: |
|
|
dazu sind brauchst du auf jeden fall eine baumstruktur. Sonst lassen sich die Klammer und *vor- regeln nur sehr schwer umsetzen. Dazu dann eine Rekursive Funktion, die den baum durchgeht und das ergebnis ausrechnet. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.02.2004, 14:49 Titel: |
|
|
Ich bin gerade dabei, genau solch einen Mathematikparser zu Programmieren.
Ich habe mich schon spezieller damit auseinandergesetzt - Ziel der ganzen Aktion ist es sogar so weit zu gehen, dass ich als Eingabestring eine Formel berechnen kann, wie sie z.B. in Excel eingegeben werden kann, also auch mit Funktionen und Verweisen...
Die Binärbaumstruktur steht bei mir schon, ich bin gerade am Parser basteln, also der Schritt, der den Binärbaum aus dem EIngabestring erzeugt. Ist der Binärbaum erst mal erstellt, kann ich ihn bereits ausrechnen lassen. (PS.: Ich programmiere das in Ansi-C, es könnte gewisse Probleme geben, wenn man das in eine C++-Umgebung einbettet - da ich bisher nicht auf C++-Speziefische Regeln geachtet habe.) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 03.02.2004, 14:51 Titel: |
|
|
ich programmiere das gerade mit einem freund ich Java, wobei ich mich zZ um das Interface kümmer.. (irgendwas halbwegs vernünftiges muss man ja im Info Unterricht programmieren) |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.02.2004, 22:08 Titel: |
|
|
Hier eine Lösung, die ich heute Abend (Arbeit: Knapp 3 Stunden) für C# programmiert habe.
Sie beachtet Punkt-Vor-Strichrechnung sowie Klammerung und funktioniert für Strings, in denen die vier Grundrechenarten vorkommen, also z.B. für "-2-(6-4)*3+-2*3"
Beachtet auch die gleichzeitige Verwendung von Rechen- und Vorzeichen
Code: |
// Code entfernt, da bei einigen Konstellationen Rechenfehler auftraten. (falsche Parserreihnfolge)
|
Würde gerne mal Eure Meinung dazu wissen.
Falls gewünscht, kann ich diese Funktion auch für C umschreiben, dann sind allerdings eine Reihe von String-Hilfs-Funktionen Notwendig...
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
Zuletzt bearbeitet von AFE-GmdG am 04.02.2004, 15:11, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 03.02.2004, 22:44 Titel: |
|
|
Wenn du willst kann ich dir mal meinen Paser geben damit du mal vergleichen kannst. (Ich habe noch Funktionssupport) _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Plasmarain Mini JLI'ler
Anmeldedatum: 21.11.2003 Beiträge: 37
Medaillen: Keine
|
Verfasst am: 04.02.2004, 21:50 Titel: |
|
|
So da bin ich mal wieder, gut zu sehen das ich mit der Idee nicht ganz alleine da stehe...
Das mit der Baumstruktur ist mir noch nicht ganz klar, kann man das system irgentwo "nachlesen" ? hat wer eine Internetseite?
MFG
Matthias |
|
Nach oben |
|
|
|