Programación General > Pascal
validacion captura de datos
(1/1)
eduardoremix:
Hola tengo una duda, hize una agenda telefonica en pascal y esta para mi casi perfecta lo unico que me falta es validar que cuando el usuario tenga que introducir un numero telefonico( ej. 04141234567) o numero cedula (ej. 12345678) no pueda introducir letras o caracteres ya que el programa se saldria.
este es el procedure que tengo:
procedure llenar_contacto(var p:contacto);
BEGIN
writeln('INGRESE UN NOMBRE');
readln(p.nombre);
writeln('INGRESE APELLIDO');
readln(p.apellido);
writeln('INGRESE N# DE CEDULA');===--------
readln(p.cedula);--------------------------------- aqui es donde quisiera validar la captura, p.telefono_casa y p.telefono_movil
writeln('INGRESE TELEFONO DE CASA');-------- son de tipo rango( rango es una variable que cree en type
readln(p.telefono_casa);--------------------------/ rango=0..9999999999;) p.cedula es de tipo longint.
writeln('INGRESE TELEFONO MOVIL');-----------/
readln(p.telefono_movil);-----------------------/
END;
Tambien pense en declararlos como string pero entonces no quedaria bien porque el usuario podria introducir cualquier cosa. Gracias de antemano :good:
droezva:
Hola que tal, pues ya tenía rato que no programaba en Pascal pero me acorde de algunas cosillas!!!
te dejo un ejemplo de validación que yo utilizaba.
Este ejemplo es muy sencillo nada mas esta validado para capturar los digitos, la tecla de retroceso y el enter para indicar que terminamos de ingresar el numero, cabe mencionar que no saldra de la captura de numero hasta que se capture aunque sea un digito. Esta claro que se puede mejorar mucho más. pero bueno creo que te puede servir.
--- Código: Pascal --- uses crt; function leerNumero(longitud: integer): string;var numero : string; tecla : char; i,x,y : integer;begin x := whereX; y := whereY; numero := ''; i := 1; repeat tecla := readKey; case tecla of '0'..'9' : {Teclas del 0 al 9} if i <= longitud then begin numero := numero + tecla; i := i + 1; end; chr(8) : { Tecla de retroceso para borrar el ultimo digito} if i > 1 then begin i := i - 1; numero[i] := ' '; gotoxy(x,y); write(numero); numero := copy(numero,1,i-1); end end; gotoxy(x,y); write(numero); until ( tecla = chr(13) ) and ( length(numero) > 0 ); leerNumero := numero;end; var numeroTxt : string[20]; numeroLong : longInt; estado : integer;begin clrscr; write('Ingrese un numero maximo de 20 digitos: '); numeroTxt := leerNumero(20); writeln; writeln('Usted ingreso: ',numeroTxt); {Conversion del Texto a Entero} val(numeroTxt,numeroLong, estado); writeln('El valor desde la variable longInt: ',numeroLong); readKey;end.
Espero que te sirva. :)
DriverOp:
Mi solución es que uses el procedimiento val() para convertir cadenas en tipos enteros o reales.
--- Código: Pascal --- var Cad: string; Numero, C: integer;...beginrepeatWrite('Ingrese un número: ');ReadLn(Cad);Val(Cad, Numero, C);if C > 0 then WriteLn('Dato erróneo.');until C = 0;WriteLn('El número ingresado fue: ',Numero);
epayan:
mira en esta liga tengo una uileria, tal vez encuentres lo que estas buscando o parte de la solucion que podrias adaptarla a tus necesidades, aun asi esta abierto el codigo
puedes utilizar una funcion llamada EditaLongInt y adaptarla a tus necesidades
viewtopic.php?f=34&t=40724
eduardoremix:
Muchas gracias por las respuestas ya por fin esta completa mi agenda. Saludoss :good:
Navegación
Ir a la versión completa