azett Geschrieben 1. November 2004 Teilen Geschrieben 1. November 2004 nabend! "ich hätt da gern ma ein problem." sachlage: ein programm fordert als eingabe einen mathematischen term als string. der term kann auch geklammert sein. ausgegeben werden soll dann das korrekte ergebnis des terms. beispiel: eingabe (1+2)*(1+(15-5)/5) ausgabe 9 idee: vor der eigentlichen berechnung zunächst überprüfen, ob der string überhaupt einen korrekten term enthält (nur klammern, zahlen und operatoren? term-syntax korrekt?). dann den term zerlegen und berechnen. problem: die klammer-erkennung während der term-überprüfung. ich will nicht nur überprüfen, daß die anzahl der öffnenden und schließenden klammern gleich ist (was bei einem korrekten term natürlich so ist), sondern auch, ob diese syntaktisch richtig stehen. die klammern können aber ineinandergeschachtelt sein und/oder nacheinander stehen - und dazu fällt mir trotz vieler versuche und überlegungen kein allgemeiner algorithmus ein. hat jemand ne zündende idee, wie ich die klammerung des terms auf korrektheit checken kann? ich bräuchte nur nen kleinen indikator für die grauen zellen...nicht mehr merci und eine schicke woche.. ..azett Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 1. November 2004 Teilen Geschrieben 1. November 2004 Vor einer öffnenden Klammer darf keine Zahl stehen, dahinter kein Operator (außer unäres + oder -, also als Vorzeichen). Vor einer schließenden Klammer kein Operator, dahinter keine Zahl. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 2. November 2004 Teilen Geschrieben 2. November 2004 Servus, google mal nach endlichen Automaten und Turingmaschinen. Einer dieser Automaten kann Sprachen erkennen, die Terme, wie Du sie hast, erkennen. Zumindest die Klammersetzung. Um die Korrektheit der zu berechnenden Ausdrücke musst Du Dich dann auch noch kümmern. Peter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nixaja Geschrieben 2. November 2004 Teilen Geschrieben 2. November 2004 nabend! sachlage: ein programm fordert als eingabe einen mathematischen term als string. der term kann auch geklammert sein. ausgegeben werden soll dann das korrekte ergebnis des terms. beispiel: eingabe (1+2)*(1+(15-5)/5) ausgabe 9 Servus! Ich stand vor einiger Zeit vor dem gleichen Problem. Wenn du für dein Programm nur das Ergebnis des Terms benötigst und du mit einer Datenbank verbunden bist, könntest du auch folgendermaßen vorgehn. Bei dem SQL Statement "SELECT (1+2)*(1+(15-5)/5) erg FROM DUAL" erhältst du bei einer Oracle Datenbank erg = 9. Bei einer SQL Datenbank dürfte es folgendermaßen funktionieren: "SELECT (1+2)*(1+(15-5)/5) erg" Vielleicht hilft dir das ja auch weiter Nixaja Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
azett Geschrieben 2. November 2004 Autor Teilen Geschrieben 2. November 2004 Bei dem SQL Statement "SELECT (1+2)*(1+(15-5)/5) erg FROM DUAL" erhältst du bei einer Oracle Datenbank erg = 9. hehe..."um den termrechner nutzen zu können, installieren sie bitte zunächst Oracle 9i." danke für den tip...is tricky um die ecke gedacht, aber das programm sollte im kB-bereich bleiben (und vor allem will ich die berechnung ja selbst schreiben) klotzkopp hat mich betreffs validitätsprüfung auf den richtigen pfad gebracht (denk ich mal ) - merci! und was die eigentliche termberechnung angeht: die krieg ich dann bestimmt auch hin...und wenn nicht, schwatzmer nochmal drüber merci sagt.. ..der azett Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 2. November 2004 Teilen Geschrieben 2. November 2004 Wenn Du den Term ohnehin ausrechnen willst, musst Du wärend der Zerlegung doch ohnehin auf Korrektheit prüfen und kannst ggf. mit einem Fehler (z.B. unbekanntes Symbol, etc.) abbrechen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
azett Geschrieben 4. November 2004 Autor Teilen Geschrieben 4. November 2004 ich trenn termvalidierung und berechnung. zunächst werden die zeichen überprüft, dann, ob die anzahl der öffnenden und schließenden klammern gleich ist und zum schluß, wie die zeichen zueinander stehen (z.b. ob zwei operatoren aufeinander folgen). wenn das alles hinhaut, findet die berechnung statt. is zwar performancemäßig nicht das optimum, aber es hält die sache ungemein übersichtlich wenn ich den rest fertig hab, kann man da ja mal über ne optimierung nachdenken. [erfolgserlebnis] geklammerte terme zerlegt er mir jetzt schon hübsch in teilaufgaben und gibt auch brav das ergebnis aus [/erfolgserlebnis] - informatik is doch immer wieder was schönes jetzt muß ich ihm nur noch beibringen, daß man punkt vor strich rechnet schönen feierabend und sport frei.. ..azett Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 4. November 2004 Teilen Geschrieben 4. November 2004 Hallo, je nach verwendeter Programmiersprache gibt es auch Tools, die diese Validierung und ggf. die Berechnung der Terms automatisch durchführen. Für C/C++ sind das beispielsweise flex und bison (lex und yacc). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
azett Geschrieben 5. November 2004 Autor Teilen Geschrieben 5. November 2004 je nach verwendeter Programmiersprache gibt es auch Tools, die diese Validierung und ggf. die Berechnung der Terms automatisch durchführen. hm...selber schreiben is besser schönes wochenende allen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.