Péntek 13

Péntek 13

Péntek 13Sokan szerencsés vagy balszerencsés napnak tartják a péntek tizenharmadikát. Évente 1-2-3 alkalommal megtörténik, hogy a hónap 13. napja péntekre esik (minden vasárnap kezdődő hónapban). A hónap 13. napja valamivel valószínűbben péntekre esik, mint a hét bármely más napja. Átlagosan 212,35 naponként fordul elő péntek 13. Előfordulhat két egymást követő hónapban is, de akár 14 hónap is eltelhet két péntek 13 között.

A nap említése sok helyen előfordult: regényekben, filmekben, híres emberek születése vagy halála is esett péntek 13-ra. Átlag alatti közlekedési baleset szokott előfordulni ezeken a napokon – talán mert az emberek óvatosabbak. Kimutatható összefüggést/korrelációt, „péntek 13 hatást” figyeltek meg a tőzsdén is.

Hasznos lehet, ha írunk egy Java programot, amely néhány egymást követő év esetén listázza a konzolra azokat a hónapokat, amikor 13-a péntekre esik.

Tervezés

Legyen egy listFriday13(year) eljárás, amely a paraméterként átvett évben kiírja azokat a hónapokat a konzolra, amelyekben 13-a péntekre esett/esik. Például: 2017: január, október. A hónapok nevei magyar nyelven jelenjenek meg. Az adott év hónapjain végighaladó ciklus legyen hatékony. Optimalizáljunk a ciklus lépésszámára! A ciklus álljon le, ha már talált 3 hónapot (mivel nem lehet több).

1. megoldás

A megoldást a tematika Tömbök témakörében az alábbiak szerint készíthetjük el. Előismeretek: változók, operátorok, ciklusok, programozási tételek, metódusok, tömbök, String összehasonlítás. Az ismert öröknaptár algoritmusokból implementáljuk az egyiket, például:

A listFriday13v1(year) eljárásban az elemi döntés egyszerű: dayOfWeek(year, month, 13).equals("Friday"). Épít az öröknaptárt megvalósító – saját – szöveget visszaadó függvényre. A függvény az algoritmus szerinti kódok előállításához ( centuryCode, monthCode, dayCode) felhasználja a szökőév ( isLeapYear(year)) függvényt, valamint két – konstansnak is tekinthető – névtelen tömböt ( new int[], new String[]).

2. megoldás

A megoldást a tematika Objektumorientált programozás témakörében az alábbiak szerint készíthetjük el. Felhasználjuk eddigi ismereteinket és a JDK beépített dátumkezelő (tároló, formázó) funkcióit (osztályok, interfészek, konstansok, felsorolások).

A listFriday13v2(year) eljárás a Calendar absztrakt osztály konstansait használja fel az elemi döntéshez: date.get(Calendar.DAY_OF_WEEK)==Calendar.FRIDAY. A dátumot a GregorianCalendar konstruktora példányosítja és figyelni kell a 0-bázisú hónapkezelésre. A dátum formázása során ( dfMonth) beállítjuk a megfelelően paraméterezett ( "hu") Locale típusú objektumot és a hónap hosszú nevét kérjük ( "MMMM"). A metódus generikus listába gyűjti a kiválasztott hónapok nevét, amiket végül a String.join() függvény fűz össze a megjelenítéshez.

Eredmény

A vezérlésben egy ciklus 2017-től 2036-ig szervezve az alábbi eredményt adja:

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java SE szoftverfejlesztő tanfolyam tematikájához kötődik a fentiek szerint: 13-16. óra: Tömbök alkalom, illetve 17-28. óra: Objektumorientált programozás alkalom.

Aki gyakorolna a témához kötődően: írjon olyan Java programot, ami listázza a konzolra a 21. század éveit olyan hónapokba csoportosítva, amikor 13-a péntekre esik. Egy év többször is előfordulhat. Például: január – 2006, 2012, 2017, 2023, 2034, 2040, 2045, 2051, 2062, 2068, 2073, 2079, 2090, 2096. A megoldásokat hallgatóinktól az ILIAS-ra, érdeklődőinktől hozzászólásban várjuk.

Húsvétvasárnap

Húsvétvasárnap

HúsvétvasárnapA nyugati kereszténység húsvétvasárnapja legkorábban március 22-ére, legkésőbb április 25-re esik. Másképpen: a húsvét mozgó ünnep, azaz nem esik az év ugyanazon napjára minden évben. Az első niceai zsinat 325-ben úgy határozott, hogy legyen a keresztény húsvét időpontja a tavaszi napéjegyenlőség utáni első holdtöltét követő vasárnap.

A húsvét kiszámítására a legismertebb algoritmus Gauss módszere. A Java implementációban az easterGauss() függvény által elfogadható év paramétert életszerűen lekorlátoztam 1900-2099-ig terjedő évekre, valamint a vezérlés az aktuális és a rákövetkező 19 évben ír ki eredményt:

Az algoritmus részletes magyarázata alapján könnyen kiegészíthető úgy, hogy tetszőleges évre, illetve különböző naptárakra is működjön.

A kapott eredmények megtekinthetők:

A feladat – a kivételkezeléstől eltekintve – a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlési szerkezetek alkalmához kötődik.

Nemzetközi IT-s nőnap

nemzetközi nőnap logó

