Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio17:esercitazionib:esercitazione3

Differenze

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

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio17:esercitazionib:esercitazione3 [05/03/2017 alle 09:04 (8 anni fa)] Massimo Torquatiinformatica:sol:laboratorio17:esercitazionib:esercitazione3 [06/03/2017 alle 10:34 (8 anni fa)] (versione attuale) – [Esercizio 3: somma da] Massimo Torquati
Linea 1: Linea 1:
 ====== Esercitazione 3 ====== ====== Esercitazione 3 ======
  
-===== Esercizio 1 =====+===== Esercizio 1: macro1 =====
 Scrivere una funzione macro 'CHECK_PTR' che prende due argomenti, un puntatore ed una stringa, e stampa utilizzando ''perror'' la stringa passata come argomento prima di uscire dal programma con ''EXIT_FAILURE''. Esempio di utilizzo: Scrivere una funzione macro 'CHECK_PTR' che prende due argomenti, un puntatore ed una stringa, e stampa utilizzando ''perror'' la stringa passata come argomento prima di uscire dal programma con ''EXIT_FAILURE''. Esempio di utilizzo:
 <code> <code>
Linea 16: Linea 16:
 Stampare il valore di ritorno di un programma che testa la macro 'CHECK_PTR' sia in caso di successo che di fallimento. Ricordare che il valore di ritorno dell'ultimo comando bash eseguito si può stampare accedendo alla variabile di ambiente bash ''?'' nel modo seguente ''echo $?''.. Stampare il valore di ritorno di un programma che testa la macro 'CHECK_PTR' sia in caso di successo che di fallimento. Ricordare che il valore di ritorno dell'ultimo comando bash eseguito si può stampare accedendo alla variabile di ambiente bash ''?'' nel modo seguente ''echo $?''..
  
-===== Esercizio 2 =====+===== Esercizio 2: macro2 =====
 Dato il seguente codice main C: Dato il seguente codice main C:
 <code> <code>
Linea 41: Linea 41:
 </code> </code>
  
-===== Esercizio 3: matdump ===== +===== Esercizio 3: somma da =====
- +
-Scrivere un programma che prende in ingresso un intero (piccolo, es. <html><=512</html>), alloca in memoria una matrice di 512x512 elementi ''float'' in modo che siano contigui in memoria.  +
-Inizializzare tale matrice (M1) in modo arbitrario (ad esempio M1(i,j) = (i+j)/2.0).  +
-Fare quindi il dump della matrice in formato binario su un file il cui nome è 'mat_dump.dat'+
-Rileggere quindi la matrice dal file 'mat_dump.dat' memorizzandola in una matrice differente  +
-da quella di partenza (chiamata M2). Al termine dell'operazione di lettura effettuare il confronto delle due matrici con la funzione 'confronta'. Tale funzione deve essere implementata in modo "generico" cioe' prende come argomenti un puntatore a funzione con tipo opportuno, il puntatore alle due matrici da confrontare e la size. Testare il programma passando alla funzione 'confronta' la funzione di libreria ''memcmp'' (man 3 memcmp). +
- +
-===== Esercizio 4: somma da =====+
  
 Scrivere un programma C che implementa una funzione somma con la seguente segnatura:  Scrivere un programma C che implementa una funzione somma con la seguente segnatura: 
Linea 56: Linea 48:
 </code> </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. +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.
 Il valore iniziale della somma deve essere INIT_VALUE che viene definito a compilazione utilizzando il flag del compilatore ''-D''. Il programma non deve fare uso di variabili globali. Il valore iniziale della somma deve essere INIT_VALUE che viene definito a compilazione utilizzando il flag del compilatore ''-D''. Il programma non deve fare uso di variabili globali.
  
-Dare anche una implementazione rientrante della funziona 'somma' ('somma_r').+Valutare se la funzione somma cosi' come definita e' rientrante ed eventualmente fornire una versione rientrante 'somma_r'
 + 
 +===== Esercizio 4: Makefile minimale ===== 
 + 
 +Scrivere un ''Makefile'' minimale per compilare l'esercizio precedente. Utilizzare il compilatore ''g++'' ed i flags ''-g -O3 -Wall''. Il ''Makefile'' deve avere anche il target "phony" clean. 
 + 
 +===== Esercizio 5: matdump ===== 
 + 
 +Scrivere un programma che prende in ingresso un intero (piccolo, es. <html><=512</html>), alloca in memoria una matrice di 512x512 elementi ''float'' in modo che siano contigui in memoria.  
 +Inizializzare tale matrice (M1) in modo arbitrario (ad esempio M1(i,j) = (i+j)/2.0).  
 +Fare quindi il dump della matrice sia in formato binario che in formato testuale su un file il cui nome è 'mat_dump.date 'mat_dump.txt' rispettivamente. 
 +Rileggere quindi la matrice dal file 'mat_dump.dat' memorizzandola in una matrice differente  
 +da quella di partenza (chiamata M2). Al termine dell'operazione di lettura effettuare il confronto delle due matrici con la funzione 'confronta'. Tale funzione deve essere implementata in modo "generico" cioe' prende come argomenti un puntatore a funzione con tipo opportuno, il puntatore alle due matrici da confrontare e la size. Testare il programma passando alla funzione 'confronta' la funzione di libreria ''memcmp'' (man 3 memcmp). Notare la differenza di size tra 'mat_dump.dat' e 'mat_dump.txt'
 + 
 +===== ULTERIORI ESERCIZI DA FARE COME HOMEWORK ====
  
-===== Esercizio 5: my word count =====+===== Esercizio 6: my word count =====
  
-Scrivere un programma che realizzi l'equivalente del comando Unix ''wc''  +Scrivere un programma che implementa una versione semplificata del comando Unix ''wc''  
-limitatamente alle opzioni -l e -w (man 1 wc). Usare ''getopt'' per il parsing degli argomenti (man 3 getopt).+limitatamente alle opzioni -l e -w (''man 1 wc''). Usare ''getopt'' per il parsing degli argomenti (''man 3 getopt'').
 Se non vengono passate opzioni, il programma stampa sia il numero Se non vengono passate opzioni, il programma stampa sia il numero
 di linee che il numero di parole del/dei file i cui nomi sono passati come argomento  di linee che il numero di parole del/dei file i cui nomi sono passati come argomento 
Linea 70: Linea 76:
  
  
-===== Esercizio 6: lista di parole =====+===== Esercizio 7: lista di parole =====
  
 Scrivere un programma C che dato un file testuale come argomento, inserisca tutte le parole del file in una lista ordinando le parole alfabeticamente. Ogni linea del file testuale puo' contenere piu' parole. Implementare la seguente interfaccia:  Scrivere un programma C che dato un file testuale come argomento, inserisca tutte le parole del file in una lista ordinando le parole alfabeticamente. Ogni linea del file testuale puo' contenere piu' parole. Implementare la seguente interfaccia: 
Linea 80: Linea 86:
 </code> </code>
  
-Fornire i metodi di creazione e gestione della lista in una libreria statica (libList.a).+Fornire i metodi di creazione e gestione della lista in una libreria statica (libList.a). Scrivere il Makefile per creare la libreria e generare l'eseguibile.
  
informatica/sol/laboratorio17/esercitazionib/esercitazione3.1488704657.txt.gz · Ultima modifica: 05/03/2017 alle 09:04 (8 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki