Ir ao conteúdo
  • Cadastre-se
Matheus Veloso

RESOLVIDO algoritmo que transforme numero inteiro em binario em C++ como fazer funcionar

Recommended Posts

Preciso fazer um algoritmo que transforme numero inteiro em binario,

eu fiz esse ai, so que ele deveria imprimir os resultados (REST) de tras pra frente.

Alguem tem uma solução?

#include <iostream>using namespace std;int main() { int NUM,REST;    cout<<"\n Digite o numero:";    cin>>NUM;    while (NUM>0)    {        REST = NUM%2;cout<<REST;        NUM = NUM/2;    }    return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, lembro que fiz esse exercício uma vez na faculdade... hoje eu não tenho mais prática com a linguagem, mas pra imprimir de traz pra frente você precisa carregar um array e só então imprimí-lo.

 

De qualquer forma acho melhor esperar por outros colegas que certamente terão uma resposta mais prática do que a minha :P

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você precisa armazenar em uma variável o número binário, e para posicionar o dígito na posição correta basta usar um multiplicador que comece com valor 1 e que seja aumentado em 1 ordem de grandeza a cada ciclo, ou seja, seja multiplicado por 10 a cada ciclo, para fazer o deslocamento correto do dígito binário. E aí imprime o binário após obter o número binário completo.

 

Deste modo:

#include <iostream>using namespace std;int main() { int NUM,REST,NUMBIN,MULTI;    cout<<"\n Digite o numero:";    cin>>NUM;    NUMBIN = 0;    MULTI = 1;    while (NUM>0)    {        REST = NUM%2;        NUMBIN = NUMBIN + REST * MULTI;        NUM = NUM/2;        MULTI = MULTI*10;    }    cout<<NUMBIN;    return 0;}

Edit: Correção das variáveis com nomes diferentes (todos os MULT para MULTI)...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, ( só um erro: tem variavel MULTI e MULT ai).

só não entendi porque que, ir multiplicando o resto por 10, vai mudar a ordem dos números.

 

(desculpa estou no começo do primeiro período da facul :/)

 

Por exemplo o numero 11 em binário é 1011, no meu prog imprimia 1101.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos usar seu exemplo:

 

11 % 2 = 1

11 / 2 = 5

 

5 % 2 = 1

5 / 2 = 2

 

2 % 2 = 0

2 / 2 = 1

 

1 % 2 = 1

1 / 2 = 0

 

Se você imprimir logo após calcular o resto, ele vai imprimir os dígitos no prompt primeiro 1, depois 1, depois 0 e por fim 1, ou seja sai o número binário ao contrário, que não é o que desejamos.

 

 

O que precisamos é colocar os dígitos no casa/sequência certa... Mas como fazer isso?

 

Uma possibilidade seria gerar uma número inteiro que represente o número binário desejado e imprimi-lo, neste exemplo o número seria 1011 (mil e onze), que é representação do número decimal 11 em binário. Então vamos ver as casas do número desejado neste exemplo:

casas  4 3 2 1       | | | |número 1 0 1 1

Queremos que o primeiro dígito fique na casa 1, que é a casa das unidades. Que o segundo dígito fique na casa 2, ou seja na casa das dezenas. Que o terceiro fique na casa 3, a casa das centenas, e assim por diante...

 

Então seja Dn o enésimo dígito binário, logo temos que:

 

Número inteiro que representa um número binário (com 4 dígitos) = D4 * 1000 + D3 * 100 + D2 * 10 + D1 * 1

= D4 * 10 * 10 * 10 + D3 * 10 * 10 + D2 * 10 + D1 * 1

= D4 * 103 + D3 * 102 + D2 * 101 + D1 * 100

( Generalizando: Representação = {SOMATÓRIA n } [ Dn * 10 (n-1) ] )

 

Então apenas deslocamos cada novo dígito calculado para a esquerda em uma casa aumentando o multiplicador em uma ordem de magnitude (= x10) a cada execução do ciclo, e então somamos aos anteriores, para obter a representação do número binário.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde

 

Sou o Alfredo. Por favor me ajudem. tenho um trabalho sobre multiplicador binario, mas nao encontro materia de concreto, e tenho que entregar o trabalho dia 18 de 07 de 15. SOCORRRRRRRRRRRRRRRRRRRROO!!!!!!!!!!!!!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fredo antonio

Amigo, post seu problema como professor passou em sala de aula de preferência em um novo topico so seu, pois geralmente quando vocês vem aqui embusca de solucoes faceis sempre tem uma ou mais restricoes de implementacao.

Outra coisa, vou logo adianta-te; os colegas membros geralmente sao bem duros com alunos relaxados, portanto paciencia e tente aproveitar o maximo das dicas.

Boa Sorte!

Tapatalk Mobile

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×