• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Bruno_F

[C] Conversor Binário-Decimal / Decimal-Binário

9 mensagens neste tópico

Como a vontade de estudar para os exames é pouca... resolvi brincar um bocado com o C, e fiz um programa básico que apenas converte binário em decimal e vice-versa. Aqui vai o código:

#include <stdio.h>
#include <string.h>


int main()
{
   char valor[50], tmp;
   int cont, valor_i, valor_c=0, op_menu, r_div, i, cont2;

   do
   { 
     system("cls");
     printf("1- Decimal to Binary\n");
     printf("2- Binary to Decimal\n");
     printf("3- Exit\n");
     do
     {
     scanf("%d", &op_menu);
     }while (op_menu<1||op_menu>3);
     switch(op_menu)
     {
                    case 1:

                         // Decimal to Binary....

                         printf("\nInsert the number you want to convert: ");
                         scanf("%d", &valor_i);
                         cont=0;
                         i=0;
                         while (i!=1)
                         {
                               r_div=valor_i/2;
                               if (r_div<2)
                               {
                                                i=1;
                                                if (valor_i%2==0)
                                                {
                                                                 valor[cont]='0';
                                                }
                                                else
                                                {
                                                    valor[cont]='1';
                                                }
                                                if (r_div==0)
                                                {
                                                             valor[cont+1]='0';
                                                }
                                                else
                                                {
                                                             valor[cont+1]='1';
                                                }
                                                valor[cont+2]='\0';
                               }
                               else
                               {
                                   if (valor_i%2==0)
                                   {
                                                    valor[cont]= '0';
                                   }
                                   else
                                   {
                                                    valor[cont]= '1';
                                   }
                               }
                               cont++;
                               valor_i=r_div;
                         }
                         cont2=strlen(valor)-1;
                         for (cont=0; cont==cont2||cont<cont2; cont++)
                         {
                             tmp=valor[cont];
                             valor[cont]=valor[cont2];
                             valor[cont2]=tmp;
                             cont2--;
                         }                           
                         printf("\n%s", valor);
                         fflush(stdin);
                         getch();
                         break;

                    case 2:

                         //Binary to Decimal
                         //***********************************************************************

                         printf("Insert the number you want to convert: ");
                         scanf("%s", &valor);
                         for (cont=0; cont<strlen(valor); cont++)
                         {
                             if (valor[cont]=='1')
                             {
                                                  valor_c=valor_c+pow(2, strlen(valor)-(cont+1));
                             }
                             if (valor[cont]!='1'&&valor[cont]!='0')
                             {
                                                  printf("\nInvalid Values!");
                                                  cont=strlen(valor); //Ending the loop...
                             }
                         }
                         printf("%d", valor_c);
                         fflush(stdin);
                         getch();
                         break;
                         //***********************************************************************                         
                    }
     }while (op_menu!=3);


}

Agradecia feedback. Cumprimentos :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me demasiado código para fazer tão pouco, por exemplo a parte de converter para binário poderia ser algo do genero:

//teoricamente portavel para 32,64,etc bits
unsigned int flag=~(((unsigned int)~0^1)>>1); 

while(flag!=0){
printf("%i",(int)(flag & valor_i) && 1);
flag>>=1;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aquela combo box acho que foi retirada, mas podes fazer [ code = linguagem ] que é aplicado o GeSHi na mesma, ex: [ code = c ] (sem os espaços).

Em relação ao Binário para decimal, eu faria:

scanf("%s", &valor);
for ( i = 0 , res = 0 ; valor[i] ; i++ ){
   res <<= 1;
   res |= valor[i] == '1' ;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

system("cls");

nao percebi bem porque; mas isto ta te a dar erro nesta linha

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

system("cls");

nao percebi bem porque; mas isto ta te a dar erro nesta linha

essa instrução limpa o que ja estava escrito antes, e so por uma questao de estetica xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

system("cls");

nao percebi bem porque; mas isto ta te a dar erro nesta linha

Em que sistema operativo? "cls" é o comando para limpar a linha de comandos no DOS. Para Linux & alike, o comando é "clear".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no windows :S a instrução "system("pause");" e outra que so costuma funcionar no windows, serve para parar o programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Amigos estou em duvida,sou novo na área,

preciso criar uma calculadora em c++

que multiplique e divida números binários

alguém pode me socorrer,

Grato

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora