Validar Fecha

Para validar una fecha, el pseudocódigo debería tener en cuenta lo siguiente: si es que el año no es bisiesto el mes 2 (febrero) no tenga más de 28 días. Que los meses menores a julio y pares no tengan más de 30 días, o que los meses impares superiores a agosto tampoco superen los 30 días. En ningún caso el mes puede tener más de 31 días, el mes no puede ser superior a 12 y el cálculo de bisiesto que hicimos antes sólo es válido desde 1582 (año en que se instaura el calendario gregoriano). Dos ejemplos en Turbo Pascal, el segundo más largo con uso de arrays:

PROGRAM VALIDATE;
{*VALIDATE DATE GIVEN*}
USES
   CRT;
VAR
   D,Y,X:REAL;
   M:
   MES:STRING;
   VAL:BOOLEAN;
BEGIN
     CLRSCR;
     WRITELN(‘Rutina para validar una fecha dada.’);
     WRITELN;
     WRITE(‘Ingrese el número del día (entre 1-31): ‘);
     READLN(D);
     WRITE(‘Ingrese el número del mes (entre 1-12): ‘);
     READLN(M);
     WRITE(‘Ingrese el número del año (superior a 1582): ‘);
     READLN(Y);
     WRITELN;
     WRITELN(‘-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-‘);
     WRITELN;
     X:=FRAC((Y/4)-(Y-100)+(Y/400));
     IF NOT(FRAC(X)=0.0) AND (M=2) AND (D>28) THEN
        WRITELN(‘Fuera de rango: año no bisiesto, no corresponde febrero de 29 días’)
        ELSE IF ((M<=7) AND (FRAC (M/2) = 0.0)  AND (D>30)) OR ((M>=8) AND (FRAC(M/2) <> 0.0) AND (D>30)) THEN
             WRITELN(‘El mes introducido no corresponde con la cantidad de días’)
             ELSE IF ((D<0) OR (D>31)) OR ((M<0) OR (M>12)) OR (Y<1582) THEN
                  WRITELN(‘Cantidad de días errónea, o mes o año fuera de rango’)
     ELSE VAL:=TRUE;
         CASE M OF
         1:MES:=’enero’;
         2:MES:=’febrero’;
         3:MES:=’marzo’;
         4:MES:=’abril’;
         5:MES:=’mayo’;
         6:MES:=’junio’;
         7:MES:=’julio’;
         8:MES:=’agosto’;
         9:MES:=’setiembre’;
         10:MES:=’octubre’;
         11:MES:=’noviembre’;
         12:MES:=’diciembre’;
         END;
     IF (VAL=TRUE) THEN
     WRITELN(‘La fecha introducida es v lida: ‘, D:2:0, (‘ de ‘),  MES, (‘ de ‘),  Y:4:0);
     READKEY;
END.
  

 

PROGRAM VALIDAT2;

{*VALIDATE DATE GIVEN WITH ARRAYS*}

USES

   CRT;

VAR

   A:ARRAY[1..12] OF INTEGER;

   Y,X:REAL;

   D,M:INTEGER;

   MES:STRING;

   VAL:BOOLEAN;

BEGIN

     CLRSCR;

     A[1]:=31;

     A[2]:=29;{*AS LIMIT*}

     A[3]:=31;

     A[4]:=30;

     A[5]:=31;

     A[6]:=30;

     A[7]:=31;

     A[8]:=31;

     A[9]:=30;

     A[10]:=31;

     A[11]:=30;

     A[12]:=31;

     WRITELN(‘Rutina para validar una fecha dada.’);

     WRITELN;

     REPEAT

          WRITE(‘Ingrese el número del día (entre 1-31): ‘);

          READLN(D);

     UNTIL (D>=1) AND (D<=31);

     VAL:=TRUE;

     REPEAT

          WRITE(‘Ingrese el número del mes (entre 1-12): ‘);

          READLN(M);

          IF (M<1) OR (M>12) THEN

             BEGIN

                  WRITELN(‘No corresponde mes ingresado.’);

                  VAL:=FALSE

             END

          ELSE IF (D>A[M]) THEN

             BEGIN

                  WRITELN(‘La cantidad de días no corresponde al mes ingresado’);

                  VAL:=FALSE

             END

          ELSE VAL:=TRUE;

     UNTIL VAL=TRUE;

     REPEAT

          WRITE(‘Ingrese el número del año (superior a 1582): ‘);

          READLN(Y);

     UNTIL (Y>=1582);

     WRITELN;

     WRITELN(‘-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-‘);

     WRITELN;

     IF (M=2) AND (D=29) THEN

        X:=FRAC((Y/4)-(Y-100)+(Y/400));

        IF NOT(FRAC(X)=0.0) THEN

           BEGIN

                WRITELN(‘Fuera de rango: año no bisiesto, no corresponde febrero de 29 días’);

                VAL:=FALSE

           END;

     CASE M OF

     1:MES:=’enero’;

     2:MES:=’febrero’;

     3:MES:=’marzo’;

     4:MES:=’abril’;

     5:MES:=’mayo’;

     6:MES:=’junio’;

     7:MES:=’julio’;

     8:MES:=’agosto’;

     9:MES:=’setiembre’;

     10:MES:=’octubre’;

     11:MES:=’noviembre’;

     12:MES:=’diciembre’;

     END;

     IF (VAL=TRUE) THEN

     WRITELN(‘La fecha introducida es válida: ‘, (D):2, (‘ de ‘),  MES, (‘ de ‘),  Y:4:0);

     READKEY;

END.



     


INTEGER;

 

  • La web del Programador
  • emagister.com
  • Algoritmos y Programación I UBA
  • Turbo Pascal en Jamon del Medio
  •  


    Libros recomendados:

     
     
     
     
     
     
     
     
     
     

     


     


    Programacion en Pascal –
    Joyanes Aguilar Luis
    Editorial: Mc. Graw Hill (España)ISBN:84-481-5041-4Idioma: CastellanoPáginas: 800Peso estimado: 1000 gramos      

     Programacion en Pascal
     
     
     
     
     
     
     
     
     

     



    Esta entrada fue publicada en Turbo Pascal y etiquetada , , , , , , , . Guarda el enlace permanente.

    Una respuesta a Validar Fecha

    1. Jair dijo:

      si gracias

    Deja un comentario

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s