A feladvány megfejtése

2022-04-21
Előző IT posztunkban egy feladványt hoztunk annak szemléltetésére, hogy mivel is jár egy programozói feladatmegközelítés mielőtt a tényleges technikai munkavégzésre sor kerülne. Íme a megoldás.

Írásainkat olyan, az informatika iránt érdeklődőknek szánjuk, akik egyelőre még szinte semmit vagy csak nagyon keveset tudnak az IT, weboldal készítés, internet, hálózatok, programozás, stb. világáról. Az általunk használt kifejezések és magyarázatok a nem szakmabelieknek szólnak. Cserébe közérthetően szeretnénk bemutatni az informatika különböző területeit és fogalmait.

***

Múlt heti posztunkban bemutatott kis feladványunkban arra kértünk titeket, hogy számítsátok ki, hogy mikor ér a téglát szállító teherautó a megrendelő házához. Nem csak egy óra/perc meghatározásra kértünk titeket, hanem egy olyan "képlet", "sablon" felvázolására is, amivel a feladat akkor is megoldható, ha egy-egy elem megváltozik. A feladvánnyal célunk az volt, hogy egy kreált példával némileg személtessük, hogy mivel is jár egy programozói feladatmegközelítés mielőtt a tényleges technikai munkavégzésre sor kerülne. A példafeladat megoldásának felfedése előtt hadd ejtsünk néhány szót a gondolkodás fontosságáról.


Milyen típusú gondolkodás szükséges a programozáshoz?

A programozói gondolkodáshoz nem kell magas szintű matematikai alapismeretekkel és készségekkel rendelkezni. Amire viszont szükség van, az nem más, mint logika és jó elemzőkészség. Egy jó programozó képes a feladatot elemeire bontani, a józan paraszti észre (is) hagyatkozva alaposan végiggondolni a helyzetet, és az elérendő célt mindvégig szem előtt tartva végül előállni a jó megoldással. Mielőtt tehát bármiféle konkrét technikai tudáshoz nyúlna, első lépésként a józan gondolkodás képességét kell használni.


Megfejtés

A feladat lényegében nem bonyolult. Matematikai műveleteket tekintve csak összeadás alkalmazandó és az is csak 100-as számkörön belül.

Néhány apró logikai csavar van csak benne.

1. Tudjuk, hogy a teherautó körpályán mozog és körönként mindig csak egy téglát tud felvenni. Azt is tudjuk, hogy 5 téglát kell kiszállítania. Tévedés lenne azonban rögtön rávágni, hogy akkor bizony 5 kört tesz meg. Az indulási ponttól fél kört tesz meg, hogy az elsőt felvehesse a gyárban, majd egy teljes kört, hogy a másodikat, aztán még egyet, hogy a harmadikat, még egyet, hogy a negyediket és még egy utolsót, hogy az ötödik is a platóra kerüljön és azzal ugyebár már indulhat is a megrendelőhöz. A körök számát tekintve tehát 4 teljes és egy fél kört kell megtennie.

2. Szintén tudjuk az adatlistából, hogy 1 teljes kör megtételéhez szükséges idő 10 perc. Vicces azonban, hogy 10 perces kört sose fut a teherautó, ennek se dőljünk be.

Az első fél kört (még tégla nélkül) 5 perc alatt teszi meg.
Aztán az első téglával a platón tesz egy 11 perces kört.
Aztán az első és második téglával a platón tesz egy 12 perces kört.
Aztán az első, második és harmadik téglával a platón tesz egy 13 perces kört.
Aztán az első, második, harmadik és negyedik téglával a platón tesz egy 14 perces kört.
Ekkor felveszi az ötödik téglát és már indul is a megrendelő házához, amely út megtételéhez 15 percre van szükség.

Ez mindösszesen 70 perc.

A helyes válasz: Mivel reggel 8-kor indult a teherautó, az érkezés ideje reggel 9 óra 10 perc.

Ezzel megtudtuk ezen konkrét eset megfejtését, adott megrendelt tégla számmal és adott megrendelői távolsággal. Most vonatkoztassunk el! Hogy néz ki az általános "képlet", ami alapján nekiállhat a programozó az ügyintézőket segítő, a menetidőt kalkuláló szoftver kifejlesztésének?

Változók, amelyek az alábbi értékeket kapják:

1 kör alapideje (tK) = 10 (perc)
Téglák száma (nT) = 5 (db)
Gyártól az út ideje a megrendelőhöz (tM) = 15 (perc)

A fenti változókat felhasználva a "képlet" szavakkal:

tK/2
+
{
Amíg nT < 5, addig:
tK = (tK+1) (vagyis 11 perc + addig adunk hozzá 1 percet a tK-hoz újra és újra, amíg a téglák száma el nem éri az 5-öt (az nT értékét) // Ez valójában egy ún. “ciklus”.
}
+
tM

A konkrét számokkal:
5 + 11 + 12 + 13 + 14 + 15 = 70 (perc)


Reméljük, érdekesnek találtátok a feladatot.

Ha érdekel benneteket a programozás, nézzétek meg IT képzéseinket: Junior Java backend fejlesztő, Junior frontend fejlesztő, Junior szoftvertesztelő