Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio20:esercitazionib:esercitazione3

Questa è una vecchia versione del documento!


Esercitazione 3

Esercizio 1: libtokenizer.a

Inserire in un file 'tokenizer.h' la dichiarazione di due funzioni 'tokenizer' e 'tokenizer_r' (vedere la soluzione proposta nell'Esercitazione 2). 'tokenizer' ha la stessa interfaccia di 'tokenizer_r' ma mentre la prima usa al suo interno 'strtok', la seconda usa 'strtok_r'. Inserire nel file 'tokenizer.c' l'implementazione delle due funzioni (cioè la loro definizione). Creare quindi una librerie statica 'libtokenizer.a' che offre l'implementazione delle due funzioni. Scrivere un programma main che utilizza una delle due o entrambe le funzioni, il programma includerà il file 'tokenizer.h' e verrà linkato alla libreria statica 'libtokenizer.a'.

Esercizio 2: libtokenizer.so

Rifare l'esercizio 1 creando invece che una libreria statica una libreria dinamica ('libtokenizer.so'). Verificarne il corretto caricamento in memoria della libreria spostando il file 'libtokenizer.so' in una differente directory (es. ~/mylibdir).

Esercizio 3: macro

Dato il seguente codice main C:

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

scrivere le 3 macros CHECK_PTR, ELEM e PRINTMAT. 'CHECK_PTR' prende due argomenti, un puntatore ed una stringa. La macro controlla che il primo argomento sia 'NULL' ed in tal caso stampa utilizzando la funzione di librerie perror (man 3 'perror') la stringa passata come secondo argomento prima di uscire dal programma con EXIT_FAILURE (man 3 'exit'). 'PRINTMAT' stampa la matrice passata come primo argomento. 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 4: somma da

Scrivere un programma C che implementa una funzione somma con la seguente segnatura:

int somma(int x);

La funzione 'somma' aggiunge l'intero x letto dallo standard input al valore calcolato fino a quel momento, quindi ritorna la somma parziale. Il numero di valori da leggere dallo standard input viene passato come argomento del main. Il valore iniziale della somma deve essere 'INIT_VALUE' che viene definito a compilazione utilizzando il flag del compilatore -D (es. -DINIT_VALUE=100). Il programma non deve fare uso di variabili globali.

Valutare se la funzione somma così come definita è rientrante ed eventualmente fornire una versione rientrante 'somma_r'.

informatica/sol/laboratorio20/esercitazionib/esercitazione3.1583139945.txt.gz · Ultima modifica: 02/03/2020 alle 09:05 (5 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki