Gyakorlat, 4. hét: származtatott típusok
Czirkos Zoltán · 2019.07.24.
Származtatott típusok: tömbök és struktúrák. Összetett adatszerkezetek definíciója és kezelése.
Felkészülés a gyakorlatra:
- A függvényekről, funkcionális dekompozícióról szóló előadásrészlet anyagának megértése.
- A struktúrákról szóló előadásrész anyagának megértése.
Ikerprímeknek nevezzük azokat a prímszám együtteseket, amelyeknél n és n+2 is prím. Az első 3 ilyen pár (3, 5), (5, 7) és (11, 13). Melyik a 60-adik? Határozd meg C programban! A két prím közötti egész számnak van 5-ös számjegye? Határozd meg ezt is!
Használj top-down tervezést, ne duplikáld a prímkereső algoritmust!
Hasonló feladatok
Ha ennek a feladatnak a megoldását a gyakorlaton nehezen értetted meg, vagy nem tudnád önállóan megoldani, a példatárban itt találsz hasonlókat, amiken gyakorolhatsz otthon.
Írjunk programot, amely egy struktúrában időpontot tárol: óra, perc. Írjunk függvényeket ehhez:
ido_kiir(i)
: kiírja az időpontot óra:perc formában.ido_hozzaad(i, p)
: hozzáadp
percet azi
időponthoz, és visszatér az új időponttal. Pl. 15:15 + 45 = 16:00.ido_eltelt(i1, i2)
: megmondja, hány perc telt el a két időpont között, pl. 16:30-15:15 = 75 perc. (A paraméterek sorrendje a kivonásnál megszokott: kisebbítendő, kivonandó.)ido_kivon(i, p)
: kivonp
percet azi
időpontból, és visszatér az új időponttal. Pl. 15:45 - 30 = 15:15.
Hasonló feladatok
Ha ennek, vagy a következő néhány feladatnak a megoldását a gyakorlaton nehezen értetted meg, vagy nem tudnád önállóan megoldani, a példatárban itt találsz hasonlókat, amiken gyakorolhatsz otthon.
Elevenítsük fel a római számok kiírása programot! Ott a számok értéke szerint csökkenő sorrendben haladtunk. Valahogy így:
…
if (szam >= 5) { printf("V"); szam -= 5; }
if (szam >= 4) { printf("IV"); szam -= 4; }
while (szam >= 1) { printf("I"); szam -= 1; }
…
Figyelmesen vizsgálva a problémát rájöhettünk arra, hogy bármelyik feltétel kicserélhető
ciklusra ebben a feladatban. Azért írtunk feltételt a szam>=5
kifejezéshez, mert
tudjuk, hogy legfeljebb csak egyszer fog teljesülni – de akár írhattunk volna ciklust is.
Ha mindegyik helyre ciklus kerül, akkor így néz ki a kód:
…
while (szam >= 5) { printf("V"); szam -= 5; }
while (szam >= 4) { printf("IV"); szam -= 4; }
while (szam >= 1) { printf("I"); szam -= 1; }
…
Ez a sorminta már csak arra vár, hogy ciklust csináljunk belőle. Írjuk át a programot!
Adjunk meg egy Pont
típust, amely kétdimenziós koordinátát (x
, y
) tárol! Írjunk ehhez függvényeket:
tav()
: a paraméterként kapott két pont távolságával tér vissza! (Ehhez Pitagorasz tételét kell használni.)egyenlo()
: megvizsgál két pontot, és megmondja, hogy egybeesnek-e!beolvas()
: beolvassa egy pont koordinátáit a billentyűzetről, és visszatér vele!
Ha ezek megvannak, az eddigiek használatával oldjuk meg az alábbi feladatot:
![]()
Egy gazda szeretné körbekeríteni a telkét drótkerítéssel. Írj programot, amely kiszámítja, hogy mennyi kerítésre lesz szüksége! A program kérje egymás után a kerítésoszlopok koordinátáit (x, y koordinátapárok), számítsa ki az aktuális és az előző oszlop távolságát, és összegezze a távolságokat! Az összegzést addig folytassa, amíg a megadott koordináták nem egyeznek az elsőként megadott koordinátapárral, vagyis míg vissza nem ér a kezdőoszlophoz!
Ehhez célszerű egy változóba följegyezni a kezdőpontot, azután pedig két további, pont típusú változóval dolgozni: az egyik tárolja az új pont adatait, a másik pedig mindig az eggyel előzőt.