Ir para conteúdo
Fórum Script Brasil
  • 0

Função Recursiva para Converter Decimal para Binario


Lucas.San.tana

Pergunta

Olá a todos, boa noite! sou novo no forum, e desde já peço desculpas caso essa pergunta já tenha sido respondida em outro tópico.

Bom o caso é o seguinte, estou no II Semestre do curso de Sistemas de informação (Na verdade o semestre nem começou kkkk) entretanto to ainda com um pouco de dificuldade em criar funções recursivas. Eu estava resolvendo umas questões da ultima prova da unidade que eu fiz, e me ocorreu que uma das questões que eu praticamente tinha certeza que estava certa, esta dando a saída errada.

Eu deveria criar uma função recursiva que recebesse um numero decimal e convertesse o mesmo para binário.

meu codigo ficou assim:

 

/* função recebe um numero decimal inteiro positivo e verifica se o numero é menor que 2, caso seja ela ira retornar o valor da variável (0 ou 1),

se o numero não for menor que 2,  ela irá imprimir o valor da variavel mod 2 e retornar de modo recursivo o valor da decimal dividido por 2.

O erro ocorre porque o valor mostrado como resultado fica invertido, por exemplo se o valor  for 1010 (base 2) ele aparece 0101(base 2)

 

*/

int binario (int decimal)
{
    
    if (decimal < 2)
    {
        
        return decimal;
        
    }else {
           
       cout<<decimal%2;     
      return binario(decimal/2);
           
               
          }

 

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Olá, tudo certo!?

Então... 

 

Na codificação decimal-binária o último bit convertido é o mais significativo, são determinados pela divisão de um número inteiro positivo por 2, o resto dessa divisão sucessiva inteira é sempre um bit que cada vez fica mais significativo a medida que progrida a divisão, ou seja, o último bit da conversão é o mais significativo.  O método por função recursiva consiste em continuar a divisão até que o valor do denominador não seja maior que 1, o quociente de cada divisão é o denominador da próxima.

 

Logaritmo D (de conversão decimal-binário)

D0:  Func( num )
D1:      Se 1 MENOR num : Func( num DIV 2 )
D2:      Exibir num MOD 2

 

Editado por britivaldo
Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Lucas.San.tana disse:

Vlw amigo, eu acabei resolvendo esse problema mudando o tipo de saída de inteiro para void. Assim pode mudar a sequência em que os números eram mostrados. Problema resolvido 😉

Mudar a saída não tem relação alguma com a ordem em que os número são mostrados. Como demostrei acima independe da saída.

Link para o comentário
Compartilhar em outros sites

  • 0

Sim eu entendo, o que quis dizer foi que mudando a saída de inteiro para void pude fazer com que meu código mostrasse o resultado correto apenas usando cout ao invés de return. Convenhamos que em programação não existe apenas uma maneira de se resolver um problema. Mas agradeço grandemente tua ajuda e acho que será de utilidade também para futuras consultas de outras pessoas.

Modifiquei apenas as linhas do else chamando a função recursiva antes de mandar imprimir

Link para o comentário
Compartilhar em outros sites

  • 0

 

Resolvi deixar aqui o código

27 minutos atrás, britivaldo disse:

Agora acho que entendi. E Concordo que sim em algum momento outros usuário se guiaram por essa postagem por isso se fazer entender é muitíssimo importante.

 

Obrigado.

 de como resolvi o problema, e mais uma vez mano, vlw pela disponibilidade de ter respondido o tópico.  espero que as duas maneiras abordadas aqui possam ser útil a outros também.

#include <iostream>
using namespace std;

void binarios(int d)
{
	if (d <2 )
	{
		cout << d;
	}else {
		
		binarios(d/2);
		cout << d%2;
		
	} 
}
int main()
{
	
	int n;
	
		//entrada o numero
		cin>>n;
		
		//chamada da função
        binarios(n);
	
	
	
	
	return 0;
}



 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...