algorytm.org

Implementacja w Ruby



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie dnia tygodnia - Implementacja w Ruby
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
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
Dodaj komentarz