Nadesłany przez Tomasz Lubiński, 02 marca 2008 01:00
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_tyg_cs/Dzien.cs:
using System;
// Wyznaczanie dnia tygodnia
// www.algorytm.org
// (c)2008 by Tomasz Lubinski
namespace dzien_tyg_cs
{
/// <summary>
/// Wyznaczanie dnia tygodnia
/// </summary>
class Dzien
{
/// <summary>
/// tablica z nazwami dni tygodnia
/// </summary>
public static string[] tydzien =
{"poniedziałek", "wtorek", "sroda", "czwartek", "piatek", "sobota", "niedziela"};
/// <summary>
/// tablica z liczbą dni od początku roku (nieprzestepnego) dla kolejnych miesiecy
/// </summary>
public static int[] liczbaDni =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
/// <summary>
/// Sprawdza czy podany rok jest przestepny
/// </summary>
/// <param name="rok">rok ktory ma byc sprawdzony</param>
/// <returns>true jezeli podany rok jest przestepny,
/// false w przeciwnym przypadku</returns>
public static bool przestepny(int rok)
{
return ((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0);
}
/// <summary>
/// Dla podanej daty wyznacza dzien tygodnia
/// </summary>
/// <param name="dzien">dzien daty</param>
/// <param name="miesiac">miesiac daty</param>
/// <param name="rok">rok daty</param>
/// <returns>0 - poniedziałek, 1 - wtorek, ... 6 - niedziela</returns>
public static 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) == true))
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;
}
/// <summary>
/// pobiera dane od uzytkownika, oblicza dzien tygodnia.
/// </summary>
[STAThread]
static void Main(string[] args)
{
int m, r, d, wynik;
Console.WriteLine("Podaj dla jakiej daty obliczyc dzien tygodnia.");
Console.WriteLine("Podaj dzien:");
d = int.Parse(Console.ReadLine());
Console.WriteLine("Podaj miesiac:");
m = int.Parse(Console.ReadLine());
Console.WriteLine("Podaj rok:");
r = int.Parse(Console.ReadLine());
wynik = dzienTygodnia(d, m, r);
Console.WriteLine("Dzien tygodnia dla podanej daty to " + tydzien[wynik]);
}
}
}

