SHARE
TWEET

Autómato Calculadora

yyajsayy Jul 26th, 2012 91 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top