Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por isrnick,

Posts recomendados

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;}
Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Solução
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
Link para o comentário
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.

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...

@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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...