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

Rispondi quotando