Ir ao conteúdo

Transformando Binario em Decimal e vice-versa!


Eder Cuer

Posts recomendados

Postado

Olá galera não sei se já existe esse tópico, se já houver me desculpem. Tenho que fazer um programa que converta numeros binarios para decimais e decimais em binarios, mas usando somente for, while e if, sem array e conversão de numero para string, achei algumas coisas sobre fazer conversão, mas não é bem isso. Ta ai a parte que já fiz

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

main()

{

int num, op, res, cont, bin, dec;

do

{

system("cls");

printf("Escolha a opcao para conversao de bases!");

printf("\n\n1. Decimal para Binario");

printf("\n\n2. Binario para Decimal");

printf("\n\n0. Para sair");

printf("\n\nDigite a opcao: ");

scanf("%d", &op);

if((op<0)||(op>1))

printf("Opcao invalida, digite novamente!!!");

else

if(op==1)

{

printf("Digite o numero decimal: ");

scanf("%d",&num);

}

else

printf("Digite o numero binario: ");

scanf("%d",&num);

}while(num =! 0)

getch();

}

Estou tendo um pouco de dificuldade em tranformar os numeros :wacko:

Postado
Estou tendo um pouco de dificuldade em tranformar os numeros :wacko:

Divisões sucessivas por 2!

Como você está utilizando inteiros, vai ter de fazer a conversão do dígito binário para potência de 10 para quando você imprimir sair 0011001.

Um jeito razoável de fazer é você pegar uma variável teste = 1 e uma cont=0, e ir multiplicando teste por 2 e incrementando cont até que o valor de teste seja maior ou igual ao do número digitado.

A partir daí você faz

bin+=pow(10,cont);

num-=pow(2,cont);

teste/=2;

cont--;

e vai repetindo até acabar...

Para fazer o contrário dá para usar uma lógica parecida.

Lembrando de inicializar bin=0; antes!

Postado

Fiz o que me disse e ta assim

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

main()

{

int num, op, res, cont, bin=0,teste=1, dec;

do

{

system("cls");

printf("Escolha a opcao para conversao de bases!");

printf("\n\n1. Decimal para Binario");

printf("\n\n2. Binario para Decimal");

printf("\n\n0. Para sair");

printf("\n\nDigite a opcao: ");

scanf("%d", &op);

if((op<0)||(op>1))

printf("Opcao invalida, digite novamente!!!");

else

if(op==1)

{

printf("Digite o numero decimal: ");

scanf("%d",&num);

for(cont=0; teste<=num; cont++)

{

teste*= 2;

cont++;

}

for(bin=0; teste>=num; cont--)

{

bin+=pow(10,cont);

num-=pow(2,cont);

teste/=2;

cont--;

}

printf("O numero convertido e => %d", num);

}

else

printf("Digite o numero binario: ");

scanf("%d",&num);

}while(num =! 0);

getch();

}

Não ta dando erro, mas também n converte, n aparece nada depois que digito o numero

Postado

Consertei:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int num, op, res, cont, bin=0,teste=1, dec;

do
{
system("cls");
printf("Escolha a opcao para conversao de bases!");
printf("\n\n1. Decimal para Binario");
printf("\n\n2. Binario para Decimal");
printf("\n\n0. Para sair");
printf("\n\nDigite a opcao: ");
scanf("%d", &op);
getchar();

if((op<0)||(op>1))
printf("Opcao invalida, digite novamente!!!");
else if(op==1)
{
printf("Digite o numero decimal: ");
scanf("%d",&num);
getchar();

for(cont=0; teste<num; cont++)
{
teste*= 2;
}
printf("teste [%d] cont [%d]\n",teste,cont);

for(bin=0; num>0; cont--)
{
bin+=pow(10,cont);
num-=pow(2,cont);
cont--;
}

printf("O numero convertido e => %d", bin);
getchar();

}
else if(op==2)
{
printf("Digite o numero binario: ");
scanf("%d",&num);
getchar();
}

}while(op != 0);

printf("\n\tFim!");
getchar();
return 0;
}

Postado

