Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leohsmedeiros

[Resolvido] conversao de base 10 pra base 16

Recommended Posts

Sou inexperiente ainda.. e estou aprendendo POO.. e preciso escrever um metodo q converta um numero de base 10 para base 16... nao estou conseguindo de jeito nenhum.. procurei em varios forums mas nao achei.. entao acabei me cadastrando nesse pra ve se alguem poderia me ajudar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro colega...

 

Se você se cadastrou aqui por que queria a sua lição de casa feita, sinto informar, mas veio ao lugar errado.

Ja para converssão de bases, isso é um assunto mais matemático do que de programação.

 

Como mencionou POO, acredito que queira implementar isso em C++, certo?

Escreva algum código, pesquise sobre o assunto e volte com dúvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procurou em fóruns? Estranho, porque p/ procurar em fóruns precisa ir no google:

 

Decimal hexadecimal conversion :http://en.wikipedia.org/wiki/Hexadecimal

Decimal hexadecimal conversão: http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos

Sistema numerico esadecimale conversione: http://it.wikipedia.org/wiki/Sistema_numerico_esadecimale

Système hexadécimal: http://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... to impressionado com a rapidez com q vcs me responderam.. achei q demoraria mais.. gostei mtoo daqui..

enfim.. desculpem.. eu q me expressei mal.. eu fui no google.. e encontrei como converter base decimal pra hexa.. mas matematicamente.. eu procurava encontrar em forma de algoritmo..

e eu qria uma soluçao pra compara com a q eu fiz.. pq eu fiz um do-while q fez um laço infinito... compilou mas deu erro na hora q eu executei.. bom mas eu vo coloca oq eu fiz aqui... talvez assim vcs vejam o erro e possam me da uma força...

std::string NumerosNaturais::mudarBase16(){
	int resto;
	int numero = num; // num foi o nome q eu dei ao atributo da classe.. q é um numero natural..
	std::string conversao = "";
	if(numero<=15){
		switch(numero){
		case 0:conversao+="0";
		case 1:conversao+="1";
		case 2:conversao+="2";
		case 3:conversao+="3";
		case 4:conversao+="4";
		case 5:conversao+="5";
		case 6:conversao+="6";
		case 7:conversao+="7";
		case 8:conversao+="8";
		case 9:conversao+="9";
		case 10:conversao+="A";
		case 11:conversao+="B";
		case 12:conversao+="C";
		case 13:conversao+="D";
		case 14:conversao+="E";
		case 15:conversao+="F";
		}
		return conversao;
	}
	do{
		resto = numero%16;
		switch(resto){
		case 0:conversao="0"+conversao;
		case 1:conversao="1"+conversao;
		case 2:conversao="2"+conversao;
		case 3:conversao="3"+conversao;
		case 4:conversao="4"+conversao;
		case 5:conversao="5"+conversao;
		case 6:conversao="6"+conversao;
		case 7:conversao="7"+conversao;
		case 8:conversao="8"+conversao;
		case 9:conversao="9"+conversao;
		case 10:conversao="A"+conversao;
		case 11:conversao="B"+conversao;
		case 12:conversao="C"+conversao;
		case 13:conversao="D"+conversao;
		case 14:conversao="E"+conversao;
		case 15:conversao="F"+conversao;
		}

		numero /=16;
	}while(resto>=0);

	return conversao;
}

ahhh vo aproveita e tirar mais algumas duvidas.. se por acaso o usuario digita-se um numero mtoo grande pro tipo int? por exemplo um numero natural de 8 ou mais digitos.. daria erro nao é? seria uma soluçao entao sobrecarregar esse metodo pra fazer o msm com um tipo long int ou long long int?

Compartilhar este post


Link para o post
Compartilhar em outros sites
mas matematicamente.. eu procurava encontrar em forma de algoritmo..

 

Algoritmo não é uma forma de alguma coisa. É uma sequência de instruções p/ fazer algo.

 

Por que você está duplicando código?

 

Não precisa usar sobrecarga de funções p/ fazer isso.

 

 

string toHex(unsigned long int a) {
unsigned long int tmp = a;
unsigned long int quoc, rest;
const int divisor = 16;
string hex = "";
char repr;

do {
quoc = tmp / divisor;
rest = tmp % divisor;

switch(rest) {
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	repr = rest+48;
	break;
	case 10:
	repr = 'A';
	break;
	case 11:
	repr = 'B';
	break;
	case 12:
	repr = 'C';
	break;
	case 13:
	repr = 'D';
	break;
	case 14:
	repr = 'E';
	break;
	case 15:
	repr = 'F';
}

hex.insert(0,1,repr);
tmp = quoc;
} while(quoc > 0);

return hex;
}

 

A cascata de case pode ser substituída por case 0 ... 9 no GCC.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm.. é verdade neh nao tinha necessidade de duplica-lo... mas eu fiz pq pensei.. caso o numero digitado fosse de 0 até 15... entraria no primeiro if e ja sairia o resultado de 0 a F.. senao ele ia calculando e fazendo a atribuiçao na variavel "conversao"..

no caso do insert q você usou.. se eu colocasse no case 10 por exemplo.. case 10: repr = 'A' + repr; break; .. daria certo tbm?

vlw ae pela força..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.