C : String auswerten
bleicher
- programmiertechnik
Grüße,
nun sitze ich wieder vor einer c-Aufgabe :)
man hat ein String der Form a*x^2+b*x+c=d mit a,b,c,d aus N einzulesen, und dann die Lösung für die Gleichung zu finden.
Die "formatiert Eingabe" mit scanf("%d*x^2+%d*x+%c=%d", a,b ,c ,d)
würde es tun.
ABER
ich will ja den Bonuspunkt ;) also habe ich mir überlegt, wie man die EIngabe "bequemer" gestalten könnte.
Die Idee - ich splitte das ganze an den +-=, werte einzeln, ob da ein ^oder x vorkommt, aus, und addiere den wert zu a,b,c,d.
NUR - die c-Funktion strtok frisst mir die Separatoren weg - sodass ich das Vorzeichen nicht mehr ermitteln kann.
Ich habe es auch mit strcspn versucht (bis +-= auslesen), aber dann müsste ich zB den bereits "ausgewerteten" Teil des String am Anfang löschen, oder sonstwie für den nechsten Schritte den Teil NACH dem bereits ausgewertetem holen. Wie?
Geht das auch anders?
MFG
bleicher
Hellihello
macht es nicht sinn, das array of char durchzulaufen und jeweils in einer schleife zu testen, um was für ein Zeichen es sich handelt, um dann entsprechend mit dem was davor und dem was danach steht zu hantieren?
Dank und Gruß,
Grüße,
macht es nicht sinn, das array of char durchzulaufen und jeweils in einer schleife zu testen, um was für ein Zeichen es sich handelt, um dann entsprechend mit dem was davor und dem was danach steht zu hantieren?
jein - ich müsste den array von hinten durchlaufen, da ich sonst nicht wüsste ob ich jetzt Einsen, Zehner oder Hunderter auslese , wäre aber arg umständlich, oder übersehe ich was?
MFG
bleicher
nebnebei - eine Zahl erkenn eich daran, dass der char Wert zwischen 48 und 57 hat, aber wie hole ich da jetzt die Zahl selbst raus? atoi() tuts nicht ;/
MFG
bleicher
ist -48 echt DIE methode O_o?
MFG
bleicher
Hi bleicher!
Geht das auch anders?
Ich weiß nicht, ob dir der LL(1)-Parser etwas sagt, aber der wäre für deinen Fall sicher genau das Richtige.
Kanonen und Spatzen und so... ;-)
MfG H☼psel
[...]
man hat ein String der Form a*x^2+b*x+c=d mit a,b,c,d aus N einzulesen, und dann die Lösung für die Gleichung zu finden.
Die "formatiert Eingabe" mit scanf("%d*x^2+%d*x+%c=%d", a,b ,c ,d)
würde es tun.
[...]
Mag ja sein, dass das ein wenig Overkill wäre, aber ich würde da einfach einen Parser mit ANTLR oder mit flex und yacc generieren, der dann auch gleich beliebige arithmetische Ausdrücke versteht.
Alternativ, wenn man keine Extrasoftware verwenden will, könnte man für ein derart einfaches Problem auch in einer Stunde Arbeit einen "recursive descent parser" schreiben.
cu,
Murphy
Grüße,
Alternativ, wenn man keine Extrasoftware verwenden will,
darf - ich habe die Aufgabe eigenhändig mit C zu lösen, klar - es gibt sicher fertige Scripts - aber das wäre keine Punkte wert :(
könnte man für ein derart einfaches Problem auch in einer Stunde Arbeit einen "recursive descent parser" schreiben.
??
da ich ein absoluter Anfänger bin, verstehe ich den Ausdruck einfach nicht^^
momentan habe ich das so gelöst, dass ich abfrage ob der zahl x/+/- folgt und dementsprechend DIe Zielvariable wähle, suboptimal, aber versteht auch ziemlichz willkürliche EIngaben, solange die Syntax stimmt.
MFG
bleicher
[...]
könnte man für ein derart einfaches Problem auch in einer Stunde Arbeit einen "recursive descent parser" schreiben.
da ich ein absoluter Anfänger bin, verstehe ich den Ausdruck einfach nicht^^
Guckst du hier: http://en.wikipedia.org/wiki/Recursive_descent_parser ;-)
momentan habe ich das so gelöst, dass ich abfrage ob der zahl x/+/- folgt und dementsprechend DIe Zielvariable wähle, suboptimal, aber versteht auch ziemlichz willkürliche EIngaben, solange die Syntax stimmt.
Geht natürlich auch, wenn man wirklich nur mit quadratischen Polynomen arbeiten will. Mein Vorschlag wäre zum Beispiel auch für allgemeinere Polynome oder andere arithmetische Ausdrücke geeignet. Dafür wäre er aber auch deutlich aufwendiger.
cu,
Murphy