Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio12:esercitazioni:esercitazione1

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:laboratorio12:esercitazioni:esercitazione1 [20/02/2012 alle 09:23 (14 anni fa)] – creata Susanna Pelagattiinformatica:sol:laboratorio12:esercitazioni:esercitazione1 [24/02/2012 alle 12:03 (14 anni fa)] (versione attuale) – [Esercizio 3: map e reduce su liste] Susanna Pelagatti
Linea 50: Linea 50:
  
 ===== Esercizio 2: liste concatenate di interi ===== ===== Esercizio 2: liste concatenate di interi =====
 +
 +Implementare in C le seguenti funzioni che lavorano su liste concatenate di interi di tipo
 +<code c>
 +typedef struct nodo {
 +  int valore;
 +  struct nodo * next;
 +} nodo;
 +
 +typedef nodo * lista;
 +</code>
 +
 +e definire le seguenti funzioni che operano sulla lista
 +<code c>
 +/** crea una lista vuota
 +   \retval NULL il puntatore alla lista vuota */
 +lista newList (void);
 +
 +/** dealloca la lista 
 +    \param l la lista
 +*/
 +void freeList (lista l);
 +
 +/** iserisce n nella lista l creando un nuovo nodo  
 +   \param l  la lista 
 +   \param n  elemento da inserire
 +   
 +   \retval p puntatore alla nuova lista se l'allocazione ha avuto successo
 +   \retval NULL in caso di errore
 +   
 +    */
 +lista insertList (lista l, int n);
 +
 +/** cancella n dalla lista (se c'e')
 +   \param l  la lista 
 +   \param n  elemento da cancellare
 +   
 +   \retval p puntatore alla nuova lista
 +    */
 +lista removeList (lista l, int n);
 +
 +</code>
 +Testare il funzionamento delle funzioni implementate con un opportuno ''main()''.
 +
 +===== Esercizio 3: map e reduce su liste =====
 +
 +Usando le liste dell'esercizio 1 implementare le seguenti funzioni:
 +<code c>
 +/** trasforma una lista applicando ad ogni elemento la funzione f 
 +   \param l la lista
 +   \param f la funzione da mappare
 +
 +*/
 +void mapList (int (*f) (int), lista l);
 +
 +/** combina gli elementi della lista l usando un operatore binario associativo 
 +   \param l la lsita
 +   \param f l'operatore binario
 +   \param en l'elemento neutro di f
 +
 +   \return la 'somma' degli elementi di l secondo f (l1, f ( l2 , f (... f (lN, en)))...))*/
 +int reduceList(int (*f) (int,int), int en, lista l);
 +</code>
 +
 +Testare il risultato con un opportuno main.
 +
 +===== Esercizio 4: Libreria di liste =====
 +
 +Realizzare una libreria che fornisce le operazioni su liste implementate negli esercizi 1 e 2. 
 +In C tipicamente per realizzare una libreria si difinisce un file ''.h'' con i prototipi ed i tipi messi a disposizione dalla libreria e si fornisce il codice in un opportuno file di libreria ''.a''.
 +
 +Nel nostro caso l'header si chiamera' ''lista.h'' e la libreria si chiamera' ''libList.a''.
 +
 +Procedere nel modo seguente:
 +
 +  * Definire un file ''lista.h'' che contiene i tipi ed i prototipi delle funzioni implementate negli esercizi 1 e 2.
 +  * Definire un file ''lista.c'' che contiene il codice che implementa le funzioni.
 +  * Generare il modulo oggetto ''lista.o'' da inserire nella libreria con il comando ''gcc'' come segue
 +<code>
 +$ gcc -Wall -pedantic -c lista.c
 +</code>
 +  * Creare la libreria con i lcomando ''ar'' come segue
 +<code>
 +$ ar -r libList.a lista.o
 +</code>
 +
 +Quando la creazione e' andata a buon fine creare un file ''main.c'' che contenga uno dei main di test sviluppati negli esercizi precedenti e compilarlo utilizzando la libreria. In particolare :
 +  * il main di test dovra' includere il file ''lista.h''
 +  * in fase di compilazione utilizzare la libreria sviluppata con
 +<code>
 +$ gcc -Wall -pedantic main.c -lList -L.
 +</code>
 +dove l'pzione ''-l'' indica il nome della libreria da usare in fase di linking e l'opzione ''-L'' specifica la directory dove cercarla (oltre alle directory standard tipo ''/usr/lib'').
 +.
 +
 +
  
informatica/sol/laboratorio12/esercitazioni/esercitazione1.1329729781.txt.gz · Ultima modifica: 20/02/2012 alle 09:23 (14 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki