program
program:
Wroce jeszcze do tego programu z wyznaczaniem daty (dla dowolnego roku) przypadajacej w
najblizszy dzien po X−tym dniu danego miesiaca.
Jakby wygladal algorytm dla tego programu?
1) ...
2) ...
3) ...
28 gru 00:18
program:
1) na pewno trzeba uwzględnić przestępność roku w kalendarzu gregoriańskim
2) obliczyć jakim dniem tygodnia jest pierwszy dzień w danym roku czy w miesiącu ?
28 gru 14:57
program:
Czy na cos jeszcze trzeba zwrocic uwage?
Chcialbym sprobowac sam napisac to w kodzie.
28 gru 17:24
program: ?
28 gru 22:36
Basia: kiedyś taki program pisałam (w świętej pamięci pascalu)
załóż sobie jakąś datę początkową np. 01.01.2000 (o ile pamiętam to była niedziela, ale
sprawdź)
bo chyba nie wiemy jakim dniem był 1 stycznia roku 0001 no chyba, że masz jakieś dodatkowe
założenie
potem w zależności od roku wyznacz co było 1 stycznia danego roku (do przodu lub do tyłu) czyli
uwzględniaj te lata przestępne
pamiętaj, że rok jest przestępny ⇔ [(rok podzielny przez 4 i niepodzielny przez 100) lub
(podzielny przez 400)]
a potem dopiero pierwszy dzień szukanego miesiąca
tak chyba jest trochę dłuższy, ale za to bardziej przejrzysty algorytm
28 gru 23:01
program:
Dziekuje.
A jak majac wyznaczony dzien tygodnia podanej daty wyznaczyc najblizsza sobote czerwca po 21
czerwca w podanym roku, ktorego dzien tygodnia znamy?
Czyli np. mam date 23.01.2004, ktory byl piatkiem i jak teraz wyznaczyc najblizsza sobote
czerwca po 21 czerwca w 2004 roku?
29 gru 20:55
Basia:
23 stycznia − piątek to 24 stycznia sobota
policz dni od 25 stycznia do 21 czerwca
(31−24)+29+31+30+31+21 = 7+121+21 = 149
149:7 = 21 reszta 2 czyli 21 czerwca masz poniedziałek
czyli za 5 dni będzie sobota 21+5 = 26 czerwca
29 gru 22:15
program:
Ok. Dziekuje.
A dlaczego mam liczyc od 25 stycznia a nie od 24 stycznia?
29 gru 22:29
Basia:
żeby po doliczeniu do 7 (lub wielokrotności 7) znów trafić na sobotę
trzeba liczyć od niedzieli
n, pon,wt, śr, cz, pi, sobota
29 gru 22:42
program:
Ok.
A jakbym chcial wyznaczyc np. date drugiego poniedzialku maja w 2004 roku wiedzac o tym, ze
23.01.2004 to piatek?
29 gru 22:50
program:
Jest to mozliwe majac takie dane?
30 gru 00:42
Basia:
można tak
zaczynam od piątku
sprawdzam co będzie 1 maja
n = (31−23)+29+31+30 = 8+29+31+30 = 98
98/7 = 14 reszta 0
czyli 1 maja mamy piątek
5+3=1 (mod7)
czyli pierwszy poniedziałek maja to 1+3 czyli 04.05.2004
no to drugi to 4+7 czyli 11 maja
coś w rodzaju takiej pętli
mam piątek czyli a=5
for i=1 to 7
b = a+i
if reszta z dzielenia b przez 7 = 1 mam poniedziałek
i0 = i
jezeli się da "wyskocz" z pętli, a jak nie to trudno
endif
next
do dnia daty dodajesz i0 i to jest pierwszy poniedziałek po tej dacie
drugi to jeszcze + 7
30 gru 12:17
Basia: może być pętla typu "while"
i0=0
while "reszta z dzielenia a+i0 przez 7≠1"
i0=i0+1
end
szukany poniedziałek to 1(1 maja)+i0+7
30 gru 12:54
program:
Ale 1 maja 2004 roku to sobota.
To co jest zle?
31 gru 02:26
Basia : A 23.01 na pewno był piątek? Przeanalizuję to jeszcze raz później ale najpierw sprawdź ten
23.01
31 gru 10:32
Basia : n małe jest źle
Tam jest doliczone do końca kwietnia. Jeszcze +1 jeżeli chcesz mieć 1 maja.
31 gru 10:38
program:
Dziekuje, czyli ten dzien, ktorego dnia tygodnia szukamy musi byc wliczony w te sume.
31 gru 16:20
Basia: Tak.

Owocnego programowania w Nowym Roku
31 gru 18:36
program:
Dziekuje.
31 gru 20:13