Nadesłany przez Nikodem Solarz, 04 lutego 2013 12:29
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
dzien_tygodnia.rb:
#====================================================== #**Implementacja algorytmu sprawdzania dnia tygodnia na #**podstawie roku,miesiąca i dnia #**Gotowy program obliczający #**Narzew #**04.02.2013 #**www.algorytm.org #====================================================== #====================================================== #**Metoda pomocnicza #====================================================== def jest_rokiem_przestepnym(x) return true if x%4==0 and !(x%100==0) return true if x%400==0 return false end #====================================================== #**Metoda właściwa #====================================================== $week_table = [0,31,59,90,120,151,181,212,243,273,304,334] # Tablica dni roku $mday = [31,29,31,30,31,30,31,31,30,31,30,31] # Tablica ilości dni w miesiącu (dla roku przestępnego) def dzien_tygodnia(x,y,z) m = y m = 12 if m > 12 r = z d = x d = 1 if d <= 0 d = $mday[m-1] if d > $mday[m-1] d = 28 if m == 2 and d == 29 and !(jest_rokiem_przestepnym(z)) yy = (r-1)%100 c = (r-1)-yy g = yy + yy/4 firstday = (((((c/100)%4)*5)+g)%7) yearday = $week_table[m-1] + d if m >= 3 and jest_rokiem_przestepnym(r) yearday += 1 end weekday = (firstday+yearday-1)%7 return (weekday+1) end #====================================================== #**Metody pomocnicze (opcjonalne) #====================================================== def dayname(x) case x.to_i when 1 then return "Poniedzialek" when 2 then return "Wtorek" when 3 then return "Sroda" when 4 then return "Czwartek" when 5 then return "Piatek" when 6 then return "Sobota" when 7 then return "Niedziela" else return "" end end def plday(x) case x.to_i when 1 then return "poniedzialek" when 2 then return "wtorek" when 3 then return "srode" when 4 then return "czwartek" when 5 then return "piatek" when 6 then return "sobote" when 7 then return "niedziele" else return "" end end def monthname(x) case x.to_i when 1 then return "Styczen" when 2 then return "Luty" when 3 then return "Marzec" when 4 then return "Kwiecien" when 5 then return "Maj" when 6 then return "Czerwiec" when 7 then return "Lipiec" when 8 then return "Sierpien" when 9 then return "Wrzesien" when 10 then return "Pazdziernik" when 11 then return "Listopad" when 12 then return "Grudzien" else return "" end end def plmonth(x) case x.to_i when 1 then return "stycznia" when 2 then return "lutego" when 3 then return "marca" when 4 then return "kwietnia" when 5 then return "maja" when 6 then return "czerwca" when 7 then return "lipca" when 8 then return "sierpnia" when 9 then return "wrzesnia" when 10 then return "pazdziernika" when 11 then return "listopada" when 12 then return "grudnia" else return "" end end #====================================================== #**Gotowy program #====================================================== begin s = "======================================================\n" print s print "**Program do obliczania dnia tygodnia.\n" print "**04.02.2013\n" print "**Nikodem Solarz alias Narzew\n" print s print s print "Podaj dzien.\n" print s x = gets.chomp! print s print "Podaj miesiac.\n" print s y = gets.chomp! print s print "Podaj rok.\n" print s z = gets.chomp! x = x.to_i y = y.to_i z = z.to_i x = 1 if x <= 0 y = 1 if y <= 0 y = 12 if y > 12 x = $mday[y-1] if x > $mday[y-1] x = 28 if y == 2 and x == 29 and !(jest_rokiem_przestepnym(z)) res = dzien_tygodnia(x.to_f,y.to_f,z.to_f) yday = $week_table[y-1] + x if y >= 3 and jest_rokiem_przestepnym(z) yday += 1 end print s print "#{x} #{plmonth(y)} #{z} roku wypada w #{plday(res)}\nJest to #{yday} dzien roku.\n" print s $stdin.gets end