Ich habe Probleme mit Umsetzung einer Reihenfolge der mathematischen Operationen Regel in meinem Code. Ich habe 2 Arrays. Array von Matrizen (bis zu 100 Matrizen) und Array von Operationen (bis zu 99 Operationen). Die Operationen sind nur Addition, Subtraktion und Multiplikation von Matrizen (dargestellt durch + - *).Algorithmus für die Reihenfolge der Operationen in Mathematik
Meine Matrizen sind eine Struktur, aber das ist nur ein Detail. Ich habe funktionierende Funktionen für alles, was sie betrifft.
Ich habe auch eine Funktion zum Ausführen der Operationen.
struct Matrix compute(struct Matrix mat1, struct Matrix mat2, char op)
Die Funktion hat einen Schalter, der die Operation bestimmt und die richtige ausführt.
Das Stück Code, den ich verbessern muss, ist dieser.
// counter = number of matrices in the array
// therefore there's also counter-1 operations
struct Matrix temp = compute(matrices[0], matrices[1], operations[0]);
for(int j = 1; j < counter; ++j)
{
temp = compute(temp, matrices[j+1], operations[j]);
}
get_matrix(temp); //outputs the matrix to stdout
Im Moment wertet dieser Code korrekt alle Sequenzen von Matrizen und Operationen, die Multiplikation nicht enthalten (vorausgesetzt, die Eingabe korrekt war und Operationen ausgeführt werden können).
Was brauche ich? Ich brauche einen Tritt in den Hintern in die richtige Richtung.
Wollen Sie sagen, dass Sie eine Möglichkeit benötigen, die Reihenfolge der Operationen in einem Ausdruck zu erzwingen, in dem Operanden Matrizen sind? Und gegenwärtig versagt es für die Multiplikation z.B. '1 + 2 + 4 * 0' ergibt" 0 ", wenn die Operanden Zahlen sind? – Miket25
@ Miket25 Ja, genau das sage ich. Offensichtlich gibt es auch ein Speicherleck in diesem Teil des Codes (Matrizen werden dynamisch zugewiesen), obwohl ich die Temperaturmatrix nur 2 Zeilen unter dem gezeigten Code freigebe. Aber das ist ein Problem, das ich später lösen kann. – Welsy
Forschungsgebäude ** abstrakte Syntaxbäume **. Knoten in diesem Baum sind Matrizen und Operanden. Sie evakuieren dann rekursiv diesen Baum, wodurch die Reihenfolge der Operationen erreicht wird. Ich empfehle ** rekursives Abstiegs-Parsing **; es ist leicht zu lernen. Sie können gute Beispiele online auf Bestellung von Operationsrechnern durch rekursives Sinkflug analysieren und für dieses Problem anwenden. – Miket25