Programarea calculatoarelor 2 - Laborator 7

Obiective: Scrierea de funcții generice de prelucrare pe tablouri, cu parametri pointeri la funcții, pointeri void, și conversii de tip.

Indicații: Exemple sunt funcțiile de bibliotecă bsearch si qsort (pentru care se solicită implementarea de variante în primele două probleme). Pentru a funcționa, acestea au nevoie de:

În implementarea unor astfel de funcții e necesară determinarea adresei unui element de tablou, calculând deplasamentul în octeți față de adresa de început a tabloului. Putem aduna un număr de octeți la un pointer forțându-l întâi la tipul char *, și știind că adunarea cu un întreg are efectul deplasării adresei cu numărul indicat de obiecte, iar dimensiunea unui char e tocmai un octet.

Problema 1: Scrieți o funcție care efectuează căutarea binară a unei valori într-un tablou ordonat crescător. Funcția va returna adresa din tablou a elementului găsit, sau NULL dacă acesta nu există. Unul din parametrii va fi un pointer la o funcție care ia ca parametri doi pointeri la elemente de tablou și returnează rezultatul comparației între cele două elemente.
Testați funcția căutând un număr real citit de la intrare într-un tablou de reali dați ca argumente pe linia de comandă.
Obs: Prin căutare binară se înțelege o cautare cu înjumătățirea intervalului în funcție de comparația cu valoarea de la mijlocul acestuia (vezi exemplul de la cursul 1).

Problema 2: Scrieți o funcție care sortează un tablou. Unul din parametrii va fi un pointer la o funcție care ia ca parametri doi pointeri la elemente de tablou și returnează rezultatul comparației între cele două elemente.
Testați funcția sortând crescător șirul realilor dați ca argumente pe linia de comandă a programului.

Problema 3: Scrieți o funcție care prelucrează succesiv toate elementele unui tablou. Funcția va lua ca argumente adresa tabloului, numărul de elemente, un șir de max. 2 caractere care indică tipul elementelor de tablou, după convențiile folosite la intrarea/ieșirea formatată (c, d, hd, ld, u, hu, lu, f, lf) și un pointer la o funcție care efectuează prelucrarea unui element de tablou, indicat prin adresa sa.
Testați funcția citind de la intrare și apoi tipărind un tablou. Numărul de elemente din tablou și tipul lor se solicită de la intrare.


Marius Minea
Last modified: Mon Nov 14 07:09:47 EET 2005