Laborator 13 - Tipuri generice

Programare generică

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

  • Folosiţi funcţiile qsort şi bsearch.
  • Folosiţi tipuri, funcţii şi pointeri generici.

Funcţiile qsort şi bsearch.

Problema 1 - Problemă rezolvată

Scrieţi un program care citeşte un n de la tastatură şi creează un vector (cu dimensiunea n) de numere întregi generate aleator şi îl sortează ulterior folosind funcţia de bibliotecă void qsort din stdlib.h:

  • base este adresa primului element din vector
  • num este numărul de elemente din vector
  • size este dimensiunea unui element
  • comparator este funcţia ce compară 2 elemente din vector

Implementaţi o funcţie de comparare în care să apelaţi qsort cu parametrii corespunzători.
Rezolvare:

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:

  • key este adresa cheii căutate
  • base este adresa primului element din vector
  • num este numărul de elemente din vector
  • size este dimensiunea unui element
  • comparator este funcţia ce compară 2 elemente din vector

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:

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:

În programul principal, afişaţi un meniu ce va permite următoarele operaţii la apăsarea respectivelor taste:

  • 1 - Afisare dictionar.
  • 2 - Cauta cuvant in dictionar. // se va afisa cuvantul + definitia sau un mesaj corespunzator daca nu a fost gasit
  • 3 - Adauga cuvant in dictionar. // se va citi de la tastatura cuvantul si definitia
  • 4 - Sterge cuvant din dictionar. // se va citi de la tastatura cuvantul ce se doreste sters
  • 5 - Sortare dictionar.
  • 0 - Iesire din program.

BONUS: Sa se redefineasca metoda add astfel incat daca se incearca adaugarea unei intrari a carei cheie exista deja in dictionar sa se modifice doar valoarea veche asociata cheii la valoarea noua!

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.