Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   programa en lazarus (https://www.clubdelphi.com/foros/showthread.php?t=66628)

cuteprincess 04-03-2010 05:50:54

programa en lazarus
 
hola estoi aprendiendo este lenguaje y necesito hacer un programa que convierta de decimal a binario este es mi codigo empezado solo que no c declarar un arreglo y como recorrerlo

a := decimal.Text;
if(a > 255)then
a := b;
else
Application.MessageBox(introduce un numero menor a 255);

arturom 04-03-2010 08:45:59

Hola,
suponiendo que la variable a sea un entero debes usar esta función para convertir el número a entero:

Código Delphi [-]
a := StrToInt( decimal.Text );

A continuación usa esta para pasar de entero a binario:
Código Delphi [-]
Function IntToBin ( entero: LongInt; Digitos: integer=8): string;
begin
result := StringOfChar ( '0', Digits ) ;
while entero > 0 do begin
if ( entero and 1 ) = 1 then
result [ digitos ] := '1';
dec ( digitos ) ;
entero := entero shr 1;
end;
end;

Esta función está sacada de aquí

Ñuño Martínez 04-03-2010 09:08:40

Cita:

Empezado por cuteprincess (Mensaje 355560)
(... ) no c declarar un arreglo y como recorrerlo


Hola cuteprincess.

Además de lo comentado por arturom, te voy a explicar cómo crear y recorrer una lista (array).

El siguiente código crea una lista con 10 elementos, les asigna un número a cada uno y después los escribe en pantalla. Para probarlo, debes decirle a Delphi que es un programa de consola ("console project"):

Código Delphi [-]
PROGRAM PruebaLista;
{$APPTYPE CONSOLE}

VAR
(* Aquí declaramos la lista.  Cuenta desde 1 hasta 10. *)
   ListaNumeros: ARRAY [1..10] OF INTEGER;
(* Este es un contador para el bucle. *)
   Ndx: INTEGER;

BEGIN
(* Primero, preguntamos diez números. *)
   FOR Ndx := 1 TO 10 DO
   BEGIN
      Write ('Introduce el número ', Ndx, ': ');
      ReadLn (ListaNumeros[Ndx]);
   END;
(* Ahora los escribe. *)
   Write ('Los números introducidos son: ');
(* Primero, del uno al ocho... *)
   FOR Ndx := 1 TO 8 DO
      Write (ListaNumeros[Ndx], ', ');
(* Y ahora el nueve y el diez. *)
   WriteLn (ListaNumeros[9], ' y ', ListaNumeros[10]);
(* Finalmente esperamos a que el usuario pulse una tecla. *)
   WriteLn ('Pulse cualquier tecla para terminar.');
   ReadLn;
END.

Y ya sabes, si tienes alguna duda, busca o pregunta. :)

cuteprincess 05-03-2010 04:07:28

conversion de decimal a binario
 
hola antes k nada muxas grax x ayudarm y tomar su tiempo, m surgio otra duda este es mi programa pero m marca un error en en la division x k m dice k son incompatibles los tipos, tambien no c si este bien en como concatene el vector, ojala puedan ayudarm grax

procedure TForm2.Button1Click(Sender: TObject);
var
a:integer;
b:integer;
x:integer;
d:integer;
r :array [1..8] of Integer;
begin
a:= StrToInt( decimal.Text);
if(a < 255)then
for x:= 1 TO 8 DO
begin
b := a;
d := a / 2;
r[x]:= b % 2;
a:= d;
end
ShowMessage('EL NUMERO BINARIO ES: '&r[8]&r[7]&r[6]&r[5]&r[4]&r[3]&r[2]&r[1]);
else
ShowMessage('EL NUMERO ES MAYOR A 254');
end;

Ñuño Martínez 08-03-2010 10:16:15

Eso es porque el resultado de una división siempre es un número fraccionario, y no puedes asignar un número fraccionario a una variable entera ya que se pierde precisión (exactitud en el resultado). Por esto se dice que Pascal es "estricto".

Hay dos posibles soluciones:
  1. Redondear el resultado usando las funciones TRUNC, CEIL, etc.
  2. Utilizar la división de enteros (operador DIV), que divide dos enteros y devuelve únicamente la parte entera.

Utilizar una u otra depende de qué tipo de resultado necesitas. El operador DIV es mucho más rápido pero menos preciso que dividir con el operador "normal" (/) y luego redondear.


La franja horaria es GMT +2. Ahora son las 23:03:17.

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