P_52_E27-Calcular+siguiente+luna+llena

=__**Calcular siguiente luna llena**__=

Escribir un programa que lea la fecha en que se produce una luna llena y calcule la fecha de la siguiente luna llena

code format="pascal" PROGRAM Siguiente_Luna;

PROCEDURE LeerFecha (VAR iDia, iMes, iAnio : Integer) ; BEGIN Write ('Día: '); Readln (iDia); Write ('Mes: '); Readln (iMes); Write ('Año: '); Readln (iAnio); END ;

PROCEDURE MostrarFecha (iDia, iMes, iAnio : Integer) ; BEGIN IF iDia < 10 THEN Write ('0') ; Write (iDia, '/'); IF iMes < 10 THEN Write ('0') ; Write (iMes, '/'); Write (iAnio, '/') ; END ;

FUNCTION fnboEsBisiesto (iAnio: Integer): Boolean ; BEGIN IF ((iAnio MOD 4 = 0) AND (iAnio MOD 100 <> 0)) OR (iAnio MOD 400 = 0) THEN fnboEsBisiesto:= TRUE ELSE fnboEsBisiesto := FALSE ; END;

FUNCTION fniNumero_Dias (iMes, iAnio: Integer): Integer ; BEGIN CASE iMes OF       1,3,5,7,8,10,12: fniNumero_Dias := 31;

2: IF fnboEsBisiesto (Anio) THEN fniNumero_Dias := 29 ELSE fniNumero_Dias := 28;

4,6,9,11: fniNumero_Dias := 30 ; END ; END;

PROCEDURE SiguienteLunaLlena (VAR iDia, iMes, iAnio: Integer) ; VAR iDias_Mes: Integer; BEGIN iDia := iDia + 28 ; { El ciclo lunar es de 28 días }

iDias_Mes := fniNumero_Dias (Mes, Anio);

IF iDia > Dias_Mes THEN BEGIN iDia := iDia - iDias_Mes; iMes := iMes + 1;

IF iMes = 13 THEN BEGIN iMes := 1; iAnio := iAnio + 1 ; END ; END ; END;

{--- Variables del Programa Principal -} VAR iDia_Luna, iMes_Luna, iAnio_Luna: Integer ;

BEGIN { Programa Principal ---} WriteLn ('Escribe fecha de la última luna llena: '); LeerFecha (iDia_Luna, iMes_Luna, iAnio_Luna) ;

Writeln ('Ultima   luna llena: ') ; MostrarFecha (iDia_Luna, iMes_Luna, iAnio_Luna) ; Writeln ; SiguienteLunaLlena (iDia_Luna, iMes_Luna, iAnio_Luna);

Writeln ('Siguiente luna llena: ') ; MostrarFecha (iDia_Luna, iMes_Luna, iAnio_Luna) ; Writeln ;

Writeln ; ReadLn ; END. code