nemzetközi nőnap logóA nemzetközi nőnap (március 8.) alkalmából olyan nőkre emlékezünk, akik maradandót alkottak a számítástechnika, informatika, szoftverfejlesztés, programozás területén. A válogatás alapját a Women in computing gyűjtemény adta. A lista természetesen nem teljes, ezért érdemes tovább böngészni a témában. (Aktualizálva: 2020. szeptember 1.)

 

Ada LovelaceAda Lovelace (1815-1852, angol matematikus) leírást készített a Babbage-féle analitikai gépéhez. Valószínűsíthető, hogy ehhez a géphez programokat is készített (pl.: a Bernoulli-számok kiszámításának algoritmusát, 1843-ban), így az első programozónak tekinthető.

 

Edith ClarkeEdith Clarke (1883-1959, amerikai villamosmérnök) feltalálta a Clarke számológépet 1921-ben – 10-szer gyorsabban oldaná meg az egyenleteket a korábbi módszereknél –, amely villamos áramot, feszültséget és impedanciát tartalmazó egyenleteket oldott meg az erőátviteli vezetékekben.

 

Hedy LamarrHedy Lamarr (1914-2000, osztrák feltaláló) torpedók irányítási problémáival foglakozott és zavarásuk ellen kidolgozott egy lyukszalag segítségével működő gyorsan váltakozó frekvenciát az adónál és a vevőnél egyaránt (titkos kommunikációs rendszer, 1940).

 

Joan ClarkeJoan Clarke (1917-1996, angol kriptográfus) bekerült Alan Turing csapatába, ahol matematikusok, kódfejtők és titkos ügynökök dolgoztak azon a II. világháború idején, hogy megfejtsék az akkor használt (többedik generációs) német Enigma gép által küldött titkos üzeneteket.

 

Betty HolbertonBetty Holberton (1917-2001, amerikai számítástechnikus) egyike volt az ENIAC programozóinak 1946-ban. Ez volt az első általános célú elektronikus digitális számítógép. Feltalálta a töréspontokat, amelyeket a számítógépes hibakeresés (debugging) során használunk.

 

Grace Murray HopperGrace Murray Hopper (1906-1992, amerikai matematikus) készítette az első fordítóprogramot (compiler) 1952-ben. Felvázolta a számítógéptől független programozási nyelv ötletét (amiből később megszületett a COBOL 3. generációs programozási nyelv). Neki köszönhetjük a hibakeresés (debugging) kifejezés elterjesztését.

 

Erna Schneider HooverErna Schneider Hoover (1926-, amerikai matematikus) olyan számítógépes telefonos kapcsolási módszert talált fel 1954-ben, amely a call center forgalom nyomon követésével (prioritások meghatározásával) megakadályozta a rendszer túlterhelését.

 

Jean E. SammetJean E. Sammet (1928-2017, amerikai számítástechnikus) az IBM-nél dolgozott és 1962-ben kifejlesztette a FORMAC programozási nyelvet. Tanulmányozta, hogyan lehetne használni programozási nyelvként a korlátozott angolt – mint természetes nyelvet – matematikai programokban.

 

Mary Kenneth KellerMary Kenneth Keller (1913-1985, amerikai számítógép-úttörő) részt vett a BASIC programozási nyelv létrehozásában (1964), számos eljárást és függvényt specifikált. Ő volt az első nő, aki PhD tudományos fokozatot szerzett az informatika területén az USA-ban.

 

Margaret HamiltonMargaret Hamilton (1936-, amerikai számítástechnikus, rendszermérnök) alkotta meg a szoftverfejlesztés fogalmát. Az MIT-n azt a labort vezette, amelyik fedélzeti repülési szoftvert fejlesztett a NASA Apollo űrprogramhoz, a Hold misszióihoz az 1960-as években.

 

Karen Spärck JonesKaren Spärck Jones (1935-2007, brit számítógép-kutató) kidolgozta az IDF koncepciót (inverse document frequency) 1972-ben, amelyen ma is alapszik a keresőmotorok működése. Erősen kampányolt azért, hogy minél több nő foglalkozzon számítástechnikával.

 

Radia PerlmanRadia Perlman (1951-, amerikai programozó és hálózati mérnök) – az „internet anyja” – megalkotta az STP protokollt 1985-ben, amely alapvető a hálózati kommunikáció megvalósításában, ezzel nagymértékben hozzájárult a hálózatok szabványosításához, valamint kifejlesztette a LOGO programozási nyelv gyermekbarát változatát TORTIS néven 1974-ben.

 

Sophie WilsonSophie Wilson (1957-, brit számítógéptudós) megtervezte az Acorn mikroszámítógépet 1979-ben, és kifejlesztette az ARM processzorok első generációjának utasításkészletét 1985-ben. Korunk mobil eszközei szinte kizárólag ARM technológiára épülnek.

 

Roberta WilliamsRoberta Williams (1953-, amerikai videójáték-tervező) az 1980-as években a PC-s játékok tervezésének egyik meghatározó egyénisége. Munkássága a Sierra Entertainment céghez kötődik, ahol az első grafikus kalandjáték, illetve az első színes grafikájú játék is elkészült.

 

Frances AllenFrances Allen (1932-2020, amerikai számítógéptudós) szakterülete a számítógépes fordítóprogramokhoz, program(kód) optimalizáláshoz és párhuzamosításukhoz kötődött az IBM-nél. 2006-ban első nőként kapott Turing-díjat.