Jump to content
Sign in to follow this  
frm

Decimal para Binário

Recommended Posts

frm

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

Share this post


Link to post
Share on other sites
vbmaster
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

Share this post


Link to post
Share on other sites
frm

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

Share this post


Link to post
Share on other sites
deathseeker25
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

Share this post


Link to post
Share on other sites
frm

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

Share this post


Link to post
Share on other sites
deathseeker25
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....

Share this post


Link to post
Share on other sites
vbmaster

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.

Share this post


Link to post
Share on other sites
vbmaster

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");
}

Share this post


Link to post
Share on other sites
ouvi_dizer

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

Share this post


Link to post
Share on other sites
vbmaster
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...

Share this post


Link to post
Share on other sites
ouvi_dizer
vbmaster, eu já corri o teu programa, mas quando insiro o valor a cenverter ele dá erro.. :?

Qual erro ?

Share this post


Link to post
Share on other sites
vbmaster
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...

...

Share this post


Link to post
Share on other sites
ouvi_dizer

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

Share this post


Link to post
Share on other sites
frm
Podes testar isto?

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.