Advertisement
Guest User

conv

a guest
Nov 27th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include <math.h>
  7. #define getch() _getch()
  8.  
  9. void menu();
  10. void voltaMenu(int *);
  11.  
  12. void quebra(int);
  13. void tabula(int);
  14.  
  15. void DecParaBin();
  16. void BinParaDec();
  17. void DecParaHex();
  18. void HexParaDec();
  19. void DecParaOct();
  20. void OctParaDec();
  21. void BinParaHex();
  22. void HexParaBin();
  23. void oploge();
  24. void oplogou();
  25. void oplognot();
  26.  
  27. void PedeNumero();
  28. void PedeBinario();
  29. void PedeHexa();
  30. void PedeOctal();
  31.  
  32. char valor[50];
  33.  
  34. int main(void)
  35. {
  36.     menu();
  37.     quebra(2);
  38.  
  39.     system("pause");
  40.     return 0;
  41. }
  42.  
  43. void quebra(int n)
  44. {
  45.     for (int i = 0; i<n; i++)
  46.     {
  47.         printf("\n");
  48.     }
  49. }
  50.  
  51. void tabula(int n)
  52. {
  53.     for (int i = 0; i<n; i++)
  54.     {
  55.         printf("\t");
  56.     }
  57. }
  58.  
  59. void menu()
  60. {
  61.  
  62.     system("title Conversao de Bases");
  63.     system("color F0");
  64.  
  65.  
  66.     int opc;
  67.  
  68.     printf("Escolha a conversao:"); quebra(2); tabula(1);
  69.     printf("1 - Decimal para binario"); quebra(1); tabula(1);
  70.     printf("2 - Binario para decimal"); quebra(1); tabula(1);
  71.     printf("3 - Decimal para hexadecimal"); quebra(1); tabula(1);
  72.     printf("4 - Hexadecimal para decimal"); quebra(1); tabula(1);
  73.     printf("5 - Decimal para octal"); quebra(1); tabula(1);
  74.     printf("6 - Octal para decimal"); quebra(1); tabula(1);
  75.     printf("7 - Binario para hexadecimal"); quebra(1); tabula(1);
  76.     printf("8 - Hexadecimal para binario"); quebra(1); tabula(1);
  77.     printf("9 - Para efetuar Operador Logico (E)"); quebra(1); tabula(1);
  78.     printf("10 - Para efetuar Operador Logico (OU)"); quebra(1); tabula(1);
  79.     printf("11 - Para efetuar Operador Logico Copmlemente (NOT)"); quebra(1); tabula(1);
  80.     printf("12 - Sair"); quebra(2);
  81.  
  82.     printf("Opcao: ");
  83.     scanf_s("%d", &opc);
  84.  
  85.     switch (opc)
  86.     {
  87.     case 1:
  88.         DecParaBin();
  89.         voltaMenu(&opc);
  90.         break;
  91.     case 2:
  92.         BinParaDec();
  93.         voltaMenu(&opc);
  94.         break;
  95.     case 3:
  96.         DecParaHex();
  97.         voltaMenu(&opc);
  98.         break;
  99.     case 4:
  100.         HexParaDec();
  101.         voltaMenu(&opc);
  102.         break;
  103.     case 5:
  104.         DecParaOct();
  105.         voltaMenu(&opc);
  106.         break;
  107.     case 6:
  108.         OctParaDec();
  109.         voltaMenu(&opc);
  110.         break;
  111.     case 7:
  112.         BinParaHex();
  113.         voltaMenu(&opc);
  114.         break;
  115.     case 8:
  116.         HexParaBin();
  117.         voltaMenu(&opc);
  118.         break;
  119.     case 9:
  120.         oploge();
  121.         voltaMenu(&opc);
  122.         break;
  123.     case 10:
  124.         oplogou();
  125.         voltaMenu(&opc);
  126.     case 11:
  127.         oplognot();
  128.         voltaMenu(&opc);
  129.     case 12:
  130.         exit(1);
  131.     default:
  132.         system("cls");
  133.         menu();
  134.     }
  135. }
  136.  
  137.  
  138. void voltaMenu(int * op)
  139. {
  140.     quebra(2);
  141.     printf("Deseja voltar ao menu? (1-sim / 2-nao) ");
  142.     scanf_s("%d", op);
  143.     if (*op == 1){
  144.         system("cls");
  145.         menu();
  146.     }
  147. }
  148.  
  149. void DecParaBin()
  150. {
  151.     char binario[33];
  152.     char buffer[33];
  153.  
  154.     int divisor = 2;
  155.  
  156.     int resto = 0;
  157.     int quociente = 0;
  158.     int temp = 0;
  159.  
  160.     quebra(2);
  161.     printf("Informe um numero inteiro para ser convertido: ");
  162.     PedeNumero();
  163.  
  164.     quociente = atoi(valor);
  165.     strcpy_s(binario, "");
  166.     while (quociente >= divisor)
  167.     {
  168.         resto = quociente%divisor;
  169.         temp = quociente / divisor;
  170.         quociente = temp;
  171.         sprintf_s(buffer, "%d", resto);
  172.         strcat_s(binario, buffer);
  173.     }
  174.     sprintf_s(buffer, "%d", quociente);
  175.     strcat_s(binario, buffer);
  176.  
  177.     quebra(2);
  178.     printf("Convertido em binario: %s", _strrev(binario));
  179.     quebra(2);
  180. }
  181.  
  182. void BinParaDec()
  183. {
  184.     int tamanho = 0;
  185.     int result = 0;
  186.     int temp = 0;
  187.     int i = 0;
  188.  
  189.     quebra(2);
  190.     printf("Informe um valor binario para ser convertido: ");
  191.     PedeBinario();
  192.  
  193.     tamanho = strlen(valor);
  194.     tamanho--;
  195.     while (tamanho >= 0)
  196.     {
  197.         temp = pow(2.0, tamanho);
  198.         result += ((valor[i] - 48) * temp);
  199.         tamanho--;
  200.         i++;
  201.     }
  202.  
  203.     quebra(2);
  204.     printf("Convertido em decimal: %d", result);
  205.     quebra(2);
  206. }
  207.  
  208. void DecParaHex()
  209. {
  210.     char hexa[33];
  211.     char* hexadecimais = "0123456789ABCDEF";
  212.  
  213.     int divisor = 16;
  214.  
  215.     int resto = 0;
  216.     int quociente = 0;
  217.     int temp = 0;
  218.     char tmp[5];
  219.  
  220.     strcpy_s(hexa, "");
  221.  
  222.     quebra(2);
  223.     printf("Informe um numero inteiro para ser convertido: ");
  224.     PedeNumero();
  225.  
  226.     quociente = atoi(valor);
  227.  
  228.     while (quociente >= divisor)
  229.     {
  230.         resto = quociente%divisor;
  231.         temp = quociente / divisor;
  232.         quociente = temp;
  233.  
  234.         sprintf(tmp, "%c", hexadecimais[resto]);
  235.         strcat(hexa, tmp);
  236.     }
  237.     sprintf(tmp, "%c", hexadecimais[quociente]);
  238.     strcat(hexa, tmp);
  239.  
  240.     quebra(2);
  241.     printf("Convertido em Hexadecimal: %s", _strrev(hexa));
  242.     quebra(2);
  243. }
  244.  
  245. void HexParaDec()
  246. {
  247.     int tamanho = 0;
  248.     int result = 0;
  249.     int temp = 0;
  250.     int i = 0;
  251.  
  252.     quebra(2);
  253.     printf("Informe um valor hexadecimal para ser convertido: ");
  254.     PedeHexa();
  255.  
  256.     tamanho = strlen(valor);
  257.     tamanho--;
  258.     while (tamanho >= 0)
  259.     {
  260.         temp = pow(16.0, tamanho);
  261.         if ((valor[i] - 48) >= 17 && (valor[i] - 48) <= 22)
  262.         {
  263.             result += ((valor[i] - 55) * temp);
  264.         }
  265.         else{
  266.             result += ((valor[i] - 48) * temp);
  267.         }
  268.         tamanho--;
  269.         i++;
  270.     }
  271.  
  272.     quebra(2);
  273.     printf("Convertido em decimal: %d", result);
  274.     quebra(2);
  275. }
  276.  
  277. void DecParaOct()
  278. {
  279.     char octal[33];
  280.     char buffer[33];
  281.  
  282.     int divisor = 8;
  283.  
  284.     int resto = 0;
  285.     int quociente = 0;
  286.     int temp = 0;
  287.  
  288.     quebra(2);
  289.     printf("Informe um numero inteiro para ser convertido: ");
  290.     PedeNumero();
  291.  
  292.     quociente = atoi(valor);
  293.     strcpy(octal, "");
  294.  
  295.     while (quociente >= divisor)
  296.     {
  297.         resto = quociente%divisor;
  298.         temp = quociente / divisor;
  299.         quociente = temp;
  300.         sprintf(buffer, "%d", resto);
  301.         strcat(octal, buffer);
  302.     }
  303.     sprintf(buffer, "%d", quociente);
  304.     strcat(octal, buffer);
  305.  
  306.     quebra(2);
  307.     printf("Convertido em octal: %s", _strrev(octal));
  308.     quebra(2);
  309. }
  310.  
  311. void OctParaDec()
  312. {
  313.     int tamanho = 0;
  314.     int result = 0;
  315.     int temp = 0;
  316.     int i = 0;
  317.  
  318.     quebra(2);
  319.     printf("Informe um valor octal para ser convertido: ");
  320.     PedeOctal();
  321.  
  322.     tamanho = strlen(valor);
  323.     tamanho--;
  324.     while (tamanho >= 0)
  325.     {
  326.         temp = pow(8.0, tamanho);
  327.         result += ((valor[i] - 48) * temp);
  328.         tamanho--;
  329.         i++;
  330.     }
  331.  
  332.     quebra(2);
  333.     printf("Convertido em decimal: %d", result);
  334.     quebra(2);
  335. }
  336.  
  337. void BinParaHex()
  338. {
  339.     char hexa[33];
  340.     char temp[33];
  341.     char *p;
  342.     char Hexas[16][2] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
  343.         "B", "C", "D", "E", "F" };
  344.     char Binarios[16][5] = { "0000", "0001", "0010", "0011", "0100", "0101",
  345.         "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110",
  346.         "1111" };
  347.  
  348.     int tamanho = 0;
  349.     int i;
  350.  
  351.     quebra(2);
  352.     printf("Informe um valor binario: ");
  353.     PedeBinario();
  354.  
  355.     tamanho = strlen(valor);
  356.     strcpy(hexa, "");
  357.     strcpy(temp, "");
  358.  
  359.     if (tamanho % 4 == 1){
  360.         strcpy(temp, "000");
  361.         tamanho += 3;
  362.         strcat(temp, valor);
  363.         strcpy(valor, temp);
  364.     }
  365.     else if (tamanho % 4 == 2){
  366.         strcpy(temp, "00");
  367.         tamanho += 2;
  368.         strcat(temp, valor);
  369.         strcpy(valor, temp);
  370.     }
  371.     else if (tamanho % 4 == 3){
  372.         strcpy(temp, "0");
  373.         tamanho += 1;
  374.         strcat(temp, valor);
  375.         strcpy(valor, temp);
  376.     }
  377.  
  378.     p = valor;
  379.  
  380.     while (*p != '\0'){
  381.         for (i = 0; i<16; i++){
  382.             if (strncmp(p, Binarios[i], 4) == 0){
  383.                 strcat(hexa, Hexas[i]);
  384.                 i = 16;
  385.             }
  386.         }
  387.         p += 4;
  388.     }
  389.  
  390.     quebra(2);
  391.     printf("Convertido em hexadecimal: %s", hexa);
  392.     quebra(2);
  393. }
  394.  
  395. void HexParaBin()
  396. {
  397.     char binario[33];
  398.     char Binarios[16][5] = { "0000", "0001", "0010", "0011", "0100", "0101",
  399.         "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110",
  400.         "1111" };
  401.     char Binarios2[16][5] = { "", "1", "10", "11", "100", "101", "110", "111",
  402.         "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };
  403.  
  404.     int tamanho = 0;
  405.     int i;
  406.     int result;
  407.     int zero = 0;
  408.  
  409.     quebra(2);
  410.     printf("Informe um valor hexadecimal: ");
  411.     PedeHexa();
  412.  
  413.     tamanho = strlen(valor);
  414.     strcpy(binario, "");
  415.  
  416.     for (i = 0; i<tamanho; i++)
  417.     {
  418.         if ((valor[i] - 48) >= 17 && (valor[i] - 48) <= 22)
  419.         {
  420.             result = ((valor[i] - 55));
  421.             strcat(binario, Binarios[result]);
  422.         }
  423.         else{
  424.             result = ((valor[i] - 48));
  425.             if (result == 0 && i == 0){
  426.                 strcpy(binario, "");
  427.                 zero++;
  428.             }
  429.             else if (result == 0){
  430.                 zero++;
  431.             }
  432.             if (i == 0 || zero != 0){
  433.                 strcat(binario, Binarios2[result]);
  434.             }
  435.             else{
  436.                 strcat(binario, Binarios[result]);
  437.             }
  438.         }
  439.     }
  440.  
  441.     if (zero == tamanho){
  442.         strcpy(binario, "0");
  443.     }
  444.  
  445.     quebra(2);
  446.     printf("Convertido em binario: %s", binario);
  447.     quebra(2);
  448. }
  449.  
  450. void PedeNumero()
  451. {
  452.     char c;
  453.     int i;
  454.  
  455.     i = 0;
  456.     do
  457.     {
  458.         c = getch();
  459.         if (isdigit(c) != 0)
  460.         {
  461.             valor[i] = c;
  462.             i++;
  463.             printf("%c", c);
  464.         }
  465.         else if (c == 8 && i)
  466.         {
  467.             valor[i] = '\0';
  468.             i--;
  469.             printf("\b \b");
  470.         }
  471.     } while (c != 13);
  472.  
  473.     valor[i] = '\0';
  474. }
  475.  
  476. void PedeBinario()
  477. {
  478.     char c;
  479.     int i;
  480.  
  481.     i = 0;
  482.     do
  483.     {
  484.         c = getch();
  485.         if (c == '0' || c == '1')
  486.         {
  487.             valor[i] = c;
  488.             i++;
  489.             printf("%c", c);
  490.         }
  491.         else if (c == 8 && i)
  492.         {
  493.             valor[i] = '\0';
  494.             i--;
  495.             printf("\b \b");
  496.         }
  497.     } while (c != 13);
  498.  
  499.     valor[i] = '\0';
  500. }
  501.  
  502. void PedeHexa()
  503. {
  504.     char c;
  505.     int i;
  506.  
  507.     i = 0;
  508.     do
  509.     {
  510.         c = getch();
  511.         if ((c >= 48 && c <= 57) || (c >= 65 && c <= 70))
  512.         {
  513.             valor[i] = c;
  514.             i++;
  515.             printf("%c", c);
  516.         }
  517.         else if (c == 8 && i)
  518.         {
  519.             valor[i] = '\0';
  520.             i--;
  521.             printf("\b \b");
  522.         }
  523.     } while (c != 13);
  524.  
  525.     valor[i] = '\0';
  526. }
  527.  
  528. void PedeOctal()
  529. {
  530.     char c;
  531.     int i;
  532.  
  533.     i = 0;
  534.     do
  535.     {
  536.         c = getch();
  537.         if ((c >= 48 && c <= 55))
  538.         {
  539.             valor[i] = c;
  540.             i++;
  541.             printf("%c", c);
  542.         }
  543.         else if (c == 8 && i)
  544.         {
  545.             valor[i] = '\0';
  546.             i--;
  547.             printf("\b \b");
  548.         }
  549.     } while (c != 13);
  550.  
  551.     valor[i] = '\0';
  552. }
  553.  
  554. void oploge(){
  555.  
  556.     int valor1;
  557.     int valor2;
  558.     char binario[8];
  559.  
  560.  
  561.     printf("digite 1o numero: \n\n");
  562.     scanf("%i\n", &valor1);
  563.     _itoa(valor1, binario, 2);
  564.     printf("%s\n", binario);
  565.  
  566.     printf("digite o 2o numero: \n\n");
  567.     scanf("%i\n", &valor2);
  568.     _itoa(valor2, binario, 2);
  569.     printf("%s\n", binario);
  570.  
  571.     _itoa(valor1 & valor2, binario, 2);
  572.     printf("AND = %s\n", binario);
  573.  
  574.     _itoa(valor1 | valor2, binario, 2);
  575.     printf("OR = %s\n", binario);
  576.  
  577. }
  578.  
  579. void oplogou(){
  580.  
  581.     int x, y, op;
  582.  
  583.     printf("\n\nDigite o primeiro valor: ");
  584.     scanf("%d", &x);
  585.  
  586.     printf("\n\nDigite o segundo valor: ");
  587.     scanf("%d", &y);
  588.  
  589.     op = (x | y);
  590.  
  591.     printf("\n\nResultado: %d\n", op);
  592.  
  593. }
  594.  
  595. void oplognot(){
  596.  
  597.     int x, op;
  598.  
  599.     printf("\n\nDigite o valor: ");
  600.     scanf("%d", &x);
  601.  
  602.     op = ~x;
  603.  
  604.     printf("\n\nResultado: %d\n", op);
  605.  
  606.  
  607.  
  608. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement