Ir al contenido


Foto

[RESUELTO] Conversiones binarias y strings


  • Por favor identifícate para responder
28 respuestas en este tema

#21 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 agosto 2011 - 02:03

FGarcia, La función _shl que publiqué funciona correctamente. La modificación de la que expones tiene un error.



delphi
  1. fltValue := value * 2;


eso dará siempre el mismo resultado y no potencias de 2.

Debes hacer algo como esto:


delphi
  1. function tForm1._shl(Value:integer; Despl: integer): integer;
  2. var
  3.   j: integer;
  4. begin
  5.  
  6.   for j := 1 to Despl do
  7.     begin
  8.       Value := Value * 2;
  9.       Memo2.Lines.Add(IntToStr(Value));
  10.     end;
  11.   result := Value;
  12. end;



Otro detalle de menos importancia, no es necesario que esa función pertenezca a la clase tForm1 o a otra, puede ser una función de propósito general.

Saludos.

  • 0

#22 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 agosto 2011 - 03:29

Si lo prefieres puedes hacer uso de la potenciación:


delphi
  1. function _shl(Value, Despl: integer): integer;
  2. begin
  3.   Result:= Ceil(Value*Power(2, Despl));
  4. end;



Pero en este caso yo prefiero el uso de un buque que vaya multiplicando por 2. Recuerda que desplazar un bit a la izquierda es lo mismo que multiplicar por 2, así que multiplicaremos por 2 tantas veces como bits queramos desplazar.

Saludos.

  • 0

#23 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 08:34

FGarcia,


delphi
  1.   for j := 1 to Despl do
  2.     begin
  3.       Value := Value * 2;
  4.     [b]Memo2.Lines.Add(IntToStr(Value));[/b]
  5.     end;
  6.   result := Value;
  7. end;



Otro detalle de menos importancia, [b]no es necesario que esa función pertenezca a la clase tForm1[b] o a otra, puede ser una función de propósito general.

Saludos.


De hecho estaban declaradas como funciones generales, pero al colocar el memo para monitorear  [ TForm1.Memo1.Lines.Add() ] me generaba un error de "metodo de clase" o algo asi, para no andar averiguando que pasaba lo que hice fue declararla en TForm1
  • 0

#24 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 08:38

Una imagen dice mas que mil palabras:


DelphiSHL es la imagen correcta usando SHL de Delphi.
_SHL es el resultado usando la función declarada _SHL.
Base1_SHL es la imagen con las modificación de la base sugerida por egostar.



Archivos adjuntos


  • 0

#25 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 09:18

Viste mi último post ?

Lo he ejecutado y sale correctamente (te adjunto la imagen del resultado), al final es lo que escafandra te ha comentado, no estas utilizando bien la función _shl().

Salud OS

Archivos adjuntos


  • 0

#26 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 10:01


al final es lo que escafandra te ha comentado, no estas utilizando bien la función _shl().

Salud OS


Efectivamente, el error estaba en que en la declaracion de la funcion _shl tiene un parametro llamado Value que es el valor que se va a desplazar n veces (Despl) yo estaba aplicando al reves los valores.

He estado probando diferentes valores y parece que todo esta funcionando correctamente.

Probe tambien la modificacion del case y los if y funcionan bien.

Nuevamente agradeciendo su ayuda. Creo que lo podemos dar por RESUELTO
  • 0

#27 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 agosto 2011 - 11:06

... Creo que lo podemos dar por RESUELTO



Pues haz los honores.  :cheesy:




Saludos.
  • 0

#28 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 12:28

         

<:o) <:o) <:o) <:o) <:o) <:o) <:o) <:o) (b) (b) (b) (b) (b) (b)


Pues no encontré como editar el primer mensaje solo me aparece la leyenda de "Citar"
  • 0

#29 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 agosto 2011 - 12:41

...Si per para dar por resuelto un tema debes editar el primer mensaje y poner el prefijo [RESUELTO]


:smiley:




Saludos.
  • 0




IP.Board spam blocked by CleanTalk.