Ir para conteúdo

POWERED BY:

Arquivado

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

Thales Rodrigues

Transformação de Base (ActionScript 3.0)

Recommended Posts

Eu gostaria de saber como eu faço transformação de base em ActionScript 3.0, pois estou fazendo uma calculadora e quero fazer um botão que transforme de base decimal para base X ou de base X para base decimal.

 

Ou seja:

Número de Base 10 --> Base Desejada (base X) --> Resultado (Em base X)

Número de Base X --> Base do Número --> Resultado (Em base 10)

 

Exemplos:

 

Base 10 --> Base X:

4 --> 2 --> 100

9 --> 8 --> 11

15 --> 16 --> F

 

Base X --> Base 10:

F --> 16 --> 15

11 --> 8 --> 9

100 --> 2 --> 4

 

Uma função seria o oposto da outra. Eu sei que isso é meio complicado, mas eu estou muito ansioso para terminar minha calculadora e essa é a única função que falta nela.

Obrigado :)

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai funcionar com qualquer base até o fim do alfabeto ou só com as usadas como binário, octal,decimal e hexadecimal?

Fica mais fácil trabalhar com bases que são potência de dois para fazer conversão direta entre elas.

Ou então você pode converter para decimal e para outra base.

 

De qualquer forma fiz uma função que converte um número em base decimal, incluindo decimal com fração, para qualquer outra base de 2 a 16.

E uma função que converte numeros para letras(NtL).

Veja:

function NtL(n):String{
	switch(n){
		case 0:
		return '0';
		break;
		case 1:
		return '1';
		break;
		case 2:
		return '2';
		break;
		case 3:
		return '3';
		break;
		case 4:
		return '4';
		break;
		case 5:
		return '5';
		break;
		case 6:
		return '6';
		break;
		case 7:
		return '7';
		break;
		case 8:
		return '8';
		break;
		case 9:
		return '9';
		break;
		case 10:
		return 'A';
		break;
		case 11:
		return 'B';
		break;
		case 12:
		return 'C';
		break;
		case 13:
		return 'D';
		break;
		case 14:
		return 'E';
		break;
		case 15:
		return 'F';
		break;
		default:
		return "?";
	}
}
function BDX(base:int,numero:Number):String{
	var n:Number = numero;
	var ni:int = Math.floor(numero);
	var nf:String = "";
	var nfsi:String = "";
	var nfsf:String = "";
	var nfs:String = "";
	var resto:int;
	var produto:int;
	n = ni;
	var nfr:Number = numero-ni;
	for(var i=0; i <= 1;i++){
		produto = Math.floor(n/base);
		resto = n%base;
		nfsi = nfsi+NtL(resto);
		if(produto<base){
			i = 1;
			nfsi = nfsi+NtL(produto);
		}else{
			i=0;
		}
		n = produto;
		
		
	}
	//trace("z"+nfsi);
	nfsi = nfsi.split("").reverse().join("");
	nfs = nfsi;
	//parte fracionária
	var limite:int = 10;
	if(nfr !=0){
		n = nfr;
		var pINT:int;
		for(i=0; i <= limite;i++){
			n = n*base;
			pINT = Math.floor(n);
			nfsf = nfsf+NtL(pINT);
			n-=pINT;
			if(n==0){
				i=limite;
			}
		}
		nfs=nfsi+","+nfsf;
	}
	
	
	
	
	
	return nfs;
	}
	
	
	trace(BDX(2,1));
	trace(BDX(2,255));
	trace(BDX(2,256));
	trace(BDX(2,64));
	trace(BDX(2,7));
	trace("FRACIONARIO");
	trace(BDX(2,1.5));
	trace(BDX(2,1.75));
	trace("hexadecimal");
	trace(BDX(16,10));
	trace(BDX(16,16));
	trace(BDX(16,15));
	trace(BDX(16,255));
	trace(BDX(16,256));
	trace(BDX(16,1.5));
	trace(BDX(16,15.7));
	

Conversão de outra base é bem fácil.

 

Precisaria de outra função para converter letra para número.

Ex: F >> 15

 

E o resultado seria o somatrório de cada um desses números pela base elevada à posição.

 

Qualquer coisa diz ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai funcionar com qualquer base até o fim do alfabeto ou só com as usadas como binário, octal,decimal e hexadecimal?

Fica mais fácil trabalhar com bases que são potência de dois para fazer conversão direta entre elas.

Ou então você pode converter para decimal e para outra base.

 

De qualquer forma fiz uma função que converte um número em base decimal, incluindo decimal com fração, para qualquer outra base de 2 a 16.

E uma função que converte numeros para letras(NtL).

Veja:

 

Conversão de outra base é bem fácil.

 

Precisaria de outra função para converter letra para número.

Ex: F >> 15

 

E o resultado seria o somatrório de cada um desses números pela base elevada à posição.

 

Qualquer coisa diz ae.

 

Obrigado!!!

Só estou com uma dúvida na hora de fazer a outra função, como eu faço para detectar a posição de cada dígito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado!!!

Só estou com uma dúvida na hora de fazer a outra função, como eu faço para detectar a posição de cada dígito?

 

Eu tentei por o código na calculadora mas fica dando esse erro:

 

 

Error: Error #1502: Um script foi executado por mais tempo que o período limite padrão de 15 segundos.

at Calculadora_fla::MainTimeline/NtL()

at Calculadora_fla::MainTimeline/BDX()

at Calculadora_fla::MainTimeline/mostrar()

 

Eu percebi que tinha uma variável chamada i mas eu já estava usando uma variável chamada i, então eu substituí por p. Mas mesmo assim continua dando esse erro.

Quando eu uso a função trace funciona mas quando eu tento transferir o resultado para o visor da calculadora dá erro.

 

E além disso por que eu não posso editar o meu post?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função BDX retorna string, o visor recebe número ou string?

Veja se no debug mostra a linha desse erro.

 

É um switch bem simples, esse erro as vezes da em for infinito.

Veja se trocando n na função NtL por outra coisa funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função BDX retorna string, o visor recebe número ou string?

Veja se no debug mostra a linha desse erro.

 

É um switch bem simples, esse erro as vezes da em for infinito.

Veja se trocando n na função NtL por outra coisa funciona.

O visor recebe String.

Eu tentei trocar o n por outra coisa mas continua dando erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cálculo usa Number, campo de texto recebe String.

 

Exemplo:

 

function qualquerCoisa(valor:int):String {
	if(valor < 999) {
		//...
	} else {
		return valor.toString();
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Cálculo usa Number, campo de texto recebe String.

 

Exemplo:

 

function qualquerCoisa(valor:int):String {
	if(valor < 999) {
		//...
	} else {
		return valor.toString();
	}
}

 

Eu já tentei converter o valor para String e mesmo assim dá erro.

 

 

for (p=0; p <= limite; p++)
		{
			q = q * base;
			pINT = Math.floor(q);
			nfsf = nfsf + NtL(pINT);
			q -=  pINT;
			if (q==0)
			{
				p = limite;
			}
		}

 

 

O debug parou na linha 105 (na última linha desse código citado)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro foi na linha 105 ou na função NtL?

 

O debug parou na linha 105 (na última linha desse código citado)

 

Error: Error #1502: Um script foi executado por mais tempo que o período limite padrão de 15 segundos.
at Calculadora_fla::MainTimeline/NtL()
at Calculadora_fla::MainTimeline/BDX()
at Calculadora_fla::MainTimeline/mostrar()

 

 

Tem como dar um trace na função BDX para dar uma olhada nos parâmetros base e numero?

 

trace('b:'+base+'n:'+numero)

 

 

A variavel limite continua ainda com valor 10?

 

A variavel limite é importante para limitar o for.

 

No caso de uma dizima periódica o número não acabaria. Se o número não acabar o for vai ser infinito.

For infinito da esse erro pois como o for nunca vai acabar o script nunca vai terminar de ser execultado.

 

For infinito é a principal causa desse erro.

 

Tem como colocar um trace qualquer dentro do for para verificar quantas vezes é repetido o script antes de dar erro?

 

OBS:

Eu havia respondido ontem, mas não enviou e fiquei sabendo agora que não.

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.