A programozás alapjai 1. BMEVIHIA106
Nagy HF ú tmutató 2011/2012 – II. fé lé v
Analízis (Nyelv független) 1. 2. 3. 4. 5.
A Házi feladat téma szöveges leírása. A feladat résztvevőinek azonosítása A résztvevők tulajdonságai A résztvevők viselkedése Lehetséges kérdések
Tervezés (C nyelv) 6. 7. 8. 9.
Szükséges tulajdonságok és adattípusok összerendelése Adatszerkezet választása (Új adattípusok deklarálása) Funkciók ismertetése (Függvény deklarációk) További rész funkciók / számítások (Függvény deklaráció)
Implementálás (C nyelv) 10. 11. 12. 13.
Adattípusok elkészítése Függvények megírása Adatok mentése/visszatöltése fájlból. A konkrét feladat megoldása függvényként
Nagy HF pé lda 2011/2012 – II. fé lé v
Házi Feladat: Társkereső Analízis (Nyelv független)
1. A Házi feladat téma szöveges leírása. A feladat az emberek számára a társkeresést program segítségével megkönnyíteni. A társkereséshez a felhasználóknak meg kell adniuk saját adataikat (Például: neme, magasság, súly, hajszín, szemszín leírás, stb.). Ezután kereshetnek társat a többi társkereső adatai alapján. Ha valamely másik társkereső megtetszik a felhasználónak, akkor bejelölheti lehetséges partnernek, amiről a másik fél automatikusan értesítést kap. Ha a kiszemelt partnernek is tetszünk, akkor ő is felvesz minket a lehetséges partnerei közé. A lehetséges partnerek, ezután tudnak egymással beszélni, találkozni, randevúzni stb. A felhasználók bármikor felbonthatják, illetve módosíthatják a társkereső rendszerben egymás közti kapcsolataikat. Mindenképpen tartalmazza, azt, hogy a programot Ki és elsősorban Mire fogja használni? (Továbbiakban nevezzük őt elsődleges felhasználónak) 2. A feladat résztvevőinek azonosítása A feladatban a társkeresőbe regisztrált felhasználókat és azok kapcsolatait kell kezelni. A feladat szempontjából lényeges résztvevőket kell azonosítani, nem biztos, hogy élőlény, lehet például Tantárgy, Szoba, Nyeremény stb. 3. A résztvevők tulajdonságai Felhasználó: Azonosító (egyedi szöveg) Neme (férfi/nő) Magassága: [cm] Súlya: [kg] Hajszín: [barna, szőke, fekete, vörös, …] Szemszín: [kék, barna] Leírás: szöveg ++ Lehetséges partnerei ++ Más felhasználók felkérései ++ Saját felkérései Itt a résztvevőkhöz rendelt tulajdonságokat kell szerepeltetni, továbbá jelezni a többi résztvevővel lehetséges kapcsolatokat.
4. A résztvevők viselkedése Felhasználó – regisztrál/bejelentkezik a társkeresőbe az adatai megadásával Felhasználó – kijelentkezik a társkeresőből (pl.: társat talált) Felhasználó – keres más felhasználókat adatai alapján Felhasználó – felvesz egy másik felhasználót a lehetséges partnerei közé Felhasználó – listázza a felkéréseit Felhasználó – visszaigazolja/elutasítja a másik felhasználó felkérését Felhasználó – törli / módosítja kapcsolatát. Itt kell az aktív résztvevők feladatait, kéréseit felsorolni, kezdje azzal, akit a feladat leírásában elsődleges felhasználónak jelölt. 5. Lehetséges kérdések a) Hány függőben lévő felkérése van a legmagasabb felhasználónak? b) Hány kilót nyom az a felhasználó, akinek a legtöbb szőke nő van a lehetséges partnerei közt?
Tervezés (C nyelv) 6. Szükséges tulajdonságok és adattípusok összerendelése Felhasználó: Azonosító: (egyedi szöveg) – char [9], megj.: maximum 8 hosszú lehet Neme: (férfi/nő) - char [’F’|’N’] Magassága: [cm] - unsigned int Súlya: [kg] - double Hajszín: [barna, szőke, fekete, vörös, …] – enum szinek, megj.: a szem- és hajszíneket egy enum-ban tárolom Szemszín: [kék, barna] – enum szinek Leírás: szöveg – char*, vagy char[100]. 7. Adatszerkezet választása (Új adattípusok deklarálása) a) A társkereső összes felhasználóját egyszeresen láncolt listában tárolom azonosítójuk szerint rendezve. b) A felhasználók lehetséges partnereit szintén láncolt listában tárolom a felhasználóhoz kapcsolva c) A felhasználó saját felkéréseit az előző láncolt listába teszem, ezért a partnerekhez szükséges egy állapotot is hozzárendelni (Megerősített/Nem megerősített/Visszautasított) d) A felhasználóhoz beérkezett partner jelöléseket egy külön veremben tárolom a felhasználóhoz kapcsolva. Az így kapott adatszerkezet a következő:
Adat típusok: Színek: typedef enum {szőke, fekete, vörös, barna, kék, …} szin;
Felhasználó: typedef struct { char azonosito[9]; char neme; unsigned int magassag; double suly; szin hajszin; szin szemszin; char leiras[100]; } Felhasznalo;
Partnerek: typedef struct partner { Felhasznalo *felh; char allapot; struct partner *kov; } Partner;
Felkérések: typedef struct felkeres { Felhasznalo *felh; struct felkeres *kov; } Felkeres;
Felhasználók: typedef struct felhasznalok { Felhasznalo felh; //Felhasznalo *felh is lehet Partner *partnerek; Felkeres *felkeresek; struct felhasznalok *kov } Felhasznalok;
8. Funkciók ismertetése (Funkció deklarációk) Felhasználó – regisztrál/bejelentkezik a társkeresőbe az adatai megadásával void regisztral(Felhasznalok* tarskereso, Felhasznalo felh);
Felhasználó – kilép a társkeresőből (pl.: társat talált) void kilep(Felhasznalok* tarskereso, char *azonosito);
Felhasználó – keres más felhasználókat adatai alapján (pl.: a legmagasabbat) Felhasznalo legmagasabb (Felhasznalok* tarskereso);
Felhasználó – felvesz egy másik felhasználót a lehetséges partnerei közé void partnert_felvesz (Felhasznalok* felhasznalo, Felhasznalo *partner);
Felhasználó – listázza a felkéréseit void felkerest_listaz (Felhasznalok* felhasznalo);
Felhasználó – visszaigazolja/elutasítja a másik felhasználó felkérését void valaszol_felkeres (Felhasznalok* felhasznalo, Felkeres *felk, char allapot);
Felhasználó – törli kapcsolatát egy partnerével void torol_kapcsolat (Felhasznalok* felhasznalo, char* partner_azonosito);
9. További rész funkciók / számítások (Funkció deklaráció) A fentiekből látszik, hogy a felhasználókat az azonosítójuk alapján lehet megkülönböztetni, így szükséges lehet a keresést azonosító alapján is megvalósítani. void keres_felhasznalo(Felhasznalok* tarskereso, char *azonosito);
A társkeresést nagyban megkönnyíti, ha egy adott felhasználó összes adatát kiírjuk a képernyőre, és ez alapján tud a felhasználó dönteni. void print_felhasznalo(Felhasznalo felh);
A felhasználó felvesz valakit a lehetséges partnerek közé, akkor erről a felvett is értesítést kap. void ertesites (Felhasznalok *partner, Felhasznalo *felhasznalo);
Továbbá az a) kérdés megválaszolásához szükséges a függőben lévő felkérések számának meghatározása is. unsigned fuggo_felkeres(Felhasznalok* felhasznalo);
A b) kérdés megválaszolásához szükség van a szőke nőkkel való kapcsolatok számára felhasználónként, illetve a legtöbb ilyen kapcsolattal rendelkező felhasználót is meg kell keresnünk. unsigned szoke_no_partner(Felhasznalok* felhasznalo);
illetve: Felhasznalo legtobb_szoke_no_partner(Felhasznalok* tarskereso);
Természetesen a funkciók sorának ezzel még nincs vége, hiszen például a listák felépítése és lebontása, valamint a fájlokba mentés és visszaállítás, illetve az adott feladathoz szükséges egyéb feladatok, és azok rész feladatai számára további funkciók lehetnek szükségesek.