Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo convertir un número binario al tipo Real (https://www.clubdelphi.com/foros/showthread.php?t=54258)

kbaby 13-03-2008 22:10:10

He ido a comprar el libro y no había ninguno que explicara Delphi... (que mal...). Bueno fui a la biblioteca y me van a pedir uno... "No se el título" pero me han dicho que tiene mas de 1000 páginas así que si tenéis idea de cual puede ser... xD

Que libro mas largo, el más largo que leí fue el de Teo va al Zoo xDDDDDDDDD

Bueno, el programa ya funciona muy bien de binario a decimal :D ahora toca... de decimal a binario perooooooooooooooooooooooooooo tranquilos! Voy a ponerme yo mismo a hacerlo ;) (a intentarlo... no lo conseguire pero... bueno...) xD.

kbaby 13-03-2008 22:18:44

Ya os dije que volvería...

He estado viendo estó de pasar de decimal > binario y lo que llevo de código es:

Código Delphi [-]
  Binario:=strtofloat(edit1.text);
  IF Binario > 1 then
                    begin
                    Division:= Binario div 2;
                    Resto:= Binario mod 2;

Bueno... a lo que voy, necesito una funcion que me repita el proceso hasta que el numero sea mayor que 1. (Para pasar de bin > dec había que dividir entre 2 y quedarse el resto).

Bueno, ese comando es while (esto lo aprendi por mi cuenta). Pero el problema:
Mi lindo profesor no me a hablado de while...

¿Cómo lo uso? ¿Me enseñais?

Gracias :D

ixMike 13-03-2008 22:31:18

While condición do acción

Donde condición puede ser cualquier cosa (true, false, x>5, caption='hola'...)
y acción el código que quieres poner (si es más de una instrucción, debes encerrarlo entre begin-end; )

Tu código sería así:

Código Delphi [-]
Function DecimalToBinario(Decimal: Integer): String;
var
  Resultado: String;
begin
Resultado:='';
While Decimal > 1 do
  begin
    Resultado:=Chr((Decimal mod 2)+48)+Resultado; //Añade delante el último dígito del resto obtenido
    Decimal:= Decimal div 2; //Lo dividimos entre dos para el siguiente paso del bucle
  end;
Resultado:=Chr(Decimal+48)+Resultado; //El último que nos queda
Result:=Resultado;



Creo que funciona. De todas formas, en los enlaces que te pasé ya viene alguno más eficiente ;)


Salu2.


Edito: el método es para números enteros, he tenido una pequeña confusión. Para números decimales la cosa se complica. Estoy investigando. :)

kbaby 13-03-2008 22:53:39

Hola, puse el código y segun él... el binario de 14 sería 100101010011111011001000 y en realidad es 1110.

¿Por qué? xD

Otra cosa, muchas gracias compae xD... y me podrías explicar eso de

Resultado:=Chr((Decimal mod 2)+48)+Resultado; //Añade delante el último dígito del resto obtenido

Resultado:=Chr(Decimal+48)+Resultado; //El último que nos queda

"Las palabras en negrita". ¿Por qué sumas 48? ¿Qué es Chr? :p Ya había mirado la ayuda delphi, pero no tengo ni idea, parece que vuelve a un valor ASCIII o algo así :S

kbaby 13-03-2008 22:54:47

¿Al codigo le falta decirle que decimal es edit1.text? O me lo parece a mi jajajaja :D

kbaby 13-03-2008 22:56:55

Aquí está el código con algunos detalles que faltaba sin importancia:
Código Delphi [-]
var
  Resultado: String;
  decimal: integer;
begin
Resultado:='';
decimal:=strtoint(edit1.text);
While Decimal > 1 do
  begin
    Resultado:=Chr((Decimal mod 2)+48)+Resultado; //Añade delante el último dígito del resto obtenido
    Decimal:= Decimal div 2; //Lo dividimos entre dos para el siguiente paso del bucle
  end;
Resultado:=Chr(Decimal+48)+Resultado; //El último que nos queda
edit2.text:=(resultado);
end;

"Muchas gracias .... de verdad.... una cosita ¿dónde puedo mirar las medias para entrar a la universidad... las notas de corte ?(me interesan las de informática).

ixMike 13-03-2008 23:07:57

Veamos.

El fallo no sé a qué se debe, ahora lo compruebo.

En cuanto a Chr, deberías mirar la ayuda Delphi más detenidamente, está bastante clara ;).

Chr devuelve el carácter del código ASCII que le indiques. El del cero es 48, y el del 1 es 49, ¿entiendes ahora porqué hago la suma?. Recuerda que resultado es un string.

Al código no le faltaba nada, era una función a la que le pasabas un integer y te devolvía el valor binario en un string. Lo que tú has hecho ha sido adaptar a algún evento (un clic supongo) de un botón de tu programa ;)

Aquí tienes cómo se hace para pasar números con coma flotante a binario (e inversa), pero a mano: http://es.geocities.com/jeeesusmeeer...o/binario.html

Para las notas, sólo entra en la página de la universidad a la que quieras acceder, y busca un poco.

Salu2.

kbaby 13-03-2008 23:16:45

Lo del Chr sigo sin entenderlo ... no sé porque se usa... y pasarlo a mano los numeros claro que se :D

kbaby 13-03-2008 23:37:02

¿Cómo puedo poner button con iconitos dentro? Es que estoy leyendo un manual y habla algo de esto:
  • mtIformation
  • mtWarning
  • mtError
  • mtConfirmation
  • mtCustom
Pero vamos... ni idea de como ponerlo y como que quedaría muy mono.

PD: Sigo sin tener idea de porque hay que usar el Chr y porque sumarle 48 ^^



egostar 14-03-2008 00:00:21

Cita:

Empezado por kbaby (Mensaje 273156)
¿Cómo puedo poner button con iconitos dentro? Es que estoy leyendo un manual y habla algo de esto:
  • mtIformation
  • mtWarning
  • mtError
  • mtConfirmation
  • mtCustom
Pero vamos... ni idea de como ponerlo y como que quedaría muy mono.

No puedes colocar esos iconos en los botones porque esos son imagenes para las ventanas de mensajes, por ejemplo cuando usas MessageDlg().

Para colocar botones con iconos debes usar el TBitBtn que está en la paleta Additional en lugar del TButton que imagino estas usando.

Cita:

Empezado por kbaby (Mensaje 273156)
PD: Sigo sin tener idea de porque hay que usar el Chr y porque sumarle 48

Es que si analizas lo que esta haciendo ixMike es que obtiene el residuo de la division Decimal mod 2 y le suma 48 para representar el cero (48) y el uno (49) de la tabla ASCII con la función CHR.

Salud OS

kbaby 14-03-2008 14:53:34

Hasta ahí lo entendía... pero yo digo, eso, aplicado a la "realidad" al papel y lápiz... cómo se hace...?

Gracias a los 2;)


La franja horaria es GMT +2. Ahora son las 10:34:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi