Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

funzione che risolve espressioni

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

funzione che risolve espressioni

Messaggioda Thierry1989 » gio gen 15, 2009 7:19 pm

ciao!
ho bisogno di una piccola consulenza... sono alle prime armi con la programmazione in C.
dovrei e vorrei fare una funzione che risolve espressioni del tipo (((5+3)/2)-(4))+1) RICEVENDO un puntatore a carattere.
come posso fare??
ho provato a fare un abbozzo (credo più lungo del dovuto) ma mi va in BusError.
ecco il codice che ho provato io...
Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>

char trovacarattere(int num)   // converto da intero a carettere
{   switch (num) {
   case 0: return '0';
   case 1: return '1';
   case 2: return '2';
   case 3: return '3';
   case 4: return '4';
   case 5: return '5';
   case 6: return '6';
   case 7: return '7';
   case 8: return '8';
   case 9: return '9';
   }
}

char* eseguicalcoli(char* input)
{
   int i,j;
   int n1,n2,n3;
   char num;
   char *flag;
   *flag='0';
   
   
   for (i=0; *(input+i)!='\0'; i++)      //cerco un numero
   {   
      if (*(input+i)>='0' && *(input+i)<='9') break;
   }
   if (*(input+i)==')' || *(input+i)=='(')
   {   
      *(input+i-1)=*(input+i);
      for(j=0;*(input+i+j)!='\0';j++) // elimino le parentesi nel caso (5)
         *(input+i+j)=*(input+i+j+2);
      eseguicalcoli(input+i);
   }
   if (*(input+i+1)>='0' && *(input+i+1)<='9')
   {   
      n1=atoi(*(input+i-1));   // converto i caratteri in numeri
      n2=atoi(*(input+i+1));
      
      switch (*(input+i)) {   // eseguo le operazioni
         case '+': n3=n1+n2; break;
         case '-': n3=n1-n2; break;
         case '*': n3=n1*n2; break;
         case '/': n3=n1/n2; break;
         default: break;
      }
      num=trovacarattere(n3);
      
      *(input+i-1)=num;               // metto il carattere al posto dell'espressione
      for(j=0;*(input+i+j)!='\0';j++) // elimino le parentesi nel caso (5+3)
         *(input+i+j)=*(input+i+j+3);
      eseguicalcoli(input+i);
   }
   return input;
   
}
   
int calcolo(char* input){
   return atoi(eseguicalcoli(input));
   }




int main()
{   
   char *espressione;
   int risultato;
   printf("Dammi un'espressione, ignorante...\n");
   scanf("%s",espressione);
   risultato=calcolo(espressione);
   printf("Risultato=%i",&risultato);
   
}

Ovviamente se trovate codici più efficienti dite pure...

NB. la funzione atoi permette di trasformare un carattere nel corrispettivo intero.
By Giu89
Grazie in anticipo per l'interesse
Avatar utente
Thierry1989
Bronze Member
Bronze Member
 
Messaggi: 760
Iscritto il: sab mar 31, 2007 1:05 pm
Località: Bari

Re: funzione che risolve espressioni

Messaggioda bollicine » lun feb 16, 2009 12:35 am

scusami,
non ho ben capito il tuo approccio nella risoluzione del problema.
perché crei una funzioni atoi che converta il carattere in un intero?!...non puoi semplicemente sfruttale le conversioni implicite o
meglio quelle esplicite con lo static_cast il quale effettua una conversione di tipo quando esiste la conversione implicita inversa??!

Poichè ad un carattere posso assegnare un intero puoi fare il contrario.

esempio
int carattere = (int) 'a';

o meglio

int carattere= int('a');
Avatar utente
bollicine
Neo Iscritto
Neo Iscritto
 
Messaggi: 3
Iscritto il: dom feb 15, 2009 9:45 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising