martes, 21 de noviembre de 2006

Codigo para encontrar primer dia del año en pascal

Bueno ya q me dejaron hacer un calendario en pascal y para ubicar el primer dia del año tuve q usar la conguencia d zeller , pero ya q la congruencia d zeller solo encuentra los dias desde los 1753 en adelante por una modificacion q hubo en el calendario tube que usar otro metodo para encotrar el dia . rango año 1400 en adelante.

aqui dejo la formula para la congruencia d zellers

Z:= (700 + ((26*MES) -2) DIV 10 + DIA + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;

usaremos esta parte para encontrar si el año es bisiesto o no lo es

((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0)

aqui les dejo el codigo

PROGRAM ZELLER;

{ MoYo }

USES CRT;

VAR


Y, Z, A, B, C, M : INTEGER ;


{ N, J, O, P, R, Q, S : INTEGER; }

BEGIN

CLRSCR;


REPEAT

WRITE ('THE YEAR (1400 .. 2600):'); READLN (Y);
WRITELN;


UNTIL (Y > 1400) AND (Y <>=3) THEN

A:= 1-2;
B:= Y MOD 100;
C:= Y DIV 100;

Z:= (700 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;

{ this part is the same of gettin the data for Z

N:= 26*A;
J:= B DIV 4;
O:= C DIV 4;
P:= 2*C;
R:= N-2;
Q:= R DIV 10;
S:= 700+Q+D+B+D+J+O-P;
Z:= S MOD 7; }


IF Y = 1400 THEN

BEGIN

Z := 5;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;
{*****************************************************************}

IF (Y >= 1401) AND (Y <= 1500) THEN BEGIN Z := (702 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


END;

END;



{******************************************************************}

IF (Y >= 1501) AND (Y <= 1700) THEN BEGIN Z := (703 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


END;

END;

{*********************************************************}


IF (Y >= 1701) AND (Y <= 1751) THEN BEGIN Z := (704 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;



END;

END;

{********************************************************}

IF Y = 1748 THEN
BEGIN

Z:= 6 ;


CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;


{********************************************************}

IF Y = 1752 THEN
BEGIN

Z:= 4 ;


CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;

{*************************************************************}

IF (Y >= 1753) AND (Y <= 2600) THEN BEGIN { BEGIN LEAPYEAR } IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN

{ IF ((Y MOD 4) = 0)
THEN
WRITELN ('THE YEAR IS A LEAP YEAR')
ELSE
BEGIN
IF ((Y MOD 100) <> 0)
THEN
WRITELN ('THE YEAR IS NOT A LEAP YEAR');
END; }

{ END LEAPYEAR }

{ PRINT DAYS }

Z:= Z - 1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


{ END PRINT DAYS }


WRITELN;

END;

END;

END;

READKEY

END.

hay otras formas mas faciles d encontrar el dia pero yo lo hice d esta forma y salio largo el proceso.

 

Visitante número:
ContactosPensionesTiendasCampingPracticas