A programozás alapjai I. - 3. kisZh

A VIK Wikiből


Ezen az oldalon gyűjtjük a A programozás alapjai I. tárgy gyakorlatain az elmúlt években előforduló kisZh feladatokat, azok megoldásaival. A feladatok nehézsége iránymutatónak tekinthető, de az egyes félévek időbeosztása eltérhet. Ne ess kétségbe, ha ismeretlen, nehéz, „megoldhatatlan” feladatsort látsz.


A megoldásokról

Szóval hogyan kell tanulni a prog ZH-kra? „Sehogyan.” Ez nem egy „tanulható”, hanem egy „gyakorolható” tárgy.

– Czirkos Zoltán, InfoC tanácsok


Az oldalon nem gyűjtjük a feladatok megoldásait. A kisZh-k eleji beugrók rövidek, általában 10 – 15 sorban megoldhatóak. A programozás nem egy „magolható” tárgy, nincsenek típusfeladatok, s azok megoldásai. A programozás alapjai I., s A programozás alapjai II. tárgyak egy szemléletmódot szeretnének megtanítani, amit a régebbi feladatsorok böngészésével nem, csak azok önálló megoldásával lehet elsajátítani. Kicsit bővebben olvashatsz erről az idézet végén linkelt oldalon.

Amennyiben egy-egy itt látható feladat nehézséget okoz, böngészd át az eddigi előadások anyagát. Ha még mindig nem megy a megoldás, fordulj bátran a felsőbb évesekhez, s a tárgy oktatóihoz, gyakorlatvezetőihez a levlistákon, készséggel fognak segíteni.

További tanulási tippekért olvasd el a tárgy adatlapjának Tippek fejezetét.

Feladatsorok

2015

Sakkfigura

Írj programot, amelyben sakkfigurák pozícióit tárolod sor (1–8), oszlop (1–8) formában! Mindkettő egész szám. Adj meg ehhez saját összetett típust, amelyben a koordináták külön eltárolhatóak!

  • Írj egy függvényt, amely a paraméterként kapott pozíciót kiírja! Az oszlopokat jelöld az ábécé betűivel, 1=a, 2=b...; pl. ha a kapott pozíció a 3. oszlop 6. sor, akkor a kimenet: c6.
  • Írj függvényt, amely visszatér egy billentyűzetről beolvasott pozícióval! A felhasználó a kiírással megegyező formátumban fogja megadni (pl. c6).
  • Írj függvényt, amely két pozíciót kap, és megadja, hogy egy bástya léphet-e az egyik helyről a másikra! (A bástyák csak azonos oszlopon, azonos soron léphetnek. Feltételezhető, hogy nincs útban más figura.)
  • Írj főprogramot, amelyben a megírt függvények használatával beolvasol két pozíciót, kiírod őket, végül pedig szövegesen azt, hogy szabályos lenne-e a lépés egy bástya számára! Pl. „c6 d5” bemenet esetén a kimenet „c6 d5: szabálytalan”.

Adj mindennek szerepe szerinti nevet a programban!

Euró

Az előadáson láthattad, hogy a tizedes törtek a double típusban nem tárolhatók pontosan: pl. a 9,95 érték nem ábrázolható. Írj programot, amely egy banki szoftver része lehet! Ebben a pénzösszegek egész euróit és egész centjeit kell tárolni egy saját összetett típusban.

  • Írj függvényt, amely visszatér egy billentyűzetről beolvasott pénzösszeggel.
  • Írj függvényt, amely paraméterként két pénzösszeget kap, és megadja ezek összegét! 100 cent = 1 euró, a centbe nem kerülhet 99-nél nagyobb érték.
  • Írj függvényt, amely a paraméterként kapott pénzösszeget egész euróra (50 centtől fölfelé) kerekíti, és azt adja vissza!
  • Írj főprogramot, amelyben az előbb megírt függvények használatával beolvasol egy pénzösszeget (a), és kiírod a dupláját (a+a) euróra kerekítve!

Adj mindennek szerepe szerinti nevet a programban!

Koordináta-rendszer

A derékszögű koordinátarendszerben x (vízszintes) és y (függőleges) valós koordináták közösen határoznak meg egy pontot. A programodban ilyenek adatait kell tárolni.

  • Definiálj saját összetett típust, amely egy pont helyét tárolja!
  • Írj függvényt, amely paraméterként egy pontot kap, és értéke a pont origótól mért távolsága (Pitagorasz-tétel)!
  • Írj függvényt, amely kiírja egy pont koordinátáit, pl. 1.2; 3.4!
  • Írj paraméter nélküli függvényt, amely a felhasználótól beolvassa egy pont koordinátáit, és értéke a beolvasott pont!
  • Egészítsd ki mindezt egy főprogrammal, amelyben beolvasod egy pont adatait, aztán kiírod azokat! Utána írd ki az origótól való távolságát is, és végül azt, hogy közelebb van-e az origóhoz, mint 1 egység!

Adj mindennek szerepe szerinti nevet a programban!

Bolygók

