2017-05-14 4 views
1

Ich versuche, einen abgeleiteten Rechner zu machen (ich muss verknüpfte Liste verwenden).Derivative Calculator mit LinkedList C++

Die Struktur jedes Knotens sollte wie folgt lauten:

struct node { 
    int coefficient; 
    string function; 
    int power; 
    node*fx; 
    node*gx; 
    node*next; 
}; 

| Koeffizient | Funktion | Leistung | f (x) | g (x) | nächste |


Eingabedarstellung Beispiel:

3x^2 ((3X-3)/(4 x-2)) + sin (4x-3)

Koeffizient * Funktion^Leistung (f (x)/g (x)) + nächste


ich versuchte RegEx verwenden, aber es ist nicht einfach, mit zu arbeiten, wenn es um Verschachtelung Ausdrücke kommt, da der Benutzer möglicherweise eine unbekannte Anzahl von Funktionen werfen.

Ich weiß, dass ich den Ausdruck irgendwie analysieren muss, dann alles in einen Vektor aufteilen und dann die Knoten ausfüllen, aber ich bin einfach nicht in der Lage, diese Logik zu programmieren, da ich ziemlich neu in C++ bin.

Ich habe auch versucht, mit ExprTk zu arbeiten, aber ich fand es schwer zu verstehen und ich konnte keine Online-Tutorials dafür finden, außer der Readme-Datei, die damit geliefert wird.

Wenn mich jemand in die richtige Richtung führen kann oder mir ein Tutorial zeigen, das wäre super.

+0

Sie können die Eingabe durch '+' teilen, während Sie die Klammern beachten, so dass Sie nur mit einer Liste der Koeffizientenfunktion arbeiten müssen^power (f (x)/g (x)) '(nicht aufteilen 'f (x)' oder 'g (x)' wenn sie ein '+' enthalten, bedeutet dies, dass die Parsing-Funktion oder Regex nicht mehr mit einer beliebigen Anzahl von Funktionen, sondern nur mit 1 arbeiten muss. Sie können dann rekursiv Ihre Analyse aufrufen Funktion zum Ausfüllen von 'f (x)', 'g (x)' und 'next'. – nwp

+0

Danke! Das löst das Verschachtelungsproblem. – Mincer

Antwort

0

Ich denke, es ist machbar mit Regexp, aber Sie müssen sie in der richtigen Reihenfolge. Zum Beispiel:

3x^2 ((3x-3)/(4x-2)) + sin (4x-3) -> 3x^2 ((3x-3)/(4x-2)) + sin (n1) -> 3x^2 ((3x-3)/n2) + sin (n1) -> 3x^2 (n3/n2) + sin (n1) -> ...

und so weiter mit regex wie folgt aus:

\ d + \ d -> Funktion = +

\ d- \ d -> Funktion = -

auf jedem Schritt, den Sie neuen Knoten im Speicher erstellen und lassen Sie es in der Zeichenfolge auch als "n% nodeNum".

+0

Danke! Ich habe jetzt den Dreh raus. – Mincer