Informatika2-2012/Gyakorlat06
(Akinek nem sikerült múltkor végigérnie a feladatsoron az kezdheti az 5. gyakorlat utolsó (stringes) feladatával, onnan legalább az első pöttyöt mindenkinek meg kell tudnia oldani, és a ZH-hoz nem fog ártani a stringek kezelésének gyakorlása.)
String-összehasonlítás
Írj függvényt ami megkap két stringet (mutatókkal), és 1-et ad vissza ha az első a nagyobb (lexikografikus rendezés, vagyis ABC-rend szerint), -1-et ad ha a második a nagyobb, és 0-t ad ha egyforma a két string. A kapott stringeket még véletlenül se változtassa meg a függvény, ezért legyenek konstansok a paraméterek:
int nagyobb_str(const char *s1, const char *s2) { ... }
A függvény megírása után teszteld is néhányféleképpen a main() függvényedből meghívva az összehasonlítót. Pl:
char egyik[20] = "abrakadabra"; char masik[10] = "sotetkek"; int n = nagyobb_str(egyik, masik)
Ezután n-nek -1 értékűnek kell lennie mert a másik string a nagyobb.
Kétirányba láncolt lista
Írj programot, ami megvalósít egy kétirányba láncolt listát! Kiindulhatsz az előadáson vett kódból (ott egy irányba volt csak megoldva a láncolás). Amiken módosítani kell:
- A listaelemekben legyen az azonosítón kívül egy max. 40 karakteres "nev" is eltárolva
- Kétirányúsítás: a listaelemekben legyen még egy pointer ami az előző elemre mutat a listában (a lista elő eleménél ez NULL)
- Legyen egy függvény ami a lista utolsó elemét adja vissza (A lista struktúrában legyen mutató az utolsó elemre is)
- Írj függvényt ami kap egy listát és egy azonosítót, és visszaadja az azonosítóhoz tartozó nevet ha talált ilyen azonosítót a listában (elölről keressen, az első találtaot adja vissza, ha nem talált semmit akkor üres stringet)
- Írj egy "uj_elem()" függvényt ami megkap egy long azonosítót és egy char* nevet, malloc()-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaad egy új elemre mutató pointert.
- Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), arra a helyre ahová név szerint rendezve be kell tenni. Haszáld az előző feladatben megírt függvényt (vagy a string.h-ból az "strcmp()"-t). Ha üres volt eddig a lista (a kezdőelem és az utolsó elem pointer is NULL) akkor persze csak vedd fel ezt az elemet elsőként és utolsóként is. Ha nem volt üres a lista, akkor figyelj arra hogy minden pointert jól átállíts! A beszúrt elem előtti elem "kovetkezo" mutatója az új elemre mutasson, és a beszúrt elem utáni elem "elozo" pointere is az új lemere mutasson (eddig ezek egymásra mutattak). És persze az újonnan beszúrt elem mutatóit is be kell állítani.
- A main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (4 darabot), malloc-cal helyet foglal nekik, és a rendezve beszúró függvénnyel szúrd be őket a listába. Végül írasd ki a lista elemeit a láncolás szerinti sorrendben.