Feladat: számoljuk ki, hogy hány nap van az adott hónapban és évben
Van néhány dolog, amit tudnunk kell a naptárról, hogy képesek legyünk megoldani a problémát-
· a január, a március, a május, a július, az augusztus, az október és a december 31 naposak,
· az április, a június, a szeptember és a november 30 naposak,
· a február 28 napos, kivéve szökőévben, amikor 29 napos.
Hogyan döntjük el, hogy melyik év a szökőév? Ha az év
· osztható 4-el,
· osztható 400-al,
· de nem osztható 100-al (kivéve a 2000-es év)
az szökőév.
Így szökőév 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020.
Nem szökőévek: 1700, 1800, 1900, 2100, és 2200. Szökőévek az alábbi esztendők: 1600, 2000 és 2400.
A Gergely-naptárban minden 400 évre 97 szökőév jut.
31. ábra
Szintaxis:
namespace ConsoleApplication19
{
class
Program
{
static
void Main(string[]
args)
{
System.Console.WriteLine("Adjon
meg egy évszámot: pl. 2012");
string
évString = System.Console.ReadLine();
int
év = System.Convert.ToInt16(évString);
System.Console.Wri
teLine("Adjon meg egy hónapot: pl.
8");
string
hónapString = System.Console.ReadLine();
byte
hónap = System.Convert.ToByte(hónapString);
int
napokSzáma;
switch
(hónap)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
napokSzáma = 31;
break;
case 4:
case 6:
case 9:
case 11:
napokSzáma = 30;
break;
case 2:
if (((év % 4 == 0) && !(év % 100 == 0)) ||
(év % 400 == 0))
{
napokSzáma =
29;
}
else
{
napokSzáma =
28;
}
break;
default:
napokSzáma = 0;
break;
}
System.Console.WriteLine("Napok
száma = " + napokSzáma);
}
}
}
Ahhoz, hogy teljes mértékben megértsük a forráskódot, vessünk egy pillantást először a beolvasásra: a konvertálásnál a hónapnál elegendő a byte-ra konvertálás, míg az évnél a 16 biten ábrázolt egész számba férünk bele kényelmessen, de az igazán érdekes feladat a szökőévek kiválasztása:
if (((year % 4 == 0) && !(year % 100 == 0))|| (year % 400 == 0))
Azaz az elégazásoknál ismertetett módon, az igazságtábla alapján kell elkészíteni a komplex logikai kifejezésünket.