• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

frm

Decimal para Binário

30 mensagens neste tópico

Boas.. :)

É o seguinte, preciso de fazer um programa em c++ usando uma função que me pedindo um numero entre 1 e 1023 me diga qual a sua forma binária... Alguém sabe alguma maneira de resolver isto? É que eu não consigo :? ..

Obrigado...

EDIT: E já agora um que fizesse o contrário, binário para decimal...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Boas.. 8)

É o seguinte, preciso de fazer um programa em c++ usando uma função que me pedindo um numero entre 1 e 1023 me diga qual a sua forma binária... Alguém sabe alguma maneira de resolver isto? É que eu não consigo :? ..

Obrigado...

EDIT: E já agora um que fizesse o contrário, binário para decimal...

Em príncipio ao contrário dá.

Basta isto por exemplo.

#include <iostream>
using namespace std;
int main () {
int valor = 101010101;
cout << dec << valor;
system("Pause");
return 0;
}

EDIT: OK, não deu.... :\

Acho que o conversor vai ter de ser um algoritmo baseado no que é feito à mão para determinar binário através de decimal.

Só que eu não sei como se faz à mão....senão... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por exemplo pra passar de decimal pra binário:

Imaginando que o numero introduzido era 27. Ora bem, 27/2=13 com o resto da divisão a ser igual a 1. Depois divide-se o 13 por 2 que dá 6 com resto 1. Depois divide-se o 6 por dois que dá 3 com resto zero. Depois devide-se o 3 por dois que dá 1 com resto 1.

Então, o número 27 em formato binário é 11011.

Não sei se deu pra entender...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Por exemplo pra passar de decimal pra binário:

Imaginando que o numero introduzido era 27. Ora bem, 27/2=13 com o resto da divisão a ser igual a 1. Depois divide-se o 13 por 2 que dá 6 com resto 1. Depois divide-se o 6 por dois que dá 3 com resto zero. Depois devide-se o 3 por dois que dá 1 com resto 1.

Então, o número 27 em formato binário é 11011.

Não sei se deu pra entender...

Penso que tens aí um raciocínio correcto. Divides sempre o numero que obtens por 2, colocando no numero binário o resto dessa divisão.... :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, o raciocinio já está, falta-me é agora transformar isso num programa, isso é que não consigo :? ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pois, o raciocinio já está, falta-me é agora transformar isso num programa, isso é que não consigo :? ...

Pois...o grande problema da maioria dos programadores iniciantes é transformar os raciocinios na linguagem que pretendem aprender a programar.

Vai por fases: arranja solução para a primeira "pergunta" (neste caso, dividir o numero inserido por dois...) e só depois passas á segunda. Não caias no erro de querer fazer tudo de uma vez.

Não te preocupes com o numero de linhas que o programa ocupa, nem com métodos de boa programação para já. Pensas nisso depois de atingires o objectivo.

Programadores de C++ dêem ideias....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta fazer um ciclo while, dividindo sempre o valor inserido por 2, até este ser 1 ou 0. Depois é so verificares o resto da divisão, se é 0 ou 1, e ir mostrando os caracteres no ecrã, ou 1 ou 0.

Penso que basta isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, isto fiz eu assim às três pancadas...corrijam sff se estivar mal e dêem feedback. :P

#include <iostream>
using namespace std;
void main () {
int valor;
int teste;
int y = 0;
int resultado[2000];
cout << "Insira o valor a converter-> "; cin >> valor;
do {
	teste = (valor % 2);
	valor = (valor / 2);
	resultado[y] = teste;
	++y;
} while(valor > 1);
for (int z; z <= y; ++z)
cout << resultado[z];
cout << endl;
system("Pause");
}

EDIT: Bem, o programa tem umas falhas que não tive tempo de resolver, vou agora tratar disso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pronto, acho que é desta:

#include <iostream.h>
using namespace std;
void main () {
int valor;
int teste;
int y = 0;
int resultado[2000];
cout << "Insira o valor a converter-> "; cin >> valor;
while (valor >= 2) {
	teste = (valor % 2);
	valor /= 2;
	resultado[y] = teste;
	++y;
}
if (valor = 1)
 resultado[y] = 1;
for (int z; z <= y; ++z) 
	cout << resultado[z];
cout << endl;
system("Pause");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vbmaster, eu já corri o teu programa, mas quando insiro o valor a cenverter ele dá erro.. :?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lamento, mas não tenho aqui nenhum IDE para c++.

Pequeno exemplo em java

       int valor = 20;
       int temp = 0;
       byte[] bin = new byte[128];
       String res ="";

       for (int i =0; valor>=2; i++)
       {
           temp = valor % 2;
           bin[i] = new Byte(""+ temp);
           valor = valor / 2;
           res = bin[i] + res;
       }

       res = valor + res;

       System.out.println(res);

Não se esqueçam (para quem segue o ex do vbmaster que no final têm que inverter o calculo.

Espero que ajude

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vbmaster, eu já corri o teu programa, mas quando insiro o valor a cenverter ele dá erro.. :?

se não aparecesse nada e desse logo erro eu diria que era do .h no iostream.

vê lá isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vbmaster, eu já corri o teu programa, mas quando insiro o valor a cenverter ele dá erro.. :?

Qual erro ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Citação
Citação
vbmaster, eu já corri o teu programa, mas quando insiro o valor a cenverter ele dá erro...?

se não aparecesse nada e desse logo erro eu diria que era do .h no iostream.

vê lá isso...

...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê os três pontos?! Eu já meti aí uma imagem do erro que me aparece...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes testar isto?

#include <iostream.h>
void main () {
   int valor =0;
   int teste =0;
   int res[128];

   cout << "dec = "; 
   cin >> valor;
   

   for (int i = 0; valor>=2; i++)
   {
      res[i] = valor % 2;
      valor = valor % 2;
   }
   
   res[i] = valor;

   for (int j=i; j>0; j--)
      cout << res[j];
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Podes testar isto?

Posso, já testei e não está correcto.. Independentemente do numero decimal que eu insira o resultado é sempre um...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Feito e testado (funciona) em Fc3:

#include<stdio.h>

int main()
{
int valor = 0;
int teste = 0;
int res[128];
int i=0;
int j=0;
printf("dec = ");
scanf("%i",&valor);

for(i=0; valor>=2; i++)
{
res[i]=valor%2;
valor = valor/2;
}

res[i] = valor;

for (j =i; j>=0; j--)
	printf ("%i",res[j]);
return 0;
}

Muda os printfs e scanfs para Cout e Cin e fica em c++

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não leves a mal, mas e das frases mais ditas...

ok pronto....mas no meu pc o meu programa funciona.... :|

Eu pelo menos farto-me de a dizer... :P

Quando se diz que Java é portavel.... não é só inter - plataforma... C/C++ tem destas coisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora