Zadanie na informatykę...

0

Witam. Muszę zrobić taki programik w Delphi. Oto polecenie:

Według kalendarza juliańskiego wprowadzonego przez Juliusza Cezara od roku 45 p.n.e., każdy rok nieprzestępny trwał 365 dni, a rok przestępny przypadający dokładnie co 4 lata trwał 366 dni. Ustalenia te spowodowały, że na każde 128 lat pojawiała się różnica jednego dnia pomiędzy tym kalendarzem, a kalendarzem astronomicznym. Aby zlikwidować narastający błąd, w roku 1582 zastąpiono kalendarz juliański kalendarzem gregoriańskim. Nowy kalendarz obowiązuje od 4 października 1582 roku, kiedy po czwartku 4 października 1582 nastąpił piątek 15 października 1582 r. (np. 5 października 1582 nigdy nie było )

Latami przestępnymi w kalendarzu juliańskim były wszystkie te lata, które dzieliły się bez reszty przez 4. Według kalendarza gregoriańskiego latami przestępnymi są te, które dzielą się bez reszty przez 4, z wyjątkiem tych, które dzielą się bez reszty przez 100, a nie dzielą się bez reszty przez 400.
Napisz program, który uwzględniając powyższy opis wyświetli wszystkie daty wypadające w podanym z klawiatury dniu tygodnia w lutym wskazanego roku. Rok powinien być liczbą naturalną z przedziału <1, 2005>.

b) Napisz program który poda nazwę dnia tygodnia. Dane wyjściowe: rok, miesiąc dzień (od 1 stycznia roku 0 do dziś )

Jeśli ktoś spotkał się już z czymś takim, bardzo proszę o pomoc, jakiś link, czy kod ;)

Dzięki.

0

Dla daty od 15 października 1582 r masz funkcję DayOfWeek(data:TDateTime) która zwraca wartości 0..6 gdzie 0 to niedziela a 6 sobota. Pozostałe dni trzeba by już zrobić samemu, chyba że jest coś tam do tego.

0
CONST
 Dow :ARRAY [0..6] OF STRING[15] =
  ('Niedziela',
   'Poniedziałek',
   'Wtorek',
   'Środa',
   'Czwartek',
   'Piątek',
   'Sobota');
{
  dtyg   - oblicza, jaki dzien tygodnia przedstawia data d.m.r
           (0 - niedziela, 1 - poniedzialek, ..., 6 - sobota)
}

FUNCTION dtyg(d, m, r: integer): integer;
VAR
  w: integer;
BEGIN
  IF m>2 THEN m := m-2 ELSE
  BEGIN
    m := m+10;
    r := r-1;
  END;
  w := r DIV 100;
  r := r MOD 100;
  dtyg := (d + (13*m-1) DIV 5 + r  + r DIV 4 + w DIV 4 + 5*w) MOD 7;
END;
// warunek
if ((YYYY = 1582) and (MM = 10) and (DD > 4) and (DD < 15)) then ShowMessage('Takiej daty nie było, bo... Cezar się pierd...');

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