Advertisement
atorresleticia

conversoes

Jul 22nd, 2014
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4.  
  5. void linha (int l){ //funcao que pula linhas
  6.    int i;
  7.       for (i=0; i<l; i++){
  8.          printf ("\n");
  9.       }
  10. }
  11.  
  12. void decimal_bin (int dec1) {
  13.  
  14.    long long int res[50], i=0, tam=0;
  15.  
  16.       while (dec1!=0){
  17.          res[i] = dec1%2;
  18.          dec1 /= 2;
  19.          i++;           //preenche o res[i]
  20.          tam++;            //conta quantos lugares ocupará no vetor
  21.       }
  22.  
  23.    long long int result[tam];
  24.  
  25.       printf ("Binario: ");
  26.          for (i=0; i<tam; i++){
  27.             result[i] = res[tam-1-i];           //result recebe o valor inverso do vetor res
  28.             printf ("%lld", result[i]);
  29.          }
  30.                linha (1);
  31. }
  32.  
  33. void decimal_octal (int dec2) {
  34.  
  35.    long long int res[50], i=0, tam=0;
  36.  
  37.       while (dec2!=0){
  38.          res[i] = dec2%8;
  39.          dec2 /= 8;
  40.          i++;
  41.          tam++;
  42.       }
  43.  
  44.    long long int result[tam];
  45.  
  46.       printf ("Octal: ");
  47.          for (i=0; i<tam; i++){
  48.             result[i] = res[tam-1-i];
  49.             printf ("%lld", result[i]);
  50.          }
  51.                   linha (1);
  52. }
  53.  
  54. void decimal_hexa (int dec3) {
  55.  
  56.    long long int res[50], i=0, tam=0;
  57.  
  58.       while (dec3!=0){
  59.          res[i] = dec3%16;
  60.          dec3 /= 16;
  61.          i++;
  62.          tam++;
  63.       }
  64.  
  65.    long long int result[tam];
  66.  
  67.       printf ("Hexadecimal: 0x");
  68.          for (i=0; i<tam; i++){
  69.             result[i] = res[tam-1-i];
  70.               switch (result[i]){          //analisa os casos onde o numero é escrito como letra e o default;
  71.                   case 10: printf ("A"); break;
  72.                   case 11: printf ("B"); break;
  73.                   case 12: printf ("C"); break;
  74.                   case 13: printf ("D"); break;
  75.                   case 14: printf ("E"); break;
  76.                   case 15: printf ("F"); break;
  77.                   default: printf ("%lld", result[i]); break;
  78.                }
  79.          }
  80.                      linha (1);
  81. }
  82.  
  83. void binario_dec (char bin1[]){
  84.  
  85.    int tamanho, i, decimal=0;
  86.  
  87.       tamanho = strlen(bin1);  //armazena o tamanho da string na variavel "tamanho"
  88.  
  89.    int vetor[tamanho], inv[tamanho];
  90.       for (i=0; i<tamanho; i++){
  91.          vetor[i] = bin1[i] - 48;         //o vetor int armazena os valores da string menos o 0 (na tabela ascii, 0=48, e se pegarmos, 1(49)-48, temos o valor de 1)
  92.       }
  93.             for (i=0; i<tamanho; i++){
  94.                inv[i] = vetor[tamanho-1-i];           //inverte a ordem do vetor, para melhor manipulação
  95.             }
  96.                   for (i=0; i<tamanho; i++){
  97.                      inv[i] = inv[i]*(pow(2, i));              //multiplica o valor de cada bloco por 2^[posicao]
  98.                      decimal+=inv[i];                    //a variavel "decimal" irá armazenar a soma dos valores do vetor
  99.                   }
  100.       printf ("Decimal: ");
  101.          printf ("%d\n", decimal);
  102.  
  103. }
  104.  
  105. void binario_octal (char bin2[]){
  106.  
  107.    int tamanho, i, decimal=0;
  108.    long long int res[50], t=0, tam=0;  //primeiro converteu-se para decimal
  109.  
  110.       tamanho = strlen(bin2);
  111.  
  112.    int vetor[tamanho], inv[tamanho];
  113.  
  114.       for (i=0; i<tamanho; i++){
  115.          vetor[i] = bin2[i] - 48;
  116.       }
  117.             for (i=0; i<tamanho; i++){
  118.                inv[i] = vetor[tamanho-1-i];
  119.             }
  120.                   for (i=0; i<tamanho; i++){
  121.                      inv[i] = inv[i]*(pow(2, i));
  122.                      decimal+=inv[i];               //aqui deixou-se o valor em decimal para depois aproveitar a função ja usada previamente
  123.                   }
  124.  
  125.       while (decimal!=0){                 //aqui aproveitou-se a função que converte decimal em octal
  126.          res[t] = decimal%8;
  127.          decimal /= 8;
  128.          t++;
  129.          tam++;
  130.       }
  131.  
  132.    long long int result[tam];
  133.  
  134.       printf ("Octal: ");
  135.          for (t=0; t<tam; t++){
  136.             result[t] = res[tam-1-t];
  137.             printf ("%lld", result[t]);
  138.          }
  139.                linha (1);
  140. }
  141.  
  142. void binario_hexa (char bin3[]){
  143.  
  144.    int tamanho, i, decimal=0;
  145.    long long int res[50], h=0, tam=0;
  146.  
  147.       tamanho = strlen(bin3);
  148.  
  149.    int vetor[tamanho], inv[tamanho];
  150.  
  151.       for (i=0; i<tamanho; i++){
  152.          vetor[i] = bin3[i] - 48;
  153.       }
  154.             for (i=0; i<tamanho; i++){
  155.                inv[i] = vetor[tamanho-1-i];
  156.             }
  157.                   for (i=0; i<tamanho; i++){
  158.                      inv[i] = inv[i]*(pow(2, i));
  159.                      decimal+=inv[i];
  160.                   }
  161.  
  162.       while (decimal!=0){
  163.          res[h] = decimal%16;
  164.          decimal /= 16;
  165.          h++;
  166.          tam++;
  167.       }
  168.  
  169.    long long int result[tam];
  170.  
  171.       printf ("Hexadecimal: 0x");
  172.  
  173.       for (h=0; h<tam; h++){
  174.          result[h] = res[tam-1-h];
  175.             switch (result[h]){
  176.                case 10: printf ("A"); break;
  177.                case 11: printf ("B"); break;
  178.                case 12: printf ("C"); break;
  179.                case 13: printf ("D"); break;
  180.                case 14: printf ("E"); break;
  181.                case 15: printf ("F"); break;
  182.                default: printf ("%lld", result[h]); break;
  183.             }
  184.       }
  185.                   linha (1);
  186. }
  187.  
  188. void octal_dec (char oct1[]){
  189.  
  190.    int tamanho, i, decimal=0;
  191.  
  192.       tamanho = strlen(oct1);
  193.  
  194.    int vetor[tamanho], inv[tamanho];
  195.  
  196.       for (i=0; i<tamanho; i++){
  197.          vetor[i] = oct1[i] - 48;
  198.       }
  199.             for (i=0; i<tamanho; i++){
  200.                inv[i] = vetor[tamanho-1-i];
  201.             }
  202.                   for (i=0; i<tamanho; i++){
  203.                      inv[i] = inv[i]*(pow(8, i));
  204.                      decimal+=inv[i];
  205.                   }
  206.       printf ("Decimal: ");
  207.          printf ("%d\n", decimal);
  208.  
  209.             linha(1);
  210. }
  211.  
  212. void octal_bin (char oct2[]){
  213.  
  214. int tamanho, x, decimal=0; //primeiro usa-se a funcao para converter em decimal, em seguida, binario
  215. long long int res[50], i=0, tam=0;
  216.  
  217.    tamanho = strlen(oct2);
  218.  
  219.    int vetor[tamanho], inv[tamanho];
  220.       for (x=0; x<tamanho; x++){
  221.          vetor[x] = oct2[x] - 48;
  222.       }
  223.             for (x=0; x<tamanho; x++){
  224.                inv[x] = vetor[tamanho-1-x];
  225.             }
  226.                   for (x=0; x<tamanho; x++){
  227.                      inv[x] = inv[x]*(pow(8, x));
  228.                      decimal+=inv[x];
  229.                   }
  230.  
  231.       while (decimal!=0){
  232.          res[i] = decimal%2;
  233.          decimal /= 2;
  234.          i++;
  235.          tam++;
  236.       }
  237.  
  238.    long long int result[tam];
  239.  
  240.       printf ("Binario: ");
  241.          for (i=0; i<tam; i++){
  242.             result[i] = res[tam-1-i];
  243.             printf ("%lld", result[i]);
  244.          }
  245.                linha (1);
  246. }
  247.  
  248. void octal_hexa (char oct3[]){
  249.  
  250.    int tamanho, x, decimal=0;
  251.    long long int res[50], i=0, tam=0;
  252.  
  253.    tamanho = strlen(oct3);
  254.  
  255.    int vetor[tamanho], inv[tamanho];
  256.       for (x=0; x<tamanho; x++){
  257.          vetor[x] = oct3[x] - 48;
  258.       }
  259.             for (x=0; x<tamanho; x++){
  260.                inv[x] = vetor[tamanho-1-x];
  261.             }
  262.                   for (x=0; x<tamanho; x++){
  263.                      inv[x] = inv[x]*(pow(8, x));
  264.                      decimal+=inv[x];
  265.                   }
  266.  
  267.       while (decimal!=0){
  268.          res[i] = decimal%16;
  269.          decimal /= 16;
  270.          i++;
  271.          tam++;
  272.       }
  273.  
  274.    long long int result[tam];
  275.  
  276.       printf ("Hexadecimal: 0x");
  277.          for (i=0; i<tam; i++){
  278.             result[i] = res[tam-1-i];
  279.                switch (result[i]){
  280.                   case 10: printf ("A"); break;
  281.                   case 11: printf ("B"); break;
  282.                   case 12: printf ("C"); break;
  283.                   case 13: printf ("D"); break;
  284.                   case 14: printf ("E"); break;
  285.                   case 15: printf ("F"); break;
  286.                   default: printf ("%lld", result[i]); break;
  287.                }
  288.          }
  289.             linha (1);
  290. }
  291.  
  292. void hexa_dec (char hexa1[]){
  293.  
  294. int tamanho, i, t, decimal=0;
  295.  
  296.    tamanho = strlen(hexa1);
  297.  
  298. int vetor[tamanho], inv[tamanho];
  299.  
  300.    printf ("Decimal: ");
  301.  
  302.       for (t=0; t<tamanho; t++){
  303.          if (hexa1[t]>='0' && hexa1[t]<='9'){         //condição somente para os numeros
  304.             vetor[t] = hexa1[t] - 48;
  305.          }
  306.             else if (hexa1[t]>='A' && hexa1[t]<='F'){   //condição para as letras
  307.                vetor[t] = hexa1[t] - 55;         //na tabela ASCII, se fizermos A(65) - 55, nos da o valor 10, que equivale ao A
  308.             }
  309.                else if (hexa1[t]>='a' && hexa1[t]<='f'){
  310.                   vetor[t] = hexa1[t] - 87;
  311.                }
  312.       }
  313.                      for (i=0; i<tamanho; i++){
  314.                         inv[i] = vetor[tamanho-1-i];
  315.                      }
  316.                            for (i=0; i<tamanho; i++){
  317.                               inv[i] = inv[i]*(pow(16, i));
  318.                               decimal+=inv[i];
  319.                            }
  320.                                  printf ("%d\n", decimal);
  321. }
  322.  
  323. void hexa_bin (char hexa2[]){
  324.  
  325. int tamanho, x, t, decimal=0;
  326. long long int res[50], i=0, tam=0;
  327.  
  328.    tamanho = strlen(hexa2);
  329.  
  330. int vetor[tamanho], inv[tamanho];
  331.  
  332.       for (t=0; t<tamanho; t++){
  333.          if (hexa2[t]>='0' && hexa2[t]<='9'){
  334.             vetor[t] = hexa2[t] - 48;
  335.          }
  336.             else if (hexa2[t]>='A' && hexa2[t]<='F'){
  337.                vetor[t] = hexa2[t] - 55;
  338.             }
  339.                else if (hexa2[t]>='a' && hexa2[t]<='f'){
  340.                   vetor[t] = hexa2[t] - 87;
  341.                }
  342.       }
  343.                      for (x=0; x<tamanho; x++){
  344.                         inv[x] = vetor[tamanho-1-x];
  345.                      }
  346.                            for (x=0; x<tamanho; x++){
  347.                               inv[x] = inv[x]*(pow(16, x));
  348.                               decimal+=inv[x];
  349.                            }
  350.  
  351.       while (decimal!=0){
  352.          res[i] = decimal%2;
  353.          decimal /= 2;
  354.          i++;
  355.          tam++;
  356.       }
  357.  
  358.    long long int result[tam];
  359.  
  360.       printf ("Binario: ");
  361.          for (i=0; i<tam; i++){
  362.             result[i] = res[tam-1-i];
  363.             printf ("%lld", result[i]);
  364.          }
  365.                linha (1);
  366. }
  367.  
  368. void hexa_oct (char hexa3[]){
  369.  
  370. int tamanho, x, t, decimal=0;
  371. long long int res[50], i=0, tam=0;
  372.  
  373.    tamanho = strlen(hexa3);
  374.  
  375.    int vetor[tamanho], inv[tamanho];
  376.  
  377.       for (t=0; t<tamanho; t++){
  378.          if (hexa3[t]>='0' && hexa3[t]<='9'){
  379.             vetor[t] = hexa3[t] - 48;
  380.          }
  381.             else if (hexa3[t]>='A' && hexa3[t]<='F'){
  382.                vetor[t] = hexa3[t] - 55;
  383.             }
  384.                else if (hexa3[t]>='a' && hexa3[t]<='f'){
  385.                   vetor[t] = hexa3[t] - 87;
  386.                }
  387.       }
  388.                      for (x=0; x<tamanho; x++){
  389.                         inv[x] = vetor[tamanho-1-x];
  390.                      }
  391.                            for (x=0; x<tamanho; x++){
  392.                               inv[x] = inv[x]*(pow(16, x));
  393.                               decimal+=inv[x];
  394.                            }
  395.  
  396.       while (decimal!=0){
  397.          res[i] = decimal%8;
  398.          decimal /= 8;
  399.          i++;
  400.          tam++;
  401.       }
  402.  
  403.    long long int result[tam];
  404.  
  405.       printf ("Octal: ");
  406.          for (i=0; i<tam; i++){
  407.             result[i] = res[tam-1-i];
  408.             printf ("%lld", result[i]);
  409.          }
  410.                linha (1);
  411. }
  412.  
  413. int main (){
  414.  
  415.       long long int num;
  416.       char string[50];
  417.       int opc;
  418.  
  419.       printf ("\tConvers\744es de Bases\n");
  420.       printf ("\n\tAluno(s): Let\641cia Torres e Hendric Cechinato");
  421.       linha(1);
  422.       inicio:;
  423.       linha(2);
  424.       printf ("\tConvers\744es:\n\n");
  425.       printf ("\t\t1 - Decimal para Binario\n\t\t2 - Decimal para Octal\n\t\t3 - Decimal para Hexadecimal\n\n");
  426.       printf ("\t\t4 - Binario para Decimal\n\t\t5 - Binario para Octal\n\t\t6 - Binario para Hexadecimal\n\n");
  427.       printf ("\t\t7 - Octal para Decimal\n\t\t8 - Octal para Binario\n\t\t9 - Octal para Hexadecimal\n\n");
  428.       printf ("\t\t10 - Hexadecimal para Decimal\n\t\t11 - Hexadecimal para Binario\n\t\t12 - Hexadecimal para Octal\n\n");
  429.       linha (1);
  430.       printf ("Op\207\706o: ");
  431.       scanf ("%d", &opc);
  432.  
  433.          switch (opc){
  434.          case 1:
  435.             printf ("\nValor: ");
  436.             scanf ("%lld", &num);
  437.             linha(1);
  438.             decimal_bin (num);
  439.             break;
  440.          case 2:
  441.             printf ("\nValor: ");
  442.             scanf ("%lld", &num);
  443.             linha(1);
  444.             decimal_octal (num);
  445.             break;
  446.          case 3:
  447.             printf ("\nValor: ");
  448.             scanf ("%lld", &num);
  449.             linha(1);
  450.             decimal_hexa (num);
  451.             break;
  452.          case 4:
  453.             printf ("\nValor: ");
  454.             scanf ("%s", &string);
  455.             linha(1);
  456.             binario_dec(string);
  457.             break;
  458.          case 5:
  459.             printf ("\nValor: ");
  460.             scanf ("%s", &string);
  461.             linha(1);
  462.             binario_octal(string);
  463.             break;
  464.          case 6:
  465.             printf ("\nValor: ");
  466.             scanf ("%s", &string);
  467.             linha(1);
  468.             binario_hexa(string);
  469.             break;
  470.          case 7:
  471.             printf ("\nValor: ");
  472.             scanf ("%s", &string);
  473.             linha(1);
  474.             octal_dec(string);
  475.             break;
  476.          case 8:
  477.             printf ("\nValor: ");
  478.             scanf ("%s", &string);
  479.             linha (1);
  480.             octal_bin(string);
  481.             break;
  482.          case 9:
  483.             printf ("\nValor: ");
  484.             scanf ("%s", &string);
  485.             linha (1);
  486.             octal_hexa(string);
  487.             break;
  488.          case 10:
  489.             printf ("\nValor: ");
  490.             scanf ("%s", &string);
  491.             linha (1);
  492.             hexa_dec(string);
  493.             break;
  494.          case 11:
  495.             printf ("\nValor: ");
  496.             scanf ("%s", &string);
  497.             linha (1);
  498.             hexa_bin(string);
  499.             break;
  500.          case 12:
  501.             printf ("\nValor: ");
  502.             scanf ("%s", &string);
  503.             linha (1);
  504.             hexa_oct(string);
  505.             break;
  506.          default:
  507.             linha(1);
  508.             printf ("\nNao foi possivel acessar a opcao. Digite novamente:");
  509.             goto inicio;
  510.          }
  511. return 0;
  512. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement