Ciao a tutti,
Studio informatica da autodidatta da circa un anno, un mio amico mi ha detto di provare a fare un programma dove:
1) Inserisco una funzione da tastiera
2) il programma deve controllare se la funzione è corretta (non ci siano errori di sintassi)
3) deve calcolarla in tutto il suo dominio.

Pensavo di andare a inserire la mia funzione in una stringa, ma ora non so più andare avanti..suggerimenti?

Grazie
codice:
template <class ITEM> class	EQUAZIONE;  // forward

template <class ITEM> struct frame {
  struct Campo {
	  float numero;
	  char variabile;
  };
  EQUAZIONE<ITEM> coda;
};

template <class ITEM> class EQUAZIONE {
private:
	typedef frame<ITEM>* link;
	link sp; // puntatore a nuova istanza di EQUAZIONE
public:
	 EQUAZIONE<ITEM> () { // costruttore senza parametri: inizializza l'oogetto come pila vuota
		 sp=NULL;
	 }
	 bool Verifica_carattere_inserito (char funzione[], int cont) { // Questo metodo verifica che i caratteri inseriti all'utente siano ammessi
		 bool r;
		 for(int a=0;a<cont-1;a++) {
			 if( ( (funzione[a]>=40)&&(funzione[a]<=57) ) && (funzione[a]==94) )
				 r=true;
			 else
				 r=false;
		 }
		 return r;
	 }
	 void Tipo_carattere (char funzione[], int cont) { // Questo metodo stabilisce se il carattere inserito, dopo essere sicuro che sia lecito, stabilisce se è un numero o un operatore
		  link a = new frame<ITEM>;
		 for(int b=0;b<cont-1;b++) {
			 if( (funzione[b]>=48)&&(funzione[b]<=57) ) { // 48 = codice ASCII 0 , 57 = codice ASCII 9
				 a->Campo.numero = funzione[b];
				 a->Campo.variabile = NULL;
				 a->coda.sp = sp;
				 sp = a;				 
			 }
			 if( ( (funzione[b]>=40)&&(funzione[b]<=47) || (funzione[b]==94) ) ) { // 40 = codice ASCII ( , 47 = codice ASCII / , 94 = codice ASCII ^
				 a->Campo.numero = NULL;
				 a->Campo.variabile = funzione[b];
				 a->coda.sp = sp;
				 sp = a;
			 }				 
		 }
		 return true;
	 }
/*	 void print () const {
         if (sp != NULL) {
         sp->coda.print();  // qui è applicato ricorsivamente questo metodo ...
         sp->numero.print();  // ... ma qui è applicato il metodo della classe ITEM!
		 sp->variabile.print();
      }
    }
*/
};

 // Ordine di applicazione metodi classe:
// 1) Verifica_carattere_inserito
// 2) TIpo_carattere

void wait ( int seconds ) {
	clock_t endwait;
	endwait = clock () + seconds * CLK_TCK ;
	while (clock() < endwait) {}
}
void conta () {
	int i=1;
    do {
        printf(".");       
        wait( 1 );
        i++;
    }
    while(i<=3);
}

int _tmain()
{
	char funzione[50],c;
	int cont=0,i=1;
	EQUAZIONE <char> E1;

	// Inseririmento funzione (funziona!)
	printf("Inserire una funzione (per terminare la lettura della stessa inserire =):\n");
	scanf("%c", &c);
	funzione[0]=c;
	while(c!=61) {
		scanf("%c", &c);
		funzione[i]=c;
		cont++;
		i++;
	}
	printf("\n\n");
	printf("Sto analizzando la funzione");
	conta();
	printf("\n\n");

	// Verifica della correttezza della funzione inserita (funziona!)
	if(E1.Verifica_carattere_inserito(funzione,cont))
		printf("La funzione inserita contiene tutti caratteri corretti!");
	else
		printf("La funzione non e' stata inserita in maniera corretta!");

	// Determinazione della composizione dell'equazioni
//	E1.print();
	getch();
	return 0;
}