Advertisement
bignose22

Calculadora_romana_V_1.0.1

Sep 25th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.75 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<string>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     string nr3, nr4, op;
  11.     int nd1=0, nd2=0, n1=0, n2=0, r, rf=0, aux, aux2, u=0;
  12.     char result[99];
  13.     //##################################################################Legenda das Variaveis#################################################################################
  14.     //#                                                                                                                                                                      #                 
  15.     //#                                                                                                                                                                      #
  16.     //# nr3:primeiro numero romano informado,   nr4:Segundo numero romano informado,    op: Operador informado,                                                              #
  17.     //#                                                                                                                                                                      #
  18.     //# nd1: Primeiro numero decimail,  nd2: Segundo numero decimail,   n1: Recebe o valor da operação,   n2:Recebe a quantidade de algoritimos no resultado da operação,  #
  19.     //#                                                                                                                                                                      #
  20.     //# r:recebe o valor a ser dividido pelo n2,    rf: Recebe o mod da divisao,    aux: Recebe o valor de n1,  aux2: recebe o valor da divisão entre aux e r.              #
  21.     //#                                                                                                                                                                      #
  22.     //# result[99]: Resultado final a ser exibido.                                                                                                                           # 
  23.     //#                                                                                                                                                                      #
  24.     //########################################################################################################################################################################
  25.    
  26.     cout<<"Digite um numero romano: "<<endl;//Pede ao usuario para informar o numero romano desejado
  27.     cin>>nr3;                               //Variavel nr3 Recebe o valor informado pelo usuario
  28.     cout<<"Informe a operação: "<<endl;       //Pede ao usuario para informar a operação desejada
  29.     cin>>op;                                //Variavel op recebe o valor da operação
  30.     cout<<"Digite um numero romano: "<<endl;//Pede ao usuario para informar o numero romano desejado
  31.     cin>>nr4;                               //Variavel nr4 Recebe o valor informado pelo usuario
  32.  
  33.     for (int i = 0; i < nr3.length(); i++)  //For para definir o valor em decimal dos numeros romanos informados em nr3
  34.     {  
  35.         if(nr3[i]=='I' || nr3[i]=='i')      //Condição testa o valor recebido em nr3 para definir o valor em decimal
  36.         {  
  37.             nd1=nd1+1;
  38.             if(nr3[i+1]=='V' || nr3[i+1]=='v') // Condição define que se a letra V vier depois do I ela ira somar 4 e não apenas 1.
  39.             {
  40.                 nd1=nd1+3;                  // Soma o valor definido a variavel nd1 que sera o resultado total em decimal do primeiro numero romano
  41.                 i++;                        // Contador para pular a casa ja recebida
  42.             }
  43.             else
  44.             if(nr3[i+1]=='X' || nr3[i+1]=='x')// Condição define que se a letra X vier depois do I ela ira somar 9 e não apenas 1.
  45.             {
  46.                 nd1=nd1+8;                  // Soma o valor definido a variavel nd1 que sera o resultado total em decimal do primeiro numero romano
  47.                 i++;                        // Contador para pular a casa ja recebida
  48.             }          
  49.            
  50.         }
  51.         else
  52.         if(nr3[i]=='V' || nr3[i]=='v')
  53.         {
  54.             nd1=nd1+5;
  55.         }
  56.         else
  57.         if(nr3[i]=='X' || nr3[i]=='x')
  58.         {
  59.             nd1=nd1+10;
  60.             if(nr3[i+1]=='L' || nr3[i+1]=='l')
  61.             {
  62.                 nd1=nd1+30;
  63.                 i++;
  64.             }
  65.             else
  66.             if(nr3[i+1]=='C' || nr3[i+1]=='c')
  67.             {
  68.                 nd1=nd1+80;
  69.                 i++;
  70.             }
  71.         }
  72.         else
  73.         if(nr3[i]=='L' || nr3[i]=='l')
  74.         {
  75.             nd1=nd1+50;
  76.         }
  77.         else
  78.         if(nr3[i]=='C' || nr3[i]=='c')
  79.         {
  80.             nd1=nd1+100;
  81.             if(nr3[i+1]=='D' || nr3[i+1]=='d')
  82.             {
  83.                 nd1=nd1+300;
  84.                 i++;
  85.             }
  86.             else
  87.             if(nr3[i+1]=='M' || nr3[i+1]=='m')
  88.             {
  89.                 nd1=nd1+800;
  90.                 i++;
  91.             }
  92.         }
  93.         else
  94.         if(nr3[i]=='D' || nr3[i]=='d')
  95.         {
  96.             nd1=nd1+500;
  97.         }
  98.         else
  99.         if(nr3[i]=='M' || nr3[i]=='m')
  100.         {
  101.             nd1=nd1+1000;
  102.         }      
  103.     }
  104.    
  105.     for (int i = 0; i < nr4.length(); i++)
  106.     {
  107.         if(nr4[i]=='I' || nr4[i]=='i')
  108.         {  
  109.             nd2=nd2+1;
  110.             if(nr4[i+1]=='V' || nr4[i+1]=='v')
  111.             {
  112.                 nd2=nd2+3;
  113.                 i++;
  114.             }
  115.             else
  116.             if(nr4[i+1]=='X' || nr4[i+1]=='x')
  117.             {
  118.                 nd2=nd2+8;
  119.                 i++;
  120.             }          
  121.            
  122.         }
  123.         else
  124.         if(nr4[i]=='V' || nr4[i]=='v')
  125.         {
  126.             nd2=nd2+5;
  127.         }
  128.         else
  129.         if(nr4[i]=='X' || nr4[i]=='x')
  130.         {
  131.             nd2=nd2+10;
  132.             if(nr4[i+1]=='L' || nr4[i+1]=='l')
  133.             {
  134.                 nd2=nd2+30;
  135.                 i++;
  136.             }
  137.             else
  138.             if(nr4[i+1]=='C' || nr4[i+1]=='c')
  139.             {
  140.                 nd2=nd2+80;
  141.                 i++;
  142.             }
  143.         }
  144.         else
  145.         if(nr4[i]=='L' || nr4[i]=='l')
  146.         {
  147.             nd2=nd2+50;
  148.         }
  149.         else
  150.         if(nr4[i]=='C' || nr4[i]=='c')
  151.         {
  152.             nd2=nd2+100;
  153.             if(nr4[i+1]=='D' || nr4[i+1]=='d')
  154.             {
  155.                 nd2=nd2+300;
  156.                 i++;
  157.             }
  158.             else
  159.             if(nr4[i+1]=='M' || nr4[i+1]=='m')
  160.             {
  161.                 nd2=nd2+800;
  162.                 i++;
  163.             }
  164.         }
  165.         else
  166.         if(nr4[i]=='D' || nr4[i+1]=='d')
  167.         {
  168.             nd2=nd2+500;
  169.         }
  170.         else
  171.         if(nr4[i]=='M' || nr4[i+1]=='m')
  172.         {
  173.             nd2=nd2+1000;
  174.         }  
  175.     }
  176.  
  177.    
  178.     if(op[0]=='+')              //Condição para testar qual sera o operador
  179.     {
  180.         n1=nd1+nd2;             //Realiza a operação informada pelo usuario
  181.     }
  182.     else
  183.     if(op[0]=='-')
  184.     {
  185.         n1=nd1-nd2;
  186.     }
  187.     else
  188.     if(op[0]=='*')
  189.     {
  190.         n1=nd1*nd2;
  191.     }
  192.     else
  193.     if(op[0]=='/')
  194.     {
  195.         n1=nd1/nd2;
  196.     }
  197.     else
  198.     if(op[0]!='+' && op[0]!='-' && op[0]!='*' && op[0]!='/')    //Se o ousuario informar outro valor na operação o programa exibe Operador invalido.
  199.     {
  200.         cout<<"Operador Invalido";
  201.         system("pause");
  202.     }
  203.    
  204.     aux=n1;
  205.    
  206.     if (n1 == 0) n2 = 1;
  207.  
  208.     else                                   
  209.     {
  210.          while (n1 != 0)            // Função para definir quanto digitos tem na variavel n1;
  211.          {                         
  212.              n2 = n2 + 1;
  213.              n1 = n1 / 10;
  214.          }
  215.     }
  216.    
  217.     do
  218.     {                      
  219.         if(n2==1)r=1;               // -|
  220.         if(n2==2)r=10;              //  |
  221.         if(n2==3)r=100;             //  |  
  222.         if(n2==4)r=1000;            //  | \
  223.         if(n2==5)r=10000;           //  |-- Define qual valor sera divido por aux;
  224.         if(n2==6)r=100000;          //  | /
  225.         if(n2==7)r=1000000;         //  |
  226.         if(n2==8)r=10000000;        //  |
  227.         if(n2==9)r=100000000;       //  |
  228.         if(n2==10)r=1000000000;     // _|
  229.        
  230.         rf=(aux%r);                 // rf recebe o resultado mod de aux por r
  231.         n2=n2-1;                    // Subtrai o valor de n2 para o proximo laço
  232.         aux2=aux/r;                 //aux2 recebe o resultado da divisão entre aux e r
  233.        
  234.         if(aux>=1000)               //Condição para determinar qual a letra que result vai receber;
  235.         {
  236.             do{
  237.            
  238.                 strcat(result,"M"); // Concatena a Letra que result recebera, na variavel
  239.                 aux2=aux2-1;        // Subtrai q quantidade de digitos que o numero possui 
  240.                 u++;                // Contador para saber quantas vezes a letra foi concatenada
  241.             }while(aux2>0);        
  242.             aux=aux-(1000*u);       // Subtrai o valor que ja foi concatenado em result
  243.         }
  244.         if(aux2!=0)                 // enquanto a variavel aux2 for diferente de 0, ainda pode-se concatenar letra a variavel result
  245.         if(aux>=900)
  246.         {
  247.             strcat(result,"CM");
  248.             aux=aux-900;
  249.             aux2=aux2-9;
  250.         }
  251.         if(aux2!=0)
  252.         if(aux>=500)
  253.         {
  254.             strcat(result,"D");
  255.             aux=aux-500;
  256.             aux2=aux2-5;
  257.         }
  258.         if(aux2!=0)
  259.         if(aux>=400)
  260.         {
  261.             strcat(result,"CD");
  262.             aux=aux-400;
  263.             aux2=aux2-4;
  264.         }
  265.         if(aux2!=0)
  266.         if(aux>=100)
  267.         {
  268.             u=0;
  269.             do{
  270.            
  271.                 strcat(result,"C");
  272.                 aux2=aux2-1;
  273.                 u++;
  274.                
  275.             }while(aux2>0);
  276.             aux=aux-(100*u);
  277.         }
  278.         if(aux2!=0)
  279.         if(aux>=90)
  280.         {
  281.             strcat(result,"XC");
  282.             aux=aux-90;
  283.             aux2=aux2-9;
  284.         }
  285.         if(aux2!=0)
  286.         if(aux>=50)
  287.         {
  288.             strcat(result,"L");
  289.             aux=aux-50;
  290.             aux2=aux2-5;
  291.         }
  292.         if(aux2!=0)
  293.         if(aux>=40)
  294.         {
  295.             strcat(result,"XL");
  296.             aux=aux-40;
  297.             aux2=aux2-4;
  298.         }
  299.         if(aux2!=0)
  300.         if(aux>=10)
  301.         {
  302.  
  303.             u=0;
  304.             do{
  305.            
  306.                 strcat(result,"X");
  307.                 aux2=aux2-1;
  308.                 u++;
  309.                
  310.             }while(aux2>0);
  311.             aux=aux-(10*u);
  312.         }
  313.         if(aux2!=0)
  314.         if(aux>=9)
  315.         {
  316.             strcat(result,"IX");
  317.             aux=aux-9;
  318.             aux2=aux2-9;
  319.         }
  320.         if(aux2!=0)
  321.         if(aux>=5)
  322.         {
  323.             strcat(result,"V");
  324.             aux=aux-5;     
  325.             aux2=aux2-5;
  326.         }
  327.         if(aux2!=0)
  328.         if(aux>=4)
  329.         {
  330.             strcat(result,"IV");
  331.             aux=aux-4;
  332.             aux2=aux2-4;
  333.         }
  334.         if(aux2!=0)
  335.         if(aux>=1)
  336.         {
  337.             u=0;
  338.             do{
  339.            
  340.                 strcat(result,"I");
  341.                 aux2=aux2-1;
  342.                 u++;
  343.             }while(aux2>0);
  344.             aux=aux-(1*u);
  345.         }
  346.     }while(aux > 0);
  347.    
  348.     cout<<"O Resultado Final e: "<<result<<endl;        //Exibe o resultado final; 
  349.     system("pause");
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement