Bardzo proszę o jakieś wskazówki dotyczące kodu, moim zdaniem jest on trochę kodem spaghetti.
Póki co jego przejrzystość i optymalizacja jest szczytem moich słabych możliwości.
#include <iostream>
using namespace std;
int weekDay(int year, int month, int day);
int main()
{
// Program pobiera date i wyswietla w jaki dzien tygodnia ona wypadla,ma on dzialac od lat 2000 do 2020
int year,month,day;
cout<<"Podaj prosze dzisiejsza date, w podanej kolejnosci:"<<endl;
cout<<"Podaj rok"<<endl;
cin>>year;
cout<<"Podaj miesiac"<<endl;
cin>>month;
cout<<"Podaj dzien"<<endl;
cin>>day;
switch(weekDay(year,month,day))
{
case 1:
{
cout<<"Dzisiaj jest poniedzialek"<<endl;
break;
}
case 2:
{
cout<<"Dzisiaj jest wtorek"<<endl;
break;
}
case 3:
{
cout<<"Dzisiaj jest sroda"<<endl;
break;
}
case 4:
{
cout<<"Dzisiaj jest czwartek"<<endl;
break;
}
case 5:
{
cout<<"Dzisiaj jest piatek"<<endl;
break;
}
case 6:
{
cout<<"Dzisiaj jest sobota"<<endl;
break;
}
case 7:
{
cout<<"Dzisiaj jest niedziela"<<endl;
break;
}
}
return 0;
}
int weekDay(int year, int month, int day)
{
int i = 2000;
int years[2021];
int months[13];
int dzientygodnia=6; // (1 stycznia 2000 roku wypadl w sobote)
for(i=2000; i<=2020; i++) //Wypelniam lata iloscia dni w zaleznosci od tego czy rok byl przestepny czy nie
{
if ( (i%4 == 0 && i%100 != 0) || (i%400 == 0) )
years[i]=366;
else
years[i]=365;
}
// Nie wiedzialem jak to fajnie krocej zrobic, wiec tutaj troche spaghetti,prosze o sugestie
// Tutaj wypelniam miesiace iloscia dni w miesiacu,przy czym rozni sie miesiac months[2] ( luty) w zaleznosci od tego czy rok przestepny
if ( (year%4 == 0 && year%100 != 0) || (year%400 == 0) )
{
int months [13] {0,31,29,31,30,31,30,31,31,30,31,30,31};
}
else
{
int months [13] {0,31,28,31,30,31,30,31,31,30,31,30,31};
}
//Aby zwrocic numer okreslajacy dzien tygodnia licze ile dni uplynelo a potem modulo 7
int ilosc_dni=0;
i = 2000;
for(i=2000; i<year; i++)
{
ilosc_dni+=years[i];
}
i = 0;
for (i=0; i<month; i++)
{
ilosc_dni+=months[i];
}
ilosc_dni+=day-1;
dzientygodnia=(dzientygodnia+ilosc_dni)%7;
if(dzientygodnia==0) dzientygodnia=7;
return dzientygodnia;
}