Hó elején feladat

Címkék
Hó elején feladat
2020-12-29T08:48:30+01:00
2020-12-29T16:12:44+01:00
2022-12-06T16:25:38+01:00
citizen
Hó elején

Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine.


1900. január elseje hétfői napra esett. Amint az a fenti versből is kiolvasható, április, június, szeptember és november 30 napos hónapok, míg február kivételével az összes többi 31 napos. Februárban viszont csak 28 esős és ragyogó nap van, szökőévekben 29. Szökőévnek tekintünk minden 4-gyel osztható évet, kivéve a századfordulókat (amelyek 100-zal oszthatók), hacsak nem oszthatók 400-zal.

Írjon programot, amely a standard bemenetről állományvégjelig (EOF-ig) soronként egy-egy 20. századra eső évszámot olvas be, azaz 1900 < évszám ≤ 2000!

A programja minden bemeneti sor esetén írjon a standard kimenetre 12 angol napnevet attól függően, hogy az adott évben milyen napokra estek a hónapok első napjai! A napokat egymástól pontosan egy szóköz karakterrel válassza el a sorokon belül! Ügyeljen rá, hogy a 12. nap után közvetlenül soremelés karakterrel zárja a sort!

Az angol napnevek a következők (mellettük a magyar megfelelőik):

Sunday
 – vasárnap

Monday
 – hétfő

Tuesday
 – kedd

Wednesday
 – szerda

Thursday
 – csütörtök

Friday
 – péntek

Saturday
 – szombat

Valaki valami megoldást tud rá?
Mutasd a teljes hozzászólást!

  • Kész megoldást ne várjál, mert a prog.hu nem házifeladat-megoldó portál. Ötleteket tudunk adni.

    Ha ez valami óriási véletlen folytán nem házi feladat, akkor nem kell feltalálni a meleg vizet, hanem használhatod a beépített DateTime struct-ot. Van neki olyan konstruktora, ami évet, hónapot és napot vár, aztán kiolvasod a DayOfWeek tulajdonságát és már kész is vagy, kb. nulla hibalehetőséggel.

    Ha ez házi feladat, akkor a fentit nem fogják elfogadni, mivel túl könnyű és nem tanulsz belőle semmit. Helyette olyan megközelítést próbálnék, ahol a dátumokat egy fix dátum (célszerűen 1900. január 1.) óta eltelt napokra számolnám át. Ha ez az átszámolás megvan, akkor már csak héttel való maradékos osztás kell és megkapod hogy a hét melyik napjára esik az adott dátum. (Na jó, még az is kell hozzá, hogy a választott kezdődátum melyik napra esett.)

    Ahhoz, hogy egy dátumot átszámolj az eltelt napok darabszámára, kelleni fog az egyes hónapok hossza, a február hosszához pedig kelleni fog a szökőévet eldöntő algoritmus, amit a feladatban már leírtak. Ha ezek megvannak, akkor csak addig adogatod össze a hónapok hosszát, amíg el nem éred a kívánt év kívánt hónapját. (Mivel a feladatban kizárólag elsejékkel kell foglalkozni, nem is kell törödni a dátum nap részével, csak az évvel és hónappal.)
    Mutasd a teljes hozzászólást!
  • Január első napja: ((y-1901)*5/4+1)%7,
    ahol 0 a hétfő és 6 a vasárnap.
    A hónapok elsejéi ehhez képest a következő napokkal lesznek elcsúsztatva (+ és modulo 7): +0, +3, +3, +6, +1, +4, +6, +2, +5, +0, +3, +5, kivéve a szökőévek, mert ott még hozzá kell adni plusz egyet márciustól kezdve. Erre is lehetne képletet adni, de egyszerűbb ezeket egy tömbben tárolni.
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd