yyajsayy

Autómato Calculadora

Jul 26th, 2012
103
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*###################################################
  2. #      Automato Calculadora de Somar                #  
  3. #             Code by Pedro Tavares                 #
  4. #                                                   #
  5. #          web: http://infptavares.blogspot.com     #
  6. #                                                   #
  7. ####################################################*/
  8. #include <stdio.h>
  9. #include <string.h>
  10.  
  11.  
  12. int delta(int M[3][2],int estado,char ch){
  13.  
  14.     if (estado==-1)
  15.         return -1;
  16.  
  17.     if(ch >='0' && ch <='9')
  18.         return(M[estado][0]);
  19.  
  20.     if(ch=='+' || ch=='-' || ch=='*' || ch=='/')
  21.         return(M[estado][1]);
  22. return (-1);
  23. }
  24.  
  25.  
  26.  
  27. int main(){
  28.  
  29.     int M[3][2]={
  30.             {0,1},{0,2},{2,2}
  31.             }; 
  32.  
  33.     char s[15];
  34.     int estado=0,i,res=0,flag=0;
  35.     char op='x';
  36.    
  37.  
  38.     printf("Introduza a String de calculo!\n");
  39.     scanf("%s",s);
  40.    
  41.    
  42.     for(i=0;i<strlen(s);i++){
  43.        
  44.         estado=delta(M,estado,s[i]);
  45.            
  46.         if(estado==-1)
  47.                 break;
  48.  
  49.         switch(estado){
  50.  
  51.  
  52.             case 0:
  53.                 if(flag==0){
  54.                     if(op!='x'){                   
  55.                         if(op=='+'){
  56.                             res+=atoi(&s[i]);
  57.                             flag=1;
  58.                         }
  59.                         else if(op=='-'){
  60.                             res-=atoi(&s[i]);
  61.                             flag=1;
  62.                         }
  63.                         else if(op=='*'){
  64.                             res=(res*atoi(&s[i]));
  65.                             flag=1;
  66.                         }
  67.                         else if(op=='/'){
  68.                             res=(res/atoi(&s[i]));
  69.                             flag=1;
  70.                         }
  71.                        
  72.                     }
  73.                     else{
  74.                         res+=atoi(&s[i]);
  75.                         flag=1;
  76.                     }
  77.                 }
  78.                
  79.             break;
  80.  
  81.  
  82.             case 1:
  83.                 flag=0;
  84.  
  85.                 if(s[i]=='+')
  86.                     op='+';
  87.                 else if (s[i]=='-')
  88.                     op='-';
  89.                 else if (s[i]=='/')
  90.                     op='/';
  91.                 else if (s[i]=='*')
  92.                     op='*';
  93.             break;
  94.  
  95.         }
  96.  
  97.     }
  98.    
  99.     if(estado==0){
  100.         printf("aceite!\n");
  101.        
  102.         printf("O resultado e': %d\n",(res));
  103.        
  104.     }
  105.     else if(estado==-1)
  106.         printf("Expressao mal construida - Nao aceite\n");
  107.     else{
  108.         printf("Expressao mal construida - Nao aceite\n"); 
  109.     }
  110.  
  111.  
  112.  
  113. return(0);
  114.  
  115. }
RAW Paste Data