Advertisement
Jvsierra

Conversões

Mar 22nd, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. #include <locale.h>
  5.  
  6. int decimalParaBinario(int dec);
  7. int contaAlgs(int num);
  8. int binarioParaDecimal(int bin);
  9. int decimalParaOctal(int dec);
  10. int binarioParaOctal(int bin);
  11. int inverteNumero(int num);
  12. int octalParaDecimal(int octal);
  13. int decimalParaHexadecimal(int dec);
  14.  
  15. int main(){
  16.  
  17.     setlocale(LC_ALL, "Portuguese");
  18.  
  19.     int op, ent;
  20.     char resp = 's';
  21.  
  22.     while(resp == 's' || resp == 'S')
  23.     {
  24.         printf("Selecione:\n");
  25.         printf("1 - Binário para decimal\n"); //check
  26.         printf("2 - Binário para octal\n");//check
  27.         printf("3 - Binário para hexadecimal\n");
  28.         printf("4 - Decimal para binário\n");//check
  29.         printf("5 - Decimal para octal\n");//check
  30.         printf("6 - Decimal para hexadecimal\n");
  31.         printf("7 - Octal para binário\n");//check
  32.         printf("8 - Octal para decimal\n");//check
  33.         printf("9 - Octal para hexadecimal\n");
  34.         printf("10 - Hexadecimal para binario\n");
  35.         printf("11 - Hexadecimal para decimal\n");
  36.         printf("12 - Hexadecimal para octal\n");
  37.         scanf("%d", &op);
  38.  
  39.         switch(op)
  40.         {
  41.             case 1:
  42.                 printf("Digite o número em binário\n");
  43.                 scanf("%d", &ent);
  44.  
  45.                 printf("Resultado = %d\n", binarioParaDecimal(ent));
  46.             break;
  47.             case 2:
  48.                 printf("Digite o número em binário:\n");
  49.                 scanf("%d", &ent);
  50.  
  51.                 printf("Resultado = %d\n", binarioParaOctal(ent));
  52.             break;
  53.             case 4:
  54.                 printf("Digite o número em decimal\n");
  55.                 scanf("%d", &ent);
  56.  
  57.                 printf("Resultado = %d\n", decimalParaBinario(ent));
  58.             break;
  59.             case 5:
  60.                 printf("Digite o número em decimal:\n");
  61.                 scanf("%d", &ent);
  62.  
  63.                 printf("Resultado = %d\n", decimalParaOctal(ent));
  64.             break;
  65.             case 7:
  66.                 printf("Digite o numero em octal:\n");
  67.                 scanf("%d", &ent);
  68.                
  69.                 printf("%d em octal = %d em binario\n", ent, decimalParaBinario(octalParaDecimal(ent)));
  70.             break;
  71.             case 8:
  72.                 printf("Digite o número em octal:\n");
  73.                 scanf("%d", &ent);
  74.  
  75.                 printf("Resultado = %d\n", octalParaDecimal(ent));
  76.             break;
  77.  
  78.             default:
  79.                 printf("Opção inválida\n");
  80.         }
  81.  
  82.         printf("Deseja calcular novamente?(s/n)\n");
  83.         fflush(stdin);
  84.         scanf("%c", &resp);
  85.     }
  86.  
  87.     getch();
  88. }
  89.  
  90. int decimalParaBinario(int dec)
  91. {
  92.     int i = 0, j, res = 0;
  93.  
  94.     if(dec == 0)
  95.         res = 0;
  96.     else if(dec == 1)
  97.         res = 1;
  98.     else if(dec == 2)
  99.         res = 10;
  100.     else if(dec == 3)
  101.         return 11;
  102.     else if(dec == 4)
  103.         return 100;
  104.     else
  105.     {
  106.         while(pow(2, i) < dec)
  107.         {
  108.             i++;
  109.         }
  110.  
  111.         for(j = i - 1; j >= 0; j--)
  112.         {
  113.             if((double)dec >= pow(2, j))
  114.             {
  115.                 dec  = dec - (int)pow(2, j);
  116.                 res = (res * 10) + 1;
  117.             }
  118.             else
  119.             {
  120.                 res = res * 10;
  121.             }
  122.         }
  123.     }
  124.  
  125.     return res;
  126. }
  127. int contaAlgs(int num)
  128. {
  129.     int cont = 0;
  130.  
  131.     while(num)
  132.     {
  133.         cont++;
  134.         num /= 10;
  135.     }
  136.  
  137.     return cont;
  138. }
  139. int binarioParaDecimal(int bin)
  140. {
  141.     int aux = bin, i, res = 0;
  142.  
  143.     for(i = 0; i < contaAlgs(bin); i++)
  144.     {
  145.         if(aux % 10 == 1)
  146.             res  = res + pow(2, i);
  147.  
  148.         aux /= 10;
  149.     }
  150.  
  151.     return res;
  152. }
  153. int decimalParaOctal(int dec)
  154. {
  155.     int res = 0, i = 0;
  156.  
  157.     while(dec)
  158.     {
  159.  
  160.         if(i == 0)
  161.             res = dec % 8;
  162.         else
  163.             if(dec == 1)
  164.                 res = res * 10 + 1;
  165.             else
  166.                 res = res * 10 + (dec % 8);
  167.  
  168.         i++;
  169.         dec /= 8;
  170.     }
  171.  
  172.     res = inverteNumero(res);
  173.  
  174.     return res;
  175. }
  176. int inverteNumero(int num)
  177. {
  178.     int res = 0;
  179.  
  180.     while(num != 0)
  181.     {
  182.         res = res * 10;
  183.         res = res + num % 10;
  184.         num = num / 10;
  185.     }
  186.  
  187.     return res;
  188. }
  189. int binarioParaOctal(int bin)
  190. {
  191.     int res;
  192.  
  193.     res = binarioParaDecimal(bin);
  194.     res = decimalParaOctal(res);
  195.  
  196.     return res;
  197. }
  198. int octalParaDecimal(int octal)
  199. {
  200.     int res = 0, i = 0;
  201.  
  202.     while(octal > 0)
  203.     {
  204.         if(i == 0)
  205.             res = octal % 10;
  206.         else
  207.             res += (octal % 10) * (int)pow(8, i);
  208.  
  209.         i++;
  210.         octal /= 10;
  211.     }
  212.  
  213.     return res;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement