Programarea Calculatoarelor, seria CC

Laborator 11

Programare generică

În acest laborator veţi învăţa să:



Problema 1.

Scrieți un program ce citește de la tastatură un vector de întregi și îl sortează folosind funcția de bibliotecă void qsort din stdlib.h:

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) )

Va trebui să implementați o funcție de comparare și să apelați qsort cu parametrii corespunzători.


Problema 2.

Completați programul de la problema 1 astfel încât să se afișeze poziția pe care apare un întreg x citit de la tastatură în vectorul sortat. Veți folosi funcția void *bsearch din stdlib.h:

void *bsearch ( const void * key, void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) )

Funcția întoarce un pointer către elementul din vector corespunzător cheii căutate sau NULL dacă nu a fost găsit un astfel de element.


Problema 3.

Se consideră următoarele definiții:

typedef struct entry {
    void * key;
    void * value;
} entry;

typedef struct map {
    entry ** elem; // vectorul de elemente; este alocat si realocat dinamic
    int n_elem; // numarul de elemente din vector
    int cap; // capacitatea vectorului
} map;
Definiți următoarele funcții: Pentru a testa funcțiile definite vom face următoarea particularizare: vrem să reținem definițiile asociate unor cuvinte. Va trebui să implementați funcțiile:
În programul principal, afișați un meniu ce va permite următoarele operații la apăsarea respectivelor taste: Aveți grijă să alocați memorie pentru fiecare cuvânt și pentru fiecare definiție și să o eliberați atunci când nu mai este nevoie (de ex. la ștergerea unui cuvânt). Puteți să le citiți inițial într-un buffer alocat static și să folosiți funcția strdup.