Informatika2-2012/Gyakorlat06
Ador (vitalap | szerkesztései) (Új oldal, tartalma: „(Akinek nem sikerült múltkor végigérnie a feladatsoron az kezdheti az 5. gyakorlat utolsó (stringes) feladatával, a ZH-hoz nem fog ártani a stringek kezeléséne…”) |
Ador (vitalap | szerkesztései) (→Kétirányba láncolt lista) |
||
(egy szerkesztő 5 közbeeső változata nincs mutatva) | |||
1. sor: | 1. sor: | ||
− | (Akinek nem sikerült múltkor végigérnie a feladatsoron az kezdheti az 5. gyakorlat utolsó (stringes) feladatával, a ZH-hoz nem fog ártani a stringek kezelésének gyakorlása) | + | (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 ==== | ==== String-összehasonlítás ==== | ||
17. sor: | 17. sor: | ||
int n = nagyobb_str(egyik, masik) | int n = nagyobb_str(egyik, masik) | ||
</c> | </c> | ||
− | Ezután ''n''-nek -1 értékűnek kell lennie mert a másik | + | Ezután ''n''-nek -1 értékűnek kell lennie mert a másik string a nagyobb. |
==== Kétirányba láncolt lista ==== | ==== 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ányban 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 (max 40 karakteres) char* nevet, ''malloc()''-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaadja az új elemre mutató pointert. | ||
+ | * Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), beszúr 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), é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. |
A lap jelenlegi, 2012. március 22., 12:50-kori változata
(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ányban 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 (max 40 karakteres) char* nevet, malloc()-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaadja az új elemre mutató pointert.
- Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), beszúr 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), é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.