Rodei aqui e ele só converte o numero 1 e 2, se eu coloco o numero 3 ele converte pra 10(que é o 2 em binario) , se eu coloco 4 ele converte para 99 e o 6 para 1. Da uma mensagem aqui falando pra trocar o int por double. E depois de alguns testes nem o 2 converte mais :wacko:

Postado
Rodei aqui e ele só converte o numero 1 e 2, se eu coloco o numero 3 ele converte pra 10(que é o 2 em binario) , se eu coloco 4 ele converte para 99 e o 6 para 1. Da uma mensagem aqui falando pra trocar o int por double. E depois de alguns testes nem o 2 converte mais :wacko:

Agora funciona!

kkkkkkkkkkkk


#include <stdlib.h>
#include <math.h>

int main()
{
int num, op, res, cont, bin,teste, dec;

do
{
system("cls");
printf("Escolha a opcao para conversao de bases!");
printf("\n\n1. Decimal para Binario");
printf("\n\n2. Binario para Decimal");
printf("\n\n0. Para sair");
printf("\n\nDigite a opcao: ");
scanf("%d", &op);
getchar();

if((op<0)||(op>1))
printf("Opcao invalida, digite novamente!!!");
else if(op==1)
{
printf("Digite o numero decimal: ");
scanf("%d",&num);
getchar();
if((num==0) || (num==1))
{
bin=num;
}
else if(num==2)
{
bin=10;
}
else{
teste=1;
for(cont=0; teste<num;)
{
teste*= 2;
++cont;
}
teste/=2;
--cont;
printf("teste [%d] cont [%d]\n",teste,cont);
bin=0;
while(num>0)
{
printf("pow(10,%d) [%d]\tpow(2,%d) [%d]\n",cont,pow(10,cont),cont,pow(2,cont));
bin+=pow(10,cont);
num-=pow(2,cont);
--cont;
}
}

printf("O numero convertido e => %d", bin);
getchar();

}
else if(op==2)
{
printf("Digite o numero binario: ");
scanf("%d",&num);
getchar();
}

}while(op != 0);

printf("\n\tFim!");
getchar();
return 0;
}
#include <stdio.h>

Postado

hehehe.. da dando problema ainda xD..

Tipo se colocar a partir do numero 4 ele converte errado, tem como explicar o codigo?

To tentando entender e não consigo.. tipo porque o "return"? e se eu não me engano a função "pow" deixa a variavel float não é?

Postado
hehehe.. da dando problema ainda xD..

Tipo se colocar a partir do numero 4 ele converte errado, tem como explicar o codigo?

To tentando entender e não consigo.. tipo porque o "return"? e se eu não me engano a função "pow" deixa a variavel float não é?

Poxa, aqui tava funcionando direitinho...

Mais tarde dou uma olhada nela de novo.

Vou testar no linux também.

Tem como tu postar os resultados que você obteve para eu ter alguma noção do que pode estar ocorrendo?

A função main deve retornar um inteiro para quem a chamou, para indicar se executou sem erros e coisas afins...

Quanto ao pow, realmente não existe uma versão inteira sobrecarregada...

Eu tinha criado um equivalente rapidão, mas só servia para expoente >= 1 e teve os mesmos resultados de usar pow, então tirei.

-----------------------------------------------------------------------------------------------------

EDIT:

Agora estou sem tempo, mas quando eu chegar em casa eu posto uma explicação do algoritmo.

Abraço

Postado

Agora sim funciona, pelo amor de deus!

Tinha esquecido de colocar parte do algoritmo! oaehoaheoae


#include <stdlib.h>
#include <math.h>

