Documente Academic
Documente Profesional
Documente Cultură
Scopul temei
lucrul cu fiiere
Folosirea pointerilor
Enun
S se implementeze n C o tabel de dispersie (hashtable) ce va conine cuvinte. Operaiile ce trebuie implementate pentru tabel sunt
urmtoarele:
remove <cuvnt> terge cuvntul din hashtable (nu e obligatoriu s existe cuvntul)
find <cuvnt> [<fiier_ieire>] caut cuvntul n hashtable scrie True sau False pe o linie nou n fiierul specificat sau la
print_bucket <index_bucket> [<fiier_ieire>] scrie cuvintele din bucketul respectiv, pe o singur linie i separate de spaiu n
fiierul specificat sau la consol dac acest parametru lipsete, index_bucket este valid
print [<fiier_ieire>] printeaza toate bucket-urile pe linii diferite, ncepnd cu bucketul 0, n fiierul specificat sau la consol
resize double dubleaz dimensiunea hash-ului (bucket-urile vor fi parcuse n ordine i cuvintele sunt redistribuite)
resize halve njumtete dimensiunea hash-ului (bucket-urile vor fi parcuse n ordine i cuvintele sunt redistribuite, memoria
n surplus va fi dealocat)
Aceste comenzi se vor regsi una per linie.
Urmtorii parametri sunt opionali i reprezint o list de fiiere de intrare din care se face citirea. Dac acetia lipsesc citirea
se face de la STDIN. Atenie, n cazul n care sunt specificate mai multe fiiere de intrare, toate operaiile se
add tema
add hash
print hash.out
remove tema
print hash.out
resize double
Hashtable-ul implementat va conine SIZE bucketuri. Fiecare bucket va conine cuvintele n ordinea n care ele au fost introduse. Pentru
operaia de resize bucketurile vor fi parcurse n ordine i redistribuite. Cuvintele din bucket vor fi parcurse ncepnd cu cel mai vechi i
terminand cu cel mai recent.
Precizri generale
Funcia de hash ce trebuie folosit (n ntreaga tem) este definit in hash.c. Nu poate fi folosita alt funcie.
Programul trebuie s execute comenzile n ordine, aa cum au fost primite citite din fiier(e).
Liniile goale din fiierul de intrare trebuie ignorate (programul nu face nimic i trece la linia urmtoare)
Dac dimensiunea hash-ului este impar (2k+1), dup njumtaire dimensiunea lui va fi k.
Lungimea hash-ului i a unui cuvnt vor fi reprezentate pe un numr pe 32 de bii (fr semn) .
Dimensiunea maxim a unei comenzi (operaia i cuvntul asociat) este de 20000 de caractere.
Comportamentul dorit la resize este unul echivalent cu urmatorul: se creeaza un nou hash, se itereaza prin bucketurile din
Tema va fi punctat cu minimul punctajelor obinute pe cele dou platforme. Nu avei voie s folosii directive de preprocesare
de forma:
#ifdef __linux__
[...]
#ifdef _WIN32
[...]
Materiale ajuttoare
Teste:
Linux
Windows
Referine:
ANSI C reference
Hash table
Maini virtuale:
Link (Important: folosii 7zip pentru dezarhivarea mainilor, este posibil s apar probleme cu alte programe de
dezarhivare)
FAQ
A: Nu.
Q: Valorile introduse n hastable sunt cuvinte [A-Za-z] - trebuie verificate cuvintele la introducere?
A: Nu.
A: Da.
Lista de discuii
Pentru ntrebri sau nelmuriri legate de tem putei cuta, consulta sau trimite un mail pe lista de discuii (trebuie s fii nregistrai).