/* Programma 42c++CalcolaStrtok programma che esegue le principali operazioni matematiche inserendo i dati mediante una stringa. Riontino Raffaele 3 AS INF 29-12-'09 */ #include #include #include #include #include using namespace std; void controllostringa(); void somma(); void sottrazione(); void moltiplicazione(); void divisione(); void potenza(); void fine(); char *cambio;//variabile con puntatore char stringa[55]; int i, lunghezza, errore, scelta, segno, controllomeno; int quantitaoperazione, meno; float a, b, risultato; main() { do{ // ripete per nuova operazione do{ // ripete dopo gli errori di inserimento dati system("cls"); cout << "\n\n\t\t\t Calcolatrice su una riga \n\n\n"; cout << "\t\t\t ( + , - , * , / , ^ )\n"; cout << "\n\n\t Inserisci i numeri e l'operazione da eseguire su una riga,"; cout << "\n\n\t (esempi : 1+1 ; -1*1 ; -1*-1 ; 2.5*-1 ... ) e premi invio :\n\n\n\t "; cin >> stringa; lunghezza = strlen(stringa); quantitaoperazione = 0; errore = 0; controllomeno = 0; meno = 0; for (i=0 ; i 1) { cout << "\n\n\tNon si puo' eseguire piu' di un'operazione per volta!!!\n\n\n\t"; system("pause"); } }while ((errore != 0) || (quantitaoperazione != 1)); if (segno == 1) {somma();} if (segno == 2) {sottrazione();} if (segno == 3) {moltiplicazione();} if (segno == 4) {divisione();} if (segno == 5) {potenza();} cout << "\n\n\n\t Per eseguire un'altra operazione digita 1 e premi invio ... "; cin >> scelta; } while (scelta == 1); fine(); } // chiusura main // funzione per controllo valori inseriti void controllostringa() { switch (stringa[i]) { case '0' : break; case '1' : break; case '2' : break; case '3' : break; case '4' : break; case '5' : break; case '6' : break; case '7' : break; case '8' : break; case '9' : break; case '.' : break; case 'NULL': break; case '+' : quantitaoperazione ++; controllomeno =i; segno = 1; break; case '-' : if (i == 0) { meno = 1; // serve ad indicare alla fuinzione sottrazione che il valore di a è negatico } // consente di inserire il segno meno nel caso di un numero negativo else { // in questo else viene reso disponibile l'inserimento del segno meno nel secondo valore if (quantitaoperazione == 0) { quantitaoperazione ++; segno = 2; controllomeno = i; } else { if (i-1 != controllomeno) {quantitaoperazione++;} } } break; case '*' : quantitaoperazione ++; controllomeno = i; segno = 3; break; case '/' : quantitaoperazione ++; controllomeno = i; segno = 4; break; case '^' : quantitaoperazione ++; controllomeno = i; segno = 5; break; default : cout << "\n\n\tIl valore '" << stringa[i] << "' non e' un valore valido !!!\n\n\n\t"; system("pause"); i = lunghezza; errore = errore + 1; } // chiusura dello switch } // funzione per la somma void somma() { cambio = strtok(stringa,"+"); a = atof(cambio); cambio = strtok(NULL,"\0"); b = atof(cambio); risultato = a + b; cout << "\n\n\t Somma = " << risultato; } // funzione per la sottrazione void sottrazione() { cambio = strtok(stringa,"-"); if (meno == 1) {a = atof(cambio) * -1;} else {a = atof(cambio);} cambio = strtok(NULL,"\0"); b = atof(cambio); risultato = a - b; cout << "\n\n\t Sottrazione = " << risultato; } // funzione per la moltiplicazione void moltiplicazione() { cambio = strtok(stringa,"*"); a = atof(cambio); cambio = strtok(NULL,"\0"); b = atof(cambio); risultato = a * b; cout << "\n\n\t Moltiplicazione = " << risultato; } // funzione per la divisione void divisione() { cambio = strtok(stringa,"/"); a = atof(cambio); cambio = strtok(NULL,"\0"); b = atof(cambio); if (b == 0) { // controllo del divisore cout<<"\n\n\tLa divisione tra "<