Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Problema al validar enteros

Saludos!

Estoy aprendiendo a programar y tengo un problema bastante elemental con el cual espero me puedan orientar ya que no entiendo porqué no funciona.


Hice una función para validar enteros tal como la que sigue:

Código:
{
Función que lee un valor entrado y lo asigna a una variable entera si el dato
introducido es entero y que devuelve si se ha realizado la asignación.
}
Function esEntero(temp:string; out numero:integer):boolean;
  Var
    error,x:integer;

  Begin
    Val(temp,x,error);
    If error=0 then
      Begin
        numero:=x;
        esEntero:=true;
      end
    else
      esEntero:=false;
  end;
Esta función funciona bien, a no ser que exceda los límites del rango del tipo Integer.

La cuestión es que he probado usando Longint para las variables x y numero pero no entiendo porque no funciona (he leído y releído la ayuda y no encuentro el fallo).

Les adjunto lo que estoy probando:

Código:
{
Función que lee un valor entrado y lo asigna a una variable entera (64bits) si
el dato introducido es entero y que devuelve si se ha realizado la asignación.
}
Function esEntero64(temp:string; out numero:Longint):boolean;
  Var
    x:Longint;
    error:integer;

  Begin
    Val(temp,x,error);
    If error=0 then
      Begin
        numero:=x;
        esEntero64:=true;
      end
    else
      esEntero64:=false;
  end;
Por si el error estuviera a la hora de llamar la función, aunque no creo, la llamo del siguiente modo en consola:

Código:
Var
  temporal:string;
  entero64:Longint;

Begin
  Repeat
    Write(' Introduce un entero: ');
    Readln(temporal);
  until esEntero64(temporal,entero64);
  Writeln(' El numero introducido es: ',entero64);
Readln;
end.
¿Podrían darme alguna sugerencia?
Responder Con Cita
  #2  
Antiguo 05-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No comentas cuál es el fallo. Pero lo que te puedo decir es que LongInt es lo mismo que Integer, al menos para el compilador de 32 bits (desconozco si delphi tiene ya compilador de 64 bits). Existe el tipo de dato Int64 para 64 bits.

// Saludos
Responder Con Cita
  #3  
Antiguo 05-02-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Gracias por el apunte sobre el integer, fallo mío a la hora de consultar mis notas sobre los tipos.

Perdón por no haber dejado claro el fallo. Lo que sucede es que cuando ejecuto el programa principal, cuando el usuario ingresa un número mayor que el máximo de un integer no sale del repeat a pesar de que los tipos utilizados son Int64 (ya los he cambiado) y si no voy mal deberían de poder admitir un número mayor.

¿Quizá sea porque el procedure Val no admite int64?

Aunque de lo siguiente (extraído del help de delphi), entiendo que sí ya que Int64 es un tipo de dato entero ¿no?
Cita:
procedure Val(S; var V; var Code: Integer);

(...)V is an integer-type or real-type variable.(...)
Responder Con Cita
  #4  
Antiguo 05-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Y por que no utilizas la funcion TryStrToInt de la unidad SysUtils para hacer la conversion: ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Valor_En_Entero:Integer;
begin
 if TryStrToInt(Edit1.Text,Valor_En_Entero) then //if tengo exito al convertir
    ShowMessage('Ha sido todo un exito la conversion')
 else ShowMessage('Ha sido un fracaso la conversion');

end;
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #5  
Antiguo 05-02-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Gracias, ¡me ha sido muy útil!

No conocía esa función y hace exactamente lo mismo que la que estaba intentando hacer yo y encima ya viene implementada jeje

Gracias por vuestro tiempo ^^
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al validar DBEdit con ADOQuery mgp2401 Conexión con bases de datos 1 08-01-2010 16:12:39
extraer valores enteros desde un reg varchar y guardarlos en reg enteros Gabichu SQL 0 12-08-2008 18:44:36
problema al validar fecha sargento elias Conexión con bases de datos 11 09-04-2008 20:10:02
Problema al validar fecha lbidi Varios 1 15-08-2005 22:44:55
problema al validar un TField Er_Manué Conexión con bases de datos 2 26-11-2004 17:10:01


La franja horaria es GMT +2. Ahora son las 16:58:33.


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
Copyright 1996-2007 Club Delphi