Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionia:esercitazione3

Esercitazione 3

Ancora su C, macros, libreria standard di IO, creazione di librerie statiche, semplici makefile.

Cercare di completare tutti gli esercizi durante le ore di laboratorio e nel caso come homework.

Esercizio 1: macro

Dato il seguente codice main C:

#define dimN 16
#define dimM  8
int main() {
    long *M = malloc(dimN*dimM*sizeof(long));
    assert(M);
    for(size_t i=0;i<dimN;++i)
	for(size_t j=0;j<dimM;++j)			
	    ELEM(M,i,j) = i+j;
    
    PRINTMAT(M);
    return 0;
}

scrivere le 2 macros ELEM e PRINTMAT. Al suo interno PRINTMAT usa la macro ELEM per accedere agli elementi della matrice. Esempio di output richiesto:

Stampo la matrice M:
   0    1    2    3    4    5    6    7 
   1    2    3    4    5    6    7    8 
   2    3 ....

Esercizio 2: macro

Scrivere 2 macros CHECK_EQ e CHECK_NEQ che controllano che il primo argomento passato (una chiamata di libreria tipo malloc, fopen, ….) sia uguale (_EQ) o diverso (_NEQ) al secondo argomento passato alla macro. Qualora la condizione è verificata allora deve essere stampata, utilizzando la chiamata di libreria perror, la stringa passata come 3 argomento alla macro, il numero di riga dove la macro è stata invocata ed il nome del file contenente la chiamata stessa. Es. supponiamo che miofile.c contenga alla riga 10 il seguente codice

 CHECK_EQ(p=malloc(N*sizeof(long)), NULL, "malloc"); 

l'output dovrà essere (supponendo in questo caso specifico che la malloc vada a buon fine):

"malloc": Success 
ERRORE ALLA LINEA 10 DEL FILE miofile.c

Esercizio 3: creazione di una libreria statica

Riconsiderare l'esercizio 6 (dell'Assegnamento2). Implementare tutte le funzioni che operano sull'albero in una libreria statica chiamata libBTree.a. Linkare quindi la libreria al programma main per ottenere l'eseguibile. Creare quindi un Makefile che crei la libreria e l'eseguibile.

Esercizio 4: lista ordinata di parole

Scrivere un programma che dato un file testuale come argomento, inserisca tutte le parole del file in una lista ordinando le parole alfabeticamente. Fornire inoltre una libreria statica che implementi le seguenti funzioni (libList.a):

list_t *createList();                         // crea una lista vuota   
int     destroyList(list_t *L);               // libera tutta la memoria allocata dalla lista
int     insertList(list_t *L, const char *);  // inserisce una parola nella lista
void    printList(list_t *L);                 // stampa tutta la lista

ed il Makefile che permette di generare sia la libreria che l'eseguibile.

informatica/sol/laboratorio15/esercitazionia/esercitazione3.txt · Ultima modifica: 17/03/2015 alle 12:32 (10 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki