P_44_E_8-Comprobar+si+una+fecha+es+correcta

=__**Comprobación de si una fecha es correcta**__=

Programa que lee una fecha e indica mediante un mensaje si es correcta o no

code format="pascal" PROGRAM P_44_E_8 ;

FUNCTION fnboEsBisiesto (iAnyo : Integer) : Boolean ; VAR boDivisiblePor_4, boDivisiblePor_100, boDivisiblePor_400 : Boolean ; BEGIN boDivisiblePor_4   := (iAnyo MOD 4)   = 0  ; boDivisiblePor_100 := (iAnyo MOD 100) = 0  ; boDivisiblePor_400 := (iAnyo MOD 400) = 0  ;

IF boDivisiblePor_400 THEN fnboEsBisiesto := TRUE ELSE IF boDivisiblePor_4 AND NOT boDivisiblePor_100 THEN fnboEsBisiesto := TRUE ELSE fnboEsBisiesto := FALSE ; END ;

FUNCTION fnbyCalcularDiasDelMes (byMes : Byte ; iAnyo : Integer) : Byte ; VAR iDiasDelMes : Integer ; BEGIN CASE byMes OF   1, 3, 5, 7, 8, 10, 12 :  iDiasDelMes := 31 ; 4, 6, 9, 11 : iDiasDelMes := 30 ; 2 :                          IF fnboEsBisiesto ( iAnyo ) THEN iDiasDelMes := 29 ELSE iDiasDelMes := 28 END ; fnbyCalcularDiasDelMes := iDiasDelMes ; END ;

PROCEDURE LeerFecha (VAR byDia, byMes : Byte ; VAR iAnyo : Integer); BEGIN Write ('Dia: ') ; ReadLn (byDia) ;

Write ('Mes: ') ; ReadLn (byMes) ;

Write ('Año: ') ; ReadLn (iAnyo) ; END ;

FUNCTION fnbyVerErrorFecha (byDia, byMes: Byte; iAnyo : Integer) : Byte ; {       0 : No hay error 1 : Error en el día 2 : Error en el mes } VAR byError, byDiasDelMes : Byte ; BEGIN IF (byMes < 1) OR (12 < byMes) THEN byError := 2 ELSE BEGIN byDiasDelMes := fnbyCalcularDiasDelMes (byMes, iAnyo) ; IF (byDiasDelMes <= byDia) AND (byDia <= byDiasDelMes) THEN byError := 0 ELSE byError := 1 END ; fnbyVerErrorFecha := byError ; END ;

VAR { Declaración de variables del programa principal ---} byDia, byMes, byErrorFecha : Byte; iAnyo                     : Integer ;

BEGIN {-- Programa principal } Writeln ('Escribe una fecha') ; LeerFecha (byDia, byMes, iAnyo) ;

byErrorFecha := fnbyVerErrorFecha (byDia, byMes, iAnyo) ;

WriteLn ; CASE byErrorFecha OF       0 :  Write ('Fecha CORRECTA') ; 1 : Write ('ERROR: mes correcto, dia incorrecto') ; 2 : Write ('ERROR al menos, el mes no es correcto ') END ;

WriteLn ; ReadLn ; END. { FIN del PROGRAMA } code