Cześć, jestem początkujący i potrzebuję pomocy bardziej doświadczonych w tej dziedzinie. Nie potrafię znaleźć błędu w programie, który wylicza dzień tygodnia dla podanej daty. Otóż wyświetla jeden dzień do tyłu dla dat z 2014, a dla innych o 2 albo 3 dni wstecz. Czy ktoś wie, gdzie leży problem?
#include <stdio.h>
#include <stdlib.h>
char *dni_tygodnia[7] = {"sobota", "niedziela", "poniedzialek", "wtorek", "sroda", "czwartek", "piatek"};
int dni_mies[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int mies_roku[12];
int sprawdzenie_daty(int d, int m, int r)
{
return (d > 0 && d <= dni_mies[m-1]) && (m >= 1 && m <= 12) && (r >= 1582 && r <= 2999);
}
int rok_przestepny(int r)
{
return (r%400 == 0 || (r%4 == 0 && r%100 != 0));
}
int zlicz_dni()
{
int i;
for(i = 1; i < 12; i++)
{
mies_roku[i] = mies_roku[i-1] + dni_mies[i-1];
}
return i;
}
int liczba_przestepnych(int r)
{
int i;
int przestep = 0;
for(i = 1; i < r; i++)
{
if(rok_przestepny(i))
przestep++;
}
return przestep;
}
int main(int argc, char *argv[])
{
int d, m, r;
printf("Date nalezy wpisac wedlug podanego wzoru: dd.mm.rrrr\n\n");
printf("Podaj date:\n");
scanf("%d %d %d", &d, &m, &r);
if(rok_przestepny(r))
dni_mies[1] = 29;
else
dni_mies[1] = 28;
if(sprawdzenie_daty(d, m, r))
return 0;
zlicz_dni();
printf("%s\n", dni_tygodnia[(d + mies_roku[m-1] + r + liczba_przestepnych(r))%7]);
system("PAUSE");
return 0;
}