Pascal/Turbo Pascal - Ingresar solo numeros

 
Vista:

Ingresar solo numeros

Publicado por daniel (1 intervención) el 13/02/2009 12:10:20
hola, necesito si me pueden ayudar, tengo un campo DNI el cual es Integer y necesito que al dar la opcion de ingresar un DNI solo me deje ingresar caracteres numéricos y no letras. Además, tampoco tiene q dejar ingresar "vacio", o sea dejar en blanco el dni. muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Ingresar solo numeros

Publicado por Willy (177 intervenciones) el 14/02/2009 09:04:27
Hola Daniel.
Espero que esto te ayude.

(* El procedimiento Val Convierte un valor string a su represetacion numerica

Declaracion:
procedure Val(S; var V; var Code: Integer);

donde:

S varible tipo string; debe ser una secuencia de caracteres que
representan un numero

V variable tipo integer o real

Code variable de tipo Integer.
*)

uses crt;
var I, Code: Integer;
Cadena: string;
begin
Repeat
ClrScr;
Write('Ingrese numero: ');

Readln(Cadena);
Val(Cadena, I, Code);
until code = 0;{hasta que no error durante conversion a integer}

Writeln('Valor = ', I);
Writeln('Presione una tecla para salir..');
ReadKey;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ingresar solo numeros

Publicado por Miguel (159 intervenciones) el 14/02/2009 19:16:50
Perdon Daniel, no se si entendi bien. Pero tu quieres que salte un error cuando ingresas una letra o quiere que a medida que estas escribiendo el DNI no te deje escribir letras?...
Y el tema de vacio no lo entiendo por que si lees un integer si o si tenes que ingresar algo. Si pones Readln(dni) (suponiendo que dni sea el integer), si vos apretas enter sin escribir nada sigue esperando que ingreses algo, o hasta si pones un espacio... por eso no entendi lo de vacio...
Pero bueno, supongamos que vos querias que cuando escribas tu dni si este tuviese letras deberia saltar un error.
Bueno eso es facil bajo la directiva $I, es un viejo truco que te salva varias veces. Si ocurre un problema en tiempo de ejecucion, sea por excederte en la capacidad de un arreglo, o superar el maxint, etc (cualquier error que te cerraria el programa) y esta activada esta directiva el programa se va a cerrar, en cambio si la desactivas no lo hara, lo que no quiere decir que el programa va a andar bien, la idea de usar esto es detectar ese error y corregirlo inmediatamente.
Cuando hay un error el programa guarda en una variable llamada IOResult (es un integer) el tipo de error detectado, en un buen libro puedes encontrar esa lista de errores, pero no ahce falta que te la sepas, solo debes saber que cuando no hay error esa variable toma el valor de cero. Esta es una explicación para que entiendas el siguiente codigo.

PROGRAM prueba;
USES
Crt;
VAR
dni : INTEGER;
result : INTEGER;
BEGIN
{$I-}
READLN(dni);
result:=IOResult;
{$I+}
IF (result<>0)OR(dni=0)
THEN
WRITELN('Error, se han ingresado caracteres no numericos o no se ha ingresado ningun DNI');
READKEY;
END.

Yo aca tambien tome como "vacio" si se ponia el DNI 0.

Si no es lo que necesitas explica un poco mejor y seguro que te podemos ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ingresar solo numeros

Publicado por Miguel (159 intervenciones) el 14/02/2009 19:19:41
Otra vez yo, perdon, no lei lo que te puso Willy, esto es lo lindo de la programacion... dos cosas practicamente iguales pero utilizando otro metodo!!! ; )
Una aclaracion del codigo que puse arriba es que se puede aplicar tranquilamente con cualquier ciclo, yo lo hice rapidito asi que quedo medio sencillo!!!!
Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ingresar solo numeros

Publicado por Willy (177 intervenciones) el 14/02/2009 19:42:51
Hola a todos.
Miguel. Tu código está excelente. La simplicidad es lo que el aprendiz necesita para comprender mejor un segmento de código. Eso de la directiva esta muy bueno.
Acabo de aprender algo nuevo aquí hoy.

Un saludo a todos y sigan participando porque ya tenían medio abandonado este foro.

Cuando tengan un problema, no olviden que está la opción de "buscar". Seguro encuentran alguna respuesta a su prolema. Son 11490 notas entre preguntas y respuestas guardadas en este foro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ingresar solo numeros

Publicado por Miguel (159 intervenciones) el 14/02/2009 19:59:53
Esa directiva es maravillosa, te sirve para lo que quieras!!! si me habra salvado jeje..
PD: Te envie un e-mail si tienes tiempo leelo.. Un saludo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar