Ebben a fájlban ötleteket adok a feladatmegoldásokhoz. Természetesen nem csak így lehet megoldani a feladatokat, de talán segítenek ezek a vázlatok. Mindegyik feladat megoldható listakezeléssel is, de a mellékelt vázlatokat adatbáziskezeléssel való megoldásra adom. Azt különösen a figyelmébe ajánlom, hogy figyelje meg: a feladatok között vannak nagyon hasonló programozású feladatok meglehetősen eltérő szöveggel, és hasonló szövegű, de meglehetősen eltérő programozásúak. Tanulság: próbálja felismerni a hasonló program-struktúrákat. 1. A gólyabálon bálkirálynőt választanak. Ehhez először jelentkezni kell a versenyben résztvenni kívánó lányoknak (olvassa be a névsorukat), majd a bál során szavazni lehet rájuk. A verseny lezárulásakor megszámolják a szavazatokat. Állapítsa meg, hogy ki lett a bálkirálynő. Átlagosan hány szavazatot kaptak a versenyzők? Ennél a feladatnál nem indokolt a menü, mert adott a kiértékelési sorrend. start:- tisztit, adatbe, szavazas, balkiralyno, atlag. tisztit:- célszerű tiszta memóriával indulni, vagyis futás előtt retractall-lal kitkarítani az összes szóba jövő adatbázist. (Elvileg nem muszáj az összeset, végig lehet gondolni, hogy melyiket igen, melyiket nem, de egyszerűbb, ha az összeset törli.) adatbe :- itt kell beolvasni az adatokat. Attól függően, hogy milyen szerkezetű az adatfájl, vagy consult-tal, vagy see,...seen szerkezettel (közte saját beolvasási eljárás). Ugyancsak itt kellene átkonvertálni az adatokat olyan szerkezetre, amilyet a program kíván. Pl. az eredeti resztvevo/1-ből (resztvevo(nev)) resztvevo/2-t csinálni. (resztvevo(nev,szavazatszam)). Arra figyeljen, hogy ha a feladat szövege névsort kíván bemenő adatként, akkor az valóban névsor legyen, és ne tartalmazzon számokat, csak neveket. szavazas:- ameddig tart a verseny (rá kell kérdezni, hogy tart-e még - ezt lehet az eljárás elején is és a végén is) addig kérdezzük meg, hogy kire szavaz. A könnyebb választhatóság kedvéért ilyenkor illik kiiratni a résztvevők névsorát - de csak a neveket. Ennek ellenére gépelhet valaki rossz nevet, vagyis vizsgálni kell, hogy van-e olyan ember, amilyen nevet gépeltünk. Ha van ilyen ember, akkor az ő adatait töröljük az adatbázisból, és szúrjuk be az új adatot (a régi szavazatszám + 1 :)), ha nincs ilyen ember, akkor írjuk ki, hogy nincs. Mindkét esetben lehetőséget kell adni a folytatásra! balkiralyno:- meg kell határozni, hogy melyik a legtöbb szavazat, és kiiratni az összes olyan nevet, akinek ennyi szavazata van. atlag:- össze kell adni az összes résztvevő szavazatszámát, megszámolni, hogy összesen hány résztvevő volt, és a kettőt elosztani egymással :) 2.A gólyabálon bálkirálynőt választanak. Ehhez először jelentkezni kell a versenyben résztvenni kívánó lányoknak (olvassa be a névsorukat), majd a bál során szavazni lehet rájuk. A verseny tetszőleges pillanatában lehessen lekérdezni az aktuális állást, a verseny lezárásakor pedig állapítsa meg, hogy ki lett a bálkirálynő. Átlagosan hány szavazatot kaptak a versenyzők? Most indokolt a menü használata, mert nincs kötött sorrend, tetszőleges pillanatban lehet több mindent csinálni. start:- tisztit, adatbe, menu, balkiralyno. menu :- .... menu(1) :- szavazas, menu. menu(2) :- kiiratas, menu. menu(3) :- kilepes. menu(_) :- hibajelzés, menu. szavazas:- könnyebb, mint az előző változat, mert nem kell ciklus. Most csak annyi kell, hogy megkérdezzük az illető nevét, és ha van ilyen ember, akkor az ő adatait töröljük az adatbázisból, és szúrjuk be az új adatot (a régi szavazatszám + 1 :)), ha nincs ilyen ember, akkor írjuk ki, hogy nincs. kiiratas:- kiiratjuk az összes adatot (resztvevok/2-t). (Természetesen rendes formátummal :)) Ha fájlba is akarunk írni, akkor ott a fájlnak megfelelő formátumot kell használni, ami kicsit eltér a képernyőre írástól. FONTOS: ebben a menüpontban nem illik, sőt, nem szabad fájlba írni, mert minden egyes alkalommal felülírnánk a fájl, ez pedig egy csomó fölös gépidő. Fájlba írni csak kilépéskor szabad (néhány nagyon indokolt eset kivételével). kilepes:- illik elköszönni :)) 3. A gólyabálon bálkirálynőt választanak, de másképp, mint az előbb. Ehhez először jelentkezni kell a versenyben résztvenni kívánó lányoknak (olvassa be a névsorukat), majd a bál során szavazni lehet rájuk. A szavazás most abból áll, hogy mindig mindenkire kell szavazni, de úgy, hogy valamennyi pontszámot adunk minden egyes résztvevőnek. (A legszebbnek - vagy a legjobb barátnak a legtöbbet :)) A verseny tetszőleges pillanatában lehessen lekérdezni az aktuális állást, a verseny lezárásakor pedig állapítsa meg, hogy ki lett a bálkirálynő. Átlagosan hány pontot kaptak a versenyzők? Bár majdnem ugyanaz a szövege, de az előzőtől lényegesen eltérő a feladat. Most a programban használható adatszerkezet: resztvevo(nev, ossz_ponszam). A szavazas során most mindenkit végig kell kérdezni (emiatt viszont nem kell ellenőrizni, hogy létezik-e olyan név, hiszen csak az adatbázisban szereplőket kérdezzük), és mindenkinek módosítani kell az adatát. (Természetesen nem 1-gyel, hanem az új pontszámmal :)) Még egy nagyon fontos tényező: azt is számlálni kell, hogy hányszor került sorra ez a menüpont, hiszen az átlagszámításnál majd evvel az értékkel kell osztani. átalgszámítás: minden egyes résztvevőnél egyenként kell számítani, mégpedig úgy, hogy a pontszámát elosztjuk az előbb említett számmal, vagyis annyival, ahányszor sorrakerült a szavazás menüpont. 4. A gólyabálon bálkirálynőt választanak, de ismét másképp, mint az előbb. Ehhez először jelentkezni kell a versenyben résztvenni kívánó lányoknak (olvassa be a névsorukat), majd a bál során szavazni lehet rájuk. A szavazás most abból áll, hogy csak egy-egy emberre szavazunk, de úgy, hogy valamennyi pontszámot adunk minden egyes résztvevőnek. (A legszebbnek - vagy a legjobb barátnak a legtöbbet :)) A verseny tetszőleges pillanatában lehessen lekérdezni az aktuális állást, a verseny lezárásakor pedig állapítsa meg, hogy ki lett a bálkirálynő. Átlagosan hány pontot kaptak a versenyzők? Bár majdnem ugyanaz a szövege, de az előzőektől lényegesen eltérő a feladat. Most a programban használható adatszerkezet: resztvevo(nev, ossz_ponszam, szavazatszam). A szavazás olyan, mint az 1. feladatnál, de be kell kérni a pontszámot, hozzáadni az eddigiekhez, a szavazatszámot 1-gyel növelni, és az így kapott új adatot kell beszúrni a régi helyére. Az átlagszámítás most teljesen más, mert minden egyes embernél ki kell számolni az ossz_pontszám és a szavazatszam hányadosát, de nagyon kell figyelni, mert most könnyen előfordulhat, hogy a szavazatszam nulla, vagyis az átlagszámításnál a nullával való osztást is figyelni kell. (Elvileg az első feladatnál is kellene, de ott azért nem annyira fontos, mert csak akkor lenne nullával való osztás, ha egyetlen résztvevő sem lenne, ez meg elég irreális feltétel.) A bálkirálynő kérdése nincs pontosan megfogalmazva. Elvileg lehet az is bálkirálynő, aki a legtöbb ponszámot kapta, de ez így elég igazságtalan, hiszen attól függ, hogy kinek a hódolója tud nagyobb számot mondani. Az lenne igazságos, ha az átlagok alapján határoznánk meg a maximumot. De ha nincs precízen megfogalmazva a feltétel, akkor több, a feltételhez illő megoldást is el szoktam fogadni. 5. Egy adatfájl tartalmazza a Mikulásünnepségen megajándékozandó gyerekek névsorát. A mikulás kérdésére egy-egy gyerek jelentkezik- kérje be a nevét (idegen nem segíthet be, vagyis más név nem lehet, mint amit beviszünk). Minden válasz egy plusz ajándék szaloncukrot jelent. Az ünnepség végén írassa ki, ki hány darab szaloncukrot kapott. Állapítsa meg, összesen hány darab cukrot osztott szét a Télapó. Ki(k) kapta(ák) a legtöbbet? Bár egészen más a szövege, de ez a feladat majdnem ugyanaz, mint az első bálkirálynős. Az ottani insturkciók alapján már ezt is meg tudja oldani (remélem :)). 6. Egy adatfájl tartalmazza a Mikulásünnepségen megajándékozandó gyerekek névsorát. A mikulás kérdésére egy-egy gyerek jelentkezik- kérje be a nevét (idegen nem segíthet be, vagyis más név nem lehet, mint amit beviszünk). Minden válasz egy plusz ajándék szaloncukrot jelent. Az ünnepség tetszőleges pillanatában igény esetén írassa ki, hogy ki hány darab szaloncukrot kapott. Állapítsa meg, hogy eddig a pillanatig összesen hány darab cukrot osztott szét a Télapó. Ki(k) kapta(ák) a legtöbbet? Ez meg olyan, mint a második bálkirálynős. 7. Raktárforgalom szimulálása: Adott a raktárban lévő dolgok neve, darabszáma. A raktárba hozhatnak/vihetnek dolgokat. Bármikor ki lehessen iratni, hogy miből mennyi van, összesen hány fajta dolog van raktáron, összesen hány darab dolog van, melyikből van legtöbb/legkevesebb. Ez majdnem olyan, mint a negyedik bálkirálynős feladat, csak: - itt van egy elvitel menüpont is, ahol nem növelni, hanem csökkenteni kell a darabszámot, de csak akkor, ha van még annyi raktáron, mint amennyit kér az illető. - a hozott dolgoknál ugyanúgy meg kell vizsgálni, hogy elvileg tárolhat-e olyan dolgot a raktár, mint amilyet hoztak, de ha nem tárol ilyet, akkor változhat a reakció: lehet hibajelzést adni, de lehet, hogy rákérdez: befogadjuk-e ezt az új terméket, és ha igen, akkor nullás darabszámmal beszúrja az adatbázisba. 8. Egy adatfájl tartalmazza a witch-re kirakott feladatok szövegét, illetve minden egyes feladat mellett egy jelzőt: van hozzá megoldás, van hozzá vázlat, nincs hozzá semmilyen segitség. (Feladatszövegként lehet egyetlen szó is - de ha hosszabb szöveget szeretne, akkor azt aposztrofok közé kell írni.) Irjon programot, amely a következőket tudja: - bármikor ki lehet rakni újabb feladatot - bármikor ki lehet törölni egy feladatot - bármikor le lehessen tölteni egy feladatot (magyarul: ki lehessen iratni a feladat szövegét) - bármikor meg lehessen kérdezni, hogy eddig hányszor töltöttek le feladatot - bármikor le lehessen kérdezni a segítség mértéke alapján is a feladatokat Kilépéskor állapítsa meg, hogy összesen hányan nézték meg a feladatokat, és melyik feladat volt a legnépszerűbb/legnépszerűtlenebb. Ezt majdnem teljesen segítség nélkül hagyom, de azért valamicskét mégis: Azt kellene végiggondolni, hogy miként lehet hivatkozni egy feladatra (törléskor, lekérdezéskor). Egyáltalán nem logikus, hogy a feladat szövegével hivatkozunk, még akkor sem, ha esetleg az adatfájl csak egy-egy szót tartalmaz feladatként. De magát a programot úgy kellene kezelni, mintha a feladat szövege tetszőleges hosszúságú lenne. Vagyis: bár nincs belefogalmazva a feladtba, de az lenne a logikus, ha még egy "rejtett" adatot is használnánk - ez lenne az adatbázis kulcsa. Azaz valami ilyesmi lehetne az adatfájl szerkezete: feladat(azonosito, szoveg, jelzo) A programban: feladat(azonosito, szoveg, jelzo,letoltesszam)