Olyan programot kell írnod, amelyben bolygók keringési és forgási idejeit tárolod. Ezek földi nap, illetve óra mértékegységben lesznek megadva, pl. a Mars adatai: keringés: 686,971 földi nap, forgás: 24,6229 óra. Definiálj saját összetett típust, amely egy bolygó ezen adatait tárolja!

  • Írj függvényt, amely visszatér egy bolygó billentyűzetről beolvasott adataival!

Tegyük fel, hogy az emberek 23–25 órás napokhoz (az alvás miatt), a növények pedig 200–700 napos évekhez tudnak alkalmazkodni (az évszakok miatt). *Írj függvényt, amely megadja egy bolygóról, hogy az emberek és a növények számára is lakható-e!

  • Írj függvényt, amely megadja a paraméterként átvett bolygóról, hogy hány napos ott egy évforduló, tehát hány ottani napból áll egy ottani év (keringés/forgás).
  • Írj főprogramot, amely a fent megírt függvényeket használva bekéri egy bolygó adatait, utána megvizsgálja, hogy lakható-e. Ha nem, akkor kiírja, hogy lakhatatlan; ha igen, akkor pedig azt, hogy az ottaniak hány naponta ünneplik a születésnapjukat!

Adj mindennek szerepe szerinti nevet a programban!

2014

Derékszögű

A derékszögű koordinátarendszerben x (vízszintes) és y (függőleges) valós koordináták közösen határoznak meg egy pontot. A programodban ilyenek adatait kell tárolni.

  • Definiálj összetett típust, amely egy pont helyét tárolja!
  • Írj függvényt, amely paraméterként egy pontot kap, és értéke a pont origótól mért távolsága (Pitagorasz-tétel)!
  • Írj függvényt, amely kiírja egy pont koordinátáit!
  • Írj paraméter nélküli függvényt, amely a felhasználótól beolvassa egy pont koordinátáit, és értéke a beolvasott pont!

Egészítsd ki mindezt egy főprogrammal, amelyben beolvasod egy pont adatait, aztán visszaírod azokat a képernyőre! Utána írd ki az origótól való távolságát is, és végül azt, hogy közelebb van-e az origóhoz, mint 1 egység!

GPS

Egy programban GPS koordinátákkal adott földrajzi helyeket kell tárolni. Ez két valós szám: szélesség (-90° = déli sark, 0° = egyenlítő, +90° = északi sark) és hosszúság (-180° = legnyugatabb, 0° Greenwich, +180° = legkeletebb).

  • Definiálj összetett típust, amely egy hely koordinátáit tárolja!
  • Írj függvényt, amely kiírja egy hely koordinátáit!
  • Írj függvényt, amely paraméterként egy helyet kap; értéke igaz, ha az északi féltekén van, amúgy hamis. Írj egy ugyanilyen függvényt, amely a keleti féltekére ad igazat, és a nyugatira hamisat.
  • Írj paraméter nélküli függvényt, amely a felhasználótól beolvas egy koordinátapárt, és értéke a beolvasott hely!

Egészítsd ki mindezt egy főprogrammal, amelyben beolvasod egy hely adatait, utána visszaírod azokat a képernyőre, végül pedig kiírod, hogy az északi vagy a déli, és hogy a keleti vagy a nyugati féltekén van-e!

Lapszabászat

Egy lapszabászatban bútorlapokkal dolgoznak. A lapok szélességét (m), magasságát (m) és vastagságát (mm) jegyzik fel. A 18 mm-nél vékonyabb lapok ára 2800 Ft/m2, a 18 mm-esek és vastagabbak ára 3200 Ft/m2.

  • Definiálj összetett típust, amely egy lap adatait tárolja!
  • Írj függvényt, amely kiírja egy lap adatait!
  • Írj paraméter nélküli függvényt, amely a felhasználótól beolvassa egy lap adatait, és értéke a beolvasott adat!
  • Írj függvényt, amely paraméterként egy lapot kap, értéke pedig a lap ára forintban!

Egészítsd ki mindezt egy főprogrammal, amelyben beolvasod egy lap adatait, utána visszaírod azokat a képernyőre, és kiírod azt is, hogy hány forintba kerül!

BMI

Egy ember testtömeg-indexe a tömege (kg) osztva a testmagasságának (m) négyzetével. Pl. 63,2 kg, 1,71 m esetén a testtömeg-index 63,2/1,712 = 21,64. Átlagos testalkatúnak tekintjük a 18,5 és 25 közötti indexszel rendelkezőket.

  • Definiálj összetett típust, amely egy ember tömegét és magasságát tárolja!
  • Írj függvényt, amely egyetlen paramétereként egy ilyet kap, és visszatérési értéke igaz, ha átlagos testalkatú emberről van szó, amúgy hamis!
  • Írj paraméter nélküli függvényt, amely a felhasználótól beolvassa egy ember adatait, és értéke a beolvasott adatpár!
  • Írj egyparaméterű függvényt, amely kiírja egy ember adatait!

Egészítsd ki mindezt egy főprogrammal, amelyben beolvasod egy ember adatait, és visszaírod azokat a képernyőre! Végül írd ki, hogy a beolvasott adatok alapján átlagos testalkatúnak számít-e, vagy nem!