Ocena użytkownikóww: ***** / 7
Nadesłany przez Tomasz Lubiński, 19 lutego 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
dw.c:
// Obliczanie daty wielkanocy
// www.algorytm.org
// (c) 2008 by Tomasz Lubinski
#include "stdio.h"
/* Pobierz wartosc A z tabeli lat */
int getA(int rok)
{
if (rok <= 1582)
{
return 15;
}
if (rok <= 1699)
{
return 22;
}
if (rok <= 1899)
{
return 23;
}
if (rok <= 2199)
{
return 24;
}
if (rok <= 2299)
{
return 25;
}
if (rok <= 2399)
{
return 26;
}
if (rok <= 2499)
{
return 25;
}
return 0; /* poza zakresem */
}
/* Pobierz wartosc B z tabeli lat */
int getB(int rok)
{
if (rok <= 1582)
{
return 6;
}
if (rok <= 1699)
{
return 2;
}
if (rok <= 1799)
{
return 3;
}
if (rok <= 1899)
{
return 4;
}
if (rok <= 2099)
{
return 5;
}
if (rok <= 2199)
{
return 6;
}
if (rok <= 2299)
{
return 0;
}
if (rok <= 2499)
{
return 1;
}
return 0; /* poza zakresem */
}
/* oblicz ile dni po 22 marca przypada wielkanoc */
int wielkanoc(int rok)
{
int a, b, c, d, e;
a = rok % 19;
b = rok % 4;
c = rok % 7;
d = (a*19 + getA(rok)) % 30;
e = (2*b + 4*c + 6*d + getB(rok)) % 7;
if ((d == 29 && e == 6) ||
(d == 28 && e == 6))
{
d-=7;
}
return d+e;
}
/* pobierz dane od uzytkownika */
int main()
{
int rok;
int data;
printf("Podaj rok (33-2499)\n");
scanf("%d", &rok);
if ((rok < 33) || (rok > 2499))
{
printf("Podany rok nie jest w zakresie 33-2499.\n");
return 0;
}
data = 22 + wielkanoc(rok);
if (data > 31)
{
printf("Wielkanoc przypada %d kwietnia\n", data%31);
}
else
{
printf("Wielkanoc przypada %d marca\n", data);
}
return 0;
}