domingo, octubre 02, 2005

Práctica 2 - Calendario

(********************************************* * NOMBRE : #Alejandro # * PRIMER APELLIDO : #XXXX # * SEGUNDO APELLIDO: #XXXXX # * DNI : #XXXXXXXXX # * CLAVE: #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX# *********************************************) MODULE Calendario; (*-- PARTE DECLARATIVA DE LA APLICACIÓN --*) FROM InOut IMPORT WriteString, Write, WriteLn, ReadCard, WriteCard; VAR mes, anno, diasMes, columDia : CARDINAL; PROCEDURE ImprimirLiterales (n : CARDINAL); (*-- PROCEDIMIENTO PARA MOSTRAR LA PRIMERA PARTE DEL CALENDARIO, EJEMPLO: NOVIEMBRE 2005 =========================== LU MA MI JU VI SA DO =========================== TOMA COMO ARGUMENTO EL MES QUE SE QUIERE MOSTRAR --*) PROCEDURE CaracterIgual; (* Este procedimiento puro es sólo para la linea de carácteres '=' *) VAR j : CARDINAL; BEGIN FOR j := 1 TO 27 DO Write ('='); END; END CaracterIgual; CONST espacios = 22; (* Espacios en blanco que restan al descontamos el año *) VAR i, digitos : CARDINAL; BEGIN CASE n OF 1 : WriteString ("ENERO"); digitos := 5; diasMes := 31; 2 : WriteString ("FEBRERO"); digitos := 7; diasMes := 28; 3 : WriteString ("MARZO"); digitos := 5; diasMes := 31; 4 : WriteString ("ABRIL"); digitos := 5; diasMes := 30; 5 : WriteString ("MAYO"); digitos := 4; diasMes := 31; 6 : WriteString ("JUNIO"); digitos := 5; diasMes := 30; 7 : WriteString ("JULIO"); digitos := 5; diasMes := 31; 8 : WriteString ("AGOSTO"); digitos := 6; diasMes := 31; 9 : WriteString ("SEPTIEMBRE"); digitos :=10; diasMes := 30; 10 : WriteString ("OCTUBRE"); digitos := 7; diasMes := 31; 11 : WriteString ("NOVIEMBRE"); digitos := 9; diasMes := 30; 12 : WriteString ("DICIEMBRE"); digitos := 9; diasMes := 31; END; FOR i := digitos TO espacios DO Write (' '); END; WriteCard (anno, 4); WriteLn; CaracterIgual; WriteLn; WriteString ("LU MA MI JU VI SA DO"); WriteLn; CaracterIgual; WriteLn; END ImprimirLiterales; PROCEDURE ImprimirCalendario; (*-- PROCEDIMIENTO PURO QUE IMPRIME LA SEGUNDA PARTE DEL CALENDARIO --*) VAR i, j, puntos : CARDINAL; BEGIN columDia := Zeller (mes, anno); IF columDia = 0 THEN columDia := 7; END; IF mes = 2 THEN IF Bisiesto (anno) THEN diasMes := 29; END; END; CASE columDia - 1 OF 1: WriteString (" . "); 2: WriteString (" . . "); 3: WriteString (" . . . "); 4: WriteString (" . . . . "); 5: WriteString (" . . . . . "); 6: WriteString (" . . . . . . "); ELSE END; FOR i:= 1 TO diasMes DO IF (columDia = 7) AND (i < columdia =" 7)" i =" diasMes)" columdia =" 5" d =" 1;" 4 =" 0)" 100 =" 0)" 400 =" 0)">= 1601) AND (anno <= 3000) AND (mes >=1) AND (mes <= 12) THEN (* Filtro para las condiciones que nos piden *) (*-- IMPRIMIMOS EL CALENDARIO --*) ImprimirLiterales (mes); ImprimirCalendario; END; END Calendario.

No hay comentarios: