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;
}