Witam. Mam za zadanie napisać program, który dla podanej daty (większej od 01.01.1970) pokazuje jaki to jest dzień tygodnia. Aby to zrobić obliczam ilość dni z pełnych lat (zwykłych i przestępnych) i dodaje do tego ilość dni z ostatniego roku. Mój problem pojawia się wtedy kiedy porównuje ilość dni które upłynęły wg mojego programu i stron liczących to samo- mój program zawsze pokazuje trochę za mało dni co przekłada się na podanie złego dnia tygodnia. Stawiam, że błąd jest gdzieś w miejscu gdzie następuje liczenie dni z lat zwykłych i przestępnych. Oto fragment kodu który za to odpowiada:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
for (int i = 1970; i < year; i++)
{
licz_przestepne++;
}
ilosc_latp = licz_przestepne;
ilosc_latz = year - 1970 - licz_przestepne;
year_type = 0;
printf("\nRok jest przestepny. \n\n");
}
else if((year % 4 != 0 && year % 100 == 0) || year % 400 != 0)
{
for (int i = 1970; i < year; i++)
{
licz_zwykle++;
}
ilosc_latz = (licz_zwykle * 3) / 4;
ilosc_latp = year - 1970 - ilosc_latz;
year_type = 1;
printf("\nRok nie jest przestepny. \n\n");
}
Krótka legenda nazw stosowanych:
licz_zwykle/ przestepne - zależności od tego czy rok który podał użytkownik jest przestępny czy zwykły wykonuje się liczenie if lub else if
ilosc-latp/ ilosc_latz - działa podobnie jak to co wyżej, tylko już poza pętlą; odejmowanie w kolejnych linijkach ma na celu posiadanie w osobnych zmiennych ilości lat zwykłych i przestępnych
year_type - tego używam do pokazania kalendarza dla miesiąca, ale z tym sobie poradziłem ;)
A to jest kod który ma za zadanie policzyć ilość tych dni:
int days_since = (ilosc_latz * 365) + (ilosc_latp * 366);
To już funkcja zliczająca ilość dni z roku zaczętego ale nie skończonego:
int more_days = 0;
switch (month)
{
case 1:
more_days = day + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 2:
more_days = day + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 3:
more_days = day + 31 + 28 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 4:
more_days = day + 31 + 28 + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 5:
more_days = day + 31 + 28 + 31 + 30 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 6:
more_days = day + 31 + 28 + 31 + 30 + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 7:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 8:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 9:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 10:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 11:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
case 12:
more_days = day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + days_since;
printf("Ilosc dni od 01.01.1970 to %d \n", more_days);
break;
}
Wg mnie w niej powinno być już wszystko dobrze, bo w poprzednim programie który podawał ilość dni tylko w aktualnym roku działała dobrze.
Jeśli ktoś wie gdzie leży błąd w moim programie byłbym wdzięczny za wszelkie wskazówki