Feladatok


A függvényekről…

A függvények modularizációs programozói eszközök. Fő előnyei: egy modult csak egyszer kell implementálni, függetlenül attól, hogy hány helyen használjuk, ami a módosítást és kódújrahasznosítást könnyíti, a függvény által használt lokális segédváltozók memóriafoglalásai a függvény lefutása után felszabadulnak és a program main függvénye nagyrészt rövid és áttekinthető függvényhívások szekvenciájává válik, valamint egyszerűen megvalósíthatóak a segítségükkel olyan rekurziót kívánó algoritmusok, melyek implementálása egyébként rendkívül bonyolult lenne.

1.  Készítsünk programot, ami tökéletes számokat ír ki standard kimenetre, billentyűleütésig! (megoldás)

A tökéletes szám –e vizsgálatot egy logikai értékkel visszatérő függvény határozza meg, melynek specifikációja: bool tokszam(const int x);

Szükséges utasítások:

[visszat.ért] [fgv.név] (p1,..,pn);                    Az általános specifikációja egy függvénynek. A visszatérési érték lehet típus (bool, int, …), vagy lehet void, ami azt jelenti, hogy nincs visszatérési értéke. A paraméterek a változók típusából és hivatkozási nevéből állnak (const int a, char* b, float& c).

[visszat.ért] v=[fgv.név] (v1,..,vn);               A fenti függvény meghívása és visszatérési értékének átadása a ’v’ paraméternek, ahol v1..vn a specifikációban szereplő p1..pn paraméterváltozók típusainak megfelelő paraméterek.

[visszat.ért] [fgv.név] (p1,..,pn){S};             A fenti függvény implementációja, ahol S az a program, ami a függvényhívás során végrehajtódik.

kbhit()                                                                A conio.h könyvtár által definiált utasítás, visszatérési értéke egy logikai érték, amely akkor igaz, ha történt billentyűleütés, különben hamis.

2.  Készítsünk megoldóprogramot a Hanoi tornyai néven elhíresült problémára! (megoldás)

Kérjük be standard bementről, vagy parancssorból az eredményt tároló fájl nevét és a korongok számát! A megoldás lépéseit írjuk a megadott fájlba, majd írjuk ki, hogy összesen hány lépésre volt szükség! A probléma a következő: adott ’n’ db különböző átmérőjű korong és három rúd. Kezdetben az első rúdon van az összes korong, felfelé csökkenő sorrendben. A játék célja, hogy úgy rakjuk át a korongokat a második rúdra, hogy egyszer se kerüljön nagyobb átmérőjű korong kisebbre. A feladatot megoldó algoritmus elve a következő rekurzió: a felső n-1 korongot tegyük át a harmadik rúdra a második segítségével, az egyedül maradt n. korongot tegyük át a második rúdra és végül a harmadik rúdon található n-1 korongot tegyük át a második rúdra! Így végül az egy korong áttételének, mint elemi műveletnek sorozatává redukáltuk a feladatot.

Szükséges utasítások.

system(string("DEL "+fajlnev).c_str());      A ’fajlnev’ nevű fájlt törli.

3.  Implementáljunk olyan függvényt, amely a pramétereként kapott természetes szám osztóival tér vissza! (megoldás)

Specifikáljuk és implementáljuk az ’osztoi’ nevű függvényt, melynek alapértelmezett visszatérési értéke az osztók száma és paraméterből visszatér az osztókat tartalmazó tömbbel. Helyes függvényimplementálással a következő main függvény programja értelmessé és helyessé válik: (megoldás)

Szükséges utasítások:

[visszat.ért] [fgv.név] ([típus]*& p1,..,pn); A korábban látott általános függvényspecifikáció annyi különbséggel, hogy az első paraméter hivatkozásul átadott tömb, tehát a paraméterként átadott [típus] típusú tömb visszatérési érték is.

Projectek (zip):

1. feladat, 2. feladat, 3. feladat