Wyznaczanie dnia tygodnia na podstawie daty

0

Witam.

Piszę program taki jak w temacie.

Możecie mi powiedzieć co robię nie tak?

int main()
{
int rok, miesiac, dzien, ile_przestepnych, przestepnosc, przestepny;
int ile_dni, nazwa_dnia, k;

int tablica[12]={0,31,59,90,120,151,181,212,243,273,304,334};

char *dni[]={"Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota", "Niedziela"};

cout<<"Podaj rok:"<<endl;
cin>>rok;
cout<<"Podaj miesiac:"<<endl;
cin>>miesiac;
cout<<"Podaj dzien:"<<endl;
cin>>dzien;

if((rok%4 == 0  &&  rok%100 != 0) || rok%400 == 0) {
	przestepnosc=1;
} else { przestepnosc=0; }

k=0;
for(int l=1; l<rok; l++) {
	if((l%4==0  &&  l%100!=0) || l%400 == 0) {
		k=k+1;
	}
}

cout << "lat przestepnych bylo: " << k << endl;

if(przestepnosc==1 && miesiac>=2) { tablica[miesiac-1]=tablica[miesiac-1]+1; }

ile_dni=((((rok-k)*365) + (k)*366) + tablica[miesiac-1] + dzien); // ilosc wszystkich dni

nazwa_dnia=ile_dni%7;


cout << dni[nazwa_dnia-1];

system ("pause");

} 

Gdzie popełniam błąd?

0

ile_dni, to ilość dni od kiedy? Jeśli ktoś poda rok=1,miesiac=1,dzien=1, to Twój wzór obliczy 366. Ponieważ roku 0 nie ma, to jest to ilość dni od początku roku -1. Wiesz jaki był dzień tygodnia 1 stycznia w roku 1pne?. Licz w drugą stronę, tzn. licz ilość dni między podaną datą, a jakąś datą ustaloną datą (np. 1.1.2012) dla której znasz dzień tygodnia.

0

Nie, problem jest inny 1.1.1 był poniedziałek.

Błąd jest w tej linijce gdzie liczysz ilość dni. np jesli liczysz dla 2012 to ty najpierw dodajesz 2012 lat, a powiniwenes 2011 i do tego dodajesz dni.
A poza tym jesli masz rok przestepny to do każdego miesiaca w tablicy musisz dodać jeden dzien, nie tylko do lutego.

Po wyliczeniu przestepności:
rok--;

i do tego w tym przestepnym przesuwanie

0

Problemów jest więcej:
Nie ma znaczenia jaki był dzień tygodnia 1.1.1, bo program nie liczy ilości dni od tego właśnie dnia.
Jeżeli program chce liczyć ilość dni od daty w starożytności, to musi uwzględnić reformę gregoriańską, przed reformą była inna zasada ustalania przestępności. We wcześniejszym kalendarzu juliańskim panował duży bałagan w ustalaniu lat przestępnych. http://pl.wikipedia.org/wiki/Kalendarz_julia%C5%84ski

0

Proponuję użyć istniejących, sprawdzonych wzorów, np. wyliczyć Julian Day i podzielić przez 7.

0 użytkowników online, w tym zalogowanych: 0, gości: 0