Ocena użytkownikóww: ***** / 18
Nadesłany przez Michał Burchardt, 17 marca 2012 13:06
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.
dzien_tygodnia.cpp:
//Wyznaczanie dnia tygodnia na podstawie daty
//Michał Burchardt
//www.algorytm.org
#include <iostream>
#include <string>
using namespace std;
//tablica z nazwami dni tygodnia
string tydzien[] =
{"Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota", "Niedziela"};
//tablica z liczba dni od początku roku (nieprzestepnego) dla kolejnych miesiecy
int liczbaDni[] =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
//1 jezeli podany rok jest przestepny,
//0 w przeciwnym wypadku
int przestepny(int rok) {
return ((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0);
}
//dla podanej daty wyznacza dzien tygodnia
//0 - poniedziałek, 1 - wtorek, ... 6 - niedziela
int dzienTygodnia(int dzien, int miesiac, int rok) {
int dzienRoku;
int yy, c, g;
int wynik;
dzienRoku = dzien + liczbaDni[miesiac-1];
if ((miesiac > 2) && (przestepny(rok) == 1))
dzienRoku++;
yy = (rok - 1) % 100;
c = (rok - 1) - yy;
g = yy + (yy / 4);
wynik = (((((c / 100) % 4) * 5) + g) % 7);
wynik += dzienRoku - 1;
wynik %= 7;
return wynik;
}
int main()
{
int m, r, d, wynik;
cout <<"Podaj dzien: ";
cin >> d;
cout <<"Podaj miesiac: ";
cin >> m;
cout <<"Podaj rok: ";
cin >> r;
wynik = dzienTygodnia(d, m, r);
cout <<endl <<tydzien[wynik]<<endl;
cin.sync();
cin.get();
return 0;
}