Ir ao conteúdo

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


Ir à solução Resolvido por isrnick,

Posts recomendados

Postado

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;}
Postado

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

  • Solução
Postado
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
Postado

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.

Postado

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
  • 4 meses depois...
Postado

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!!!!!!!!!!!!!!!!!!!!

Postado

@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

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!