Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Não consigo atualizar variavel (programa feito em C)

Estou tentando fazer uma calculadora que converte decimal para binario, mas minha variavel nao atualiza. Digito um numero e dou enter e o programa nao prossegue.

#include <stdio.h>

int main(){
    int a;

    printf("Digite o numero para dividir e pressione enter em seguida:\n");
    scanf("%d", &a);

    while(1){

    int resultado = a/2;
    resultado = resultado/2;
    int resto = a % 2;

    //printf("%d", &resto);


    if(resultado < 2){
        printf("O numero binario eh: %d\n", resto);
        break;
    }

    }

}
7 respostas

Opa, o problema é que no seu loop o valor que vc guarda na variável resultado sempre é a/2.. Se a for 20, vai ser sempre 20/2... vc precisa declarar as variáveis fora do loop.

Vinicius, conseguiu resolver teu problema? Tem mais alguma dúvida? Fala pra gente =]

Então, Nikolai, não consegui. Eu queria fazer divisões sucessivas e pegar o resto de cada divisão, para imprimir o número decimal em binário. Mas até agora não consegui. Você tem alguma sugestão?

Vinicius, o problema do seu programa é que você está dividindo o valor digitado 2 vezes.

int resultado = a / 2;  // primeira vez
resultado = resultado / 2; // segunda vez

seguindo a sua condição, qualquer número maior que 7 vai entrar em loop infinito.

Exemplo:

Digitando 8, dividindo pela primeira vez temos o valor 4, e pela segunda vez, o valor 2, como o seu if verifica se o resultado é maior que 2 ele não sai mais do if.

Começa tirando esse código de dentro do loop.

int resultado = a / 2;

Como você está usando o while você precisa fazer a primeira interação fora do loop.

Mas isso já é suficiente pra você resolver o problema do loop infinito.

Jhosef, desse jeito da certo, mas, meu programa não imprime na tela o resto de cada divisão sucessiva. Como posso fazer?

include

int main(){ int a;

printf("Digite o numero para dividir e pressione enter em seguida:\n"); scanf("%d", &a); int resultado = a/2; while(1){

resultado = resultado/2; int resto = resultado % 2;

//printf("%d", &resto);

if(resultado < 2){ printf("O numero binario eh: %d\n", resto); break; }

}

}

solução!

Vinicius, da uma olhada nesse código, só falta acertar uma coisa agora =P

#include <stdio.h>

int main() {
  int num;

  printf("Digite o numero para converter e pressione enter em seguida:\n");
  scanf("%d", &num);

  printf("Valor binário: ");

  while(1) {    
    printf("%d", (num % 2));

    num = num / 2;

    if(num < 2) {
      printf("%d\n\n", (num % 2));
      break;
    }
  }
}

Agora, teria que fazer o programa imprimir o resultado de trás para frente. Mas para contornar essa situação é só avisar no printf("Valor binario (leia da direita para esquerda)\n"); Muito obrigado, Jhosef!