int main()
{
int num, op, res, cont, bin,teste, dec;

do
{
system("cls");
printf("Escolha a opcao para conversao de bases!");
printf("\n\n1. Decimal para Binario");
printf("\n\n2. Binario para Decimal");
printf("\n\n0. Para sair");
printf("\n\nDigite a opcao: ");
scanf("%d", &op);
getchar();

if((op<0)||(op>1))
printf("Opcao invalida, digite novamente!!!");
else if(op==1)
{
printf("Digite o numero decimal: ");
scanf("%d",&num);
getchar();
if((num==0) || (num==1))
{
bin=num;
}
else if(num==2)
{
bin=10;
}
else{
teste=1;
for(cont=0; teste<num;)
{
teste*= 2;
++cont;
}
if(teste>num){
teste/=2;
--cont;
}
printf("teste [%d] cont [%d]\n",teste,cont);
bin=0;
while(num>0)
{
if(num>=teste){
bin+=pow(10,cont);
num-=pow(2,cont);
}
teste/=2;
--cont;
}
}

printf("O numero convertido e => %d", bin);
getchar();

}
else if(op==2)
{
printf("Digite o numero binario: ");
scanf("%d",&num);
getchar();
}

}while(op != 0);

printf("\n\tFim!");
getchar();
return 0;
}
#include <stdio.h>

Então explicando o processo, a primeira coisa que se faz é procurar qual expoente de 2 é maior ou igual ao número!

Porque? Simples!

Para não precisar de string ou vetor de inteiros, pensei num jeito de construir um inteiro por somas.

Oras, um número binário não é uma soma de potências de 10?

Já tenho como construir! Mas o que vai definir o expoente dessas potencias?

Um número binário cresce da direita para a esquerda ó:


... 512-256-128-64-32-16-8-4-2-0
1 0 0 0

Representei ali o 8!

Bom, 8 é composto pela posição 2^3 e 8-2^3=0, sem falar que 10^3 = 8 em binário!

Oras! Faço um laço procurando pela potencia de 2 que seja maior ou igual ao número que desejo converter. A cada passo do laço eu incremento a potencia de 2 e incremento o expoente inicial das potências de 10 que usarei para construir o número.

Após o laço eu verifico se a potência de 2 encontrada é maior que o número, se for, devo reduzir em uma unidade a potencia de 2 e o expoente da série de potências de 10.

Depois de ajustados os valores, faço um laço para construir o correspondente ao número binário!

O laço se baseia em "setar um dígito" e reduzir o número a ser convertido pela potencia de 2 atual, ajustando também os expoentes a cada iteração. Caso o número seja menor que a potência de 2 atual, não se executa a "setagem de dígito" (dado que é 0) nem a redução do número.

Ao final, temos nosso número correspondente ao binário do número que queríamos converter.

Achei que ficou meio confusa a explicação... Ajudou?

Qualquer coisa tento explicar de outra forma...

Postado

Entendi a lógica, testei aqui e continua dando erro, se eu colocar o decimal 4, ele me retorna 99, quando coloco o numero decimal 5 ele me retorna 100, mas na vdd 5 em binario é 101, e testei o 20 e retornou 10099 em binario. É de deixar louco auhsuhaushuahs...

Por curiosidade eu fui tentar testar a função "pow", e quando fiz o 5^2 ele da o numero 24 oO', e é o unico numero que da errado, todos os outros retornaram certo.

Tava pensando em outra forma, vamos pensar no seguinte:

5^3 = 5.5.5

e se fizermos o seguinte:

5.5 = 25, 25.5 = 125 (pegando o resultado da multiplicação do numero por ele mesmo, e multiplicando por ele novamente até dar a potencia)

O codigo vai ficar bem maior, foi um jeito novo que pensei, porque n sei o que ta acontecendo com essa função "pow" :confused:

5^2 = 24???

:wacko:

Postado

Cara, eu testei aqui com muitos números e todos deram certo...

Me pergunto porque você quer fazer 5^2 e não 2^5...

Queremos construir o numero binario, temos que usar base 2 e não 5...

Mas se até seu 5^2 tá dando errado, acho que tem algo de errado com seu computador... =(

EDIT:

Tenta criar uma int powInteiro(int base,int exp) e trocar pelo pow para ver se funciona.

Postado
Será q é o meu dev??:confused:

O meu é o portatil

Talvez.

Tenta conseguir um GCC, ou outro compilador para testar.

Pelo menos no windows e com Visual Studio esse código funciona.

Ainda não testei no linux.

Postado

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;
int main()
{
int pilha=0;
int n,j,quo,resto, op;
int vet[30];

do{

system("cls");
cout <<" 1 - Entrar no programa \n 0 - Sair"<<endl << endl;
cin >> op;
if ((op>1) || (op<0))
cout << "NAO EXISTE ESTA OPÇÃO! POR FAVOR, DIGITE NOVAMENTE A opção: ";
else if (op == 1) {
cout <<"\t\tTRANSFORME NUMERO DECIMAL PARA BINARIO!!!"<<endl << endl;
cout <<"Digite um numero: ";
cin>> n;

do
{
quo=n/2;
resto=n%2;
vet[pilha]=resto;
pilha++;
n=quo;
}
while (n!=0);
cout<<"\n\nO numero em binario e': ";
for (j=pilha-1;j>=0;j--)
cout << vet[j];
cout<<endl<<endl;
system("pause");
cout<< endl;
}

}while(op != 0);

cout<< "voce saiu do programa!!\n";




}

Assim fica bem menor. Mas só de Decimal para binário.

Postado
(...)

        quo=n/2;
resto=n%2;
[B]vet[pilha]=resto;[/B]

(...)

Assim fica bem menor. Mas só de Decimal para binário.

Costuma ser bom ler pelo menos o post inicial...

(...)Tenho que fazer um programa que converta numeros binarios para decimais e decimais em binarios, mas usando somente for, while e if, sem array e conversão de numero para string, achei algumas coisas sobre fazer conversão, mas não é bem isso. Ta ai a parte que já fiz

(...)

Fala claramente que não deve usar array nem string...

Sem falar que o código do cara tá todo em C, não faz sentido propor C++.

Postado

Eae pessoal, então consegui um jeito de fazer a conversão, agora só vai faltar de binario pra decimal, ta ae...

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

main()

{

int op, bin=0, num, div=0, resto, d=1;

do

{

system("cls");

printf("Escolha a opcao para conversao de bases!");

printf("\n\n1. Decimal para Binario");

printf("\n\n2. Binario para Decimal");

printf("\n\n0. Para sair");

printf("\n\nDigite a opcao: ");

scanf("%d", &op);

if((op<0)||(op>1))

printf("Opcao invalida, digite novamente!!!");

else

if(op==1)

{

printf("Digite o numero decimal: ");

scanf("%d",&num);

do

{

resto=num%2;

div=num/2;

num=div;

bin += resto*d;

d*=10;

}while(div>0);

printf("%d",bin);

}

else

printf("Digite o numero binario: ");

scanf("%d",&num);

}while(op =! 0);

getch();

}

:D

Postado
Caramba, coloco tudo certinho, com edentação e fica tudo feio quando mando.

Desculpa ae galera!

É porque você tá mandando como "citação" e não "código".

a tag de código é

 (o # lá em cima)
Postado

Eae galera, consegui terminar meu programa (em partes :mad:). Meu programa ta convertendo os numeros, mas não mais que uma vez, se faço pela segunda vez ele ja da errado.

Exemplo, se eu escolho pra converter de decimal pra binario, e coloco o numero decimal 2, ele converte cerinho para o numero 10 (binario), mas se faço isso novamente ele aparece 1010 oO. Não enxergo onde ta dando esse erro, tentei de tudo (zerar a variavel a cada if, colocar a função fflush(stdin) ) ... vou postar o codigo.

Postado

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

main()
{
int op, bin=0, dec=0, num, div=0, resto, d=1,soma;

do
{

system("cls");
printf("Escolha a opcao para conversao de bases!");
printf("\n\n1. Decimal para Binario");
printf("\n\n2. Binario para Decimal");
printf("\n\n0. Para sair");
printf("\n\nDigite a opcao: ");
scanf("%d", &op);

if((op<0)||(op>2))
{
printf("Opcao invalida, digite novamente!!!");
getch();
}
else
if(op==1)
{
printf("Digite o numero decimal: ");
scanf("%d",&num);
do
{
resto=num%2;
div=num/2;
num=div;
bin += resto*d;
d*=10;

}while(div>0);

printf("%d",bin);
getch();

}

else
{
printf("Digite o numero binario: ");
scanf("%d",&num);

do
{
dec = dec+(num % 10)*d;
d = d*2;
num = num/10;

}while(num!=0000000000);

printf("%d",dec);
getch();

}

}while(op =! 0);

getch();
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!