PDA

Ver la Versión Completa : Ecuacion en Javascript a Delphi


jorge1987
24-12-2006, 14:46:54
Bueno, mi problema, es que tengo la siguiente ecuacion en JavaScript, y necesito convertirla a Delphi, hasta ahora, yo creo haberla echo bien, pero resulto que me tira un error de Float, y estoy medio perdido.

Funcion en JScript:

function Encode(str, fld,fld2) {
a=1846
b=1835
str=((a-b)*(str-a)^(str-b)>>a)<<b
if ((str==1737089024) && (fld==5 ) && (fld2==33) ){ alert("Perfecto");}
else {alert("Que lástima por tí");}
}

Funcion Mia:

procedure TForm1.Button1Click(Sender: TObject);
Var
Aux : Real;
suma : Integer;
I : Integer;
A, B : Integer;
Aux2 : Integer;
begin
Aux2 := 0;
A := 1846;
B := 1835;
For I := 11111 To 99999 Do
Begin
Edit1.Text := IntToStr(I);
//Suma := StrToInt(Edit1.Text[1]);
Suma := (StrToInt(Edit1.Text[1])+StrToInt(Edit1.Text[2])+StrToInt(Edit1.Text[3])+StrToInt(Edit1.Text[4])+StrToInt(Edit1.Text[5]));
If Suma = 33 Then
Begin
Try
//Aux := exp((I-b) * ln((a-b)*(I-a)));
Aux := exp((a-b)*(I-a) * ln((I-b)));
Edit1.Text := FloatToStr(Aux);
Edit1.Text := IntToStr(StrToInt(Edit1.Text) Shr A);
//Aux2 := aux Shr a;
//Aux := Shl(Aux2);
Edit1.Text := IntToStr(StrToInt(Edit1.Text) Shl A);
Aux2 := StrToInt(Edit1.Text);
If Aux2 = 1737089024 Then
//exp((I-b) * ln((a-b)*(I-a)))
ListBox1.Items.Add(IntToStr(I));
Except
//ListBox1.Items.Add('no ' + IntToStr(I));
End;
//Aux := (Aux + 1)
End;
End;
// Aux := exp(2 * ln(8));
// Aux := Trunc(Aux);
// Edit1.Text := FloatToStr(aux);

end;

Mi funcion es media precaria, porque intente mil maneras distintas.

Si no se entiende bien lo que hice, diganme, que intento limpiarla.

Saludos.

hector.roma
26-12-2006, 03:22:22
Sin entrar en si tu función es correcta o no, e indicando que lo único que necesitas es convertir la función JScript en Delphi, żpor que no pruebas esto?...


procedure miEncode(str, fld, fld2: integer);
var
a,b: integer;
begin
a:= 1846;
b:= 1835;

str := ((a-b)*((str-a) XOR (str-b)) shr a) shl b;

if ( (str = 1737089024) AND (fld=5 ) AND (fld2=33) ) then
ShowMessage('Perfecto')
else
ShowMessage('Que lástima por tí');
end;


Espero que te sirva o si no háznoslo saber

hector.roma
26-12-2006, 03:41:47
Entrando en tu función...
1.- Tienes un bucle que empieza en 11111 y sumas las 5 primeros cifras del Edit1 de tu form y si esa suma es igual a 33, haces algo... la primera suma que cumple es 15999; es decir, tras 4888 iteraciones tu programa empieza a funcionar.
2.- Cuando tu función empieza a funcionar se encuentras con la función exp(); la cual eleva el número e a la potencia indicada que en este caso, y sólo en la primera iteración alcanza un valor de 1.488.089,54342037 y recordadon que el número e tiene un valor de 2,71 pues resulta que ese número es más de lo que todas las riquezas del mundo juntas en euros y claro al delphi eso le parece mal...
3.- Revisa tu función.

jorge1987
29-12-2006, 17:56:58
Entrando en tu función...
1.- Tienes un bucle que empieza en 11111 y sumas las 5 primeros cifras del Edit1 de tu form y si esa suma es igual a 33, haces algo... la primera suma que cumple es 15999; es decir, tras 4888 iteraciones tu programa empieza a funcionar.
2.- Cuando tu función empieza a funcionar se encuentras con la función exp(); la cual eleva el número e a la potencia indicada que en este caso, y sólo en la primera iteración alcanza un valor de 1.488.089,54342037 y recordadon que el número e tiene un valor de 2,71 pues resulta que ese número es más de lo que todas las riquezas del mundo juntas en euros y claro al delphi eso le parece mal...
3.- Revisa tu función.


Gracias, estoy en ello.

La iteracion, era para no tener que hacer la comprobacion a mano de si estaba funcionando, le puse la iteracion, para que automaticamente me agregue a la lista, cuando la respuesta sea correcta, y no agregue nada en caso contrario.

Osea, quice matar dos pajaros de un tiro, hacer la funcion, y ademas comprobarla.

Gracias por la respuesta.

Saludos.

jorge1987
29-12-2006, 18:31:29
Estube probando tu funcion, y no entiendo por que usaste XOR, el simbolo "^" en Jscript, no significa "Elevado"?

Saludos.