Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio19:esercitazionib:esercitazione3

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
informatica:sol:laboratorio19:esercitazionib:esercitazione3 [04/03/2019 alle 14:21 (6 anni fa)] – creata Massimo Torquatiinformatica:sol:laboratorio19:esercitazionib:esercitazione3 [05/03/2019 alle 09:00 (6 anni fa)] (versione attuale) Massimo Torquati
Linea 1: Linea 1:
 ====== Esercitazione 3 ====== ====== Esercitazione 3 ======
 +
 +===== Esercizio 1: libtokenizer.a =====
 +
 +Inserire nel file 'tokenizer.h' l'interfaccia di due funzioni 'tokenizer' e 'tokenizer_r' (quest'ultima e' quella implementata nell'esercizio 4 dell'Esercitazione 2 mentre 'tokenizer' ha la stessa interfaccia di 'tokenizer_r' ma usa 'strtok' invece di strtok_r). Inserire nel file 'tokenizer.c' l'implementazione delle due funzioni. Creare quindi una librerie statica 'libtokenizer.a' e riscrivere il programma dell'esercizio 4 dell'Esercitazione 2 in modo che il programma main includa il file 'tokenizer.h' e faccia il linking della libreria statica 'libtokenizer.a'.
 +
 +===== Esercizio 2: libtokenizer.so =====
 +
 +Rifare l'esercizio 2 creando invece che una libreria statica una libreria dinamica ('libtokenizer.so').
 +Verificarne il corretto caricamento in memoria spostando il file 'libtokenizer.so' nella directory /tmp.
 +
 +===== Esercizio 3: macro =====
 +Dato il seguente codice main C:
 +<code>
 +#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;
 +}
 +</code>
 +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:
 +<code>
 +Stampo la matrice M:
 +      1    2    3    4    5    6    7 
 +      2    3    4    5    6    7    8 
 +      3 ....
 +</code>
 +
 +===== Esercizio 4: somma da =====
 +
 +Scrivere un programma C che implementa una funzione somma con la seguente segnatura: 
 +<code>
 +int somma(int x);
 +</code>
 +
 +La funzione 'somma' aggiunge l'intero x letto da un file che contiene un intero per ogni riga al valore calcolato fino a quel momento, quindi ritorna la somma. Il nome del file è passato come argomento al 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/laboratorio19/esercitazionib/esercitazione3.1551709319.txt.gz · Ultima modifica: 04/03/2019 alle 14:21 (6 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki