Valutazione expr matemetiche e moltiplicazioni matrici

di il
1 risposte

Valutazione expr matemetiche e moltiplicazioni matrici

Salve, sono alle prese con uno dei soliti problemini universitari... questa volta si tratta di moltiplicazioni tra matrici (l output è il numero di moltiplicazioni elementari da effettuare)... questo è un esempio di file di input:
4    //NUMERO DI MATRICI
A 50 10    //(nome righe colonne)
B 10 20
C 20 5
D 30 35
A             //ESPRESSIONI:
C
(AB)
(AC)
(A(BC))
l'output come già detto dovrà essere il numero di moltiplicazioni elementari da eseguire in ogni espressione (per ogni coppia di matrici -> M1.righe*M2.righe*M2.colonne)... es:

0
0
10000 
error
3500

ho implementato una struttura come una sorta di lista di matrici in modo da ricevere in modo molto automatico e facilitato il num di righe e colonne di una matrice.. il problema ora è valutare le espressioni, in quanto vanno svolte logicamente con le priorità delle espressioni matematiche per l appunto (parentesizzazione).. questo è quello che ho implementato fino ad ora... qualcuno ha qualche idea per valutare le espressioni senza avere una complessità enorme? avevo pensato ad un albero binario in cui ogni nodo sia una matrice.. ma il problema è memorizzare le parentesi dell espressione... idee?

#include <fstream>
#include <iostream>
#include <vector>
#include <stack>
#include <assert.h>
using namespace std;

ifstream aprifile("file.txt");
//assert(aprifile);

void calcola(string);

struct Matrix
		{
		char nome;
		int righe;
		int colonne;
		};

class MatrixList
	{
	public:
		MatrixList() {leggiMatrici();}
		Matrix operator[](char ch) const {return vettore[((int)ch)-65];}
	private:
		Matrix vettore[26];
		void leggiMatrici()
			{
			int numMatrix; 
			aprifile>>numMatrix;
			for(int i=0; i<numMatrix; i++)
				{
				Matrix m;
				aprifile>>m.nome>>m.righe>>m.colonne;
				vettore[(m.nome)-65]=m;				
				}
			}	
	};

MatrixList list;
	
int main()
	{
	string espressione;
	getline(aprifile,espressione);
	while(aprifile.good()) //FINQUANDO C'È QUALCOSA DA LEGGERE
		{
		getline(aprifile,espressione);
		calcola(espressione);    //la funzione da implementare dovrebbe essere qualcosa del genere...
		}
	return 0;	
	}

void calcola(string exp)
	{

	}

grazie in anticipo... saluti...

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte