Strumenti Utente

Strumenti Sito


fisica:informatica:201415:esercitazioni:esercitazione7.7

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
fisica:informatica:201415:esercitazioni:esercitazione7.7 [03/02/2015 alle 17:13 (11 anni fa)] – creata Susanna Pelagattifisica:informatica:201415:esercitazioni:esercitazione7.7 [20/03/2015 alle 14:37 (10 anni fa)] (versione attuale) Susanna Pelagatti
Linea 1: Linea 1:
-====== Esercitazione strutture ======+====== Esercitazione stdio.h, stringhe, strutture ======
  
-===== Esercizio 1: Archivio studenti =====+===== Esercizio 1: Generare un file di numeri casuali ===== 
 +Utilizzare la libreria ''stdio.h'' per creare un file ''misure'' che contenga 150 numeri reali nell'intervallo (0,20] generati casualmente con la funzione ''rand()''. I numeri devono essere scritti uno per linea separati da '\n'.
  
 +===== Esercizio 2: Calcolare l'istogramma =====
 +Utilizzare il file ''misure'' generato nell'esercizio precedente e calcolare il numero di valori generati che ricadono nei 10 intervalli 
 +<code>
 +(0, 2] (2,4] ..... (18,20]
 +</code>
 +stampare il numero dei valori per ciascun intervallo sullo standard output.
 +
 +===== Esercizio 3: Archivio studenti  =====
 +
 +Scrivere un programma C che legge una sequenza di studenti dal file ''anagrafe_studenti''.
 +Ogni studente e' memorizzato su file in una singola linea contenente tre stringhe di caratteri separate da ':' e terminata da '\n' secondo il formato
 +<code>
 +cognome:nome:numero_di_matricola
 +</code>
 +quindi ad esempio
 +<code>
 +...
 +Rossi:Mario:234445
 +Bixio:Nino:435678
 +Garibaldi:Giuseppe:787899
 +...
 +</code>
 +
 +Il programma legge da file gli studenti e memorizza i dati relativi a ciascun studente in un array di strutture di tipo:
 +<code c>
 +#define N 50
 +
 +typedef struct {
 +  char nome[N+1];
 +  char cognome[N+1];
 +  unsigned matricola;
 +  } studente_t;
 +</code> 
 +
 +L'array viene poi ordinato per il campo ''cognome'' e nel caso di cognomi uguali per il campo ''nome'' e poi stampato sullo standard output.
 +
 +Suggerimento: Per la lettura da file usare ''fscanf()'' con una opportuna stringa di formattazione oppure ''fgets()'' per leggere fino al primo ''\n'' e ''strchr()'' per localizzare i caratteri separatori '':''
 +
 +===== Esercizio 5: La linea di comando: ''argc'' e ''argv'' =====
 +
 +In C e' possibile accedere agli argomenti passati sulla linea di comando tramite la i parametri della funzione main che puo' essere dichiarata di tipo :
 +<code c>
 +int main (int argc, char* argv[]) {
 +...
 +}
 +</code>
 +in questo modo all'attivazione ''argc'' contiene il numero di argomenti passati sulla linea di comando, e l'array di stringhe ''argv'' contiene tutte le parole trovate sulla linea di comando usando come separatori lo spazio bianco (' ') e il tab ('\t'). 
 +Ad esempio, se ho compilato il mio programma in un eseguibile ''prova'' e l'ho attivato con il comando
 +<code bash>
 +bash$ ./prova pippo pluto paperone
 +</code>
 +''argc'' varra' 4, ''argv[0]'' conterra' //./prova//, ''argv[1]'' conterra' //pippo//, ''argv[2]'' //pluto// ed ''argv[3]'' //paperone//.
 +
 +Scrivere un programma C che stampa sullo standard output il numero di argomenti e tutte le parole sulla linea di comando separate da un newline ('\n'), ad esempio
 +<code bash>
 +bash$ ./prova pippo pluto paperone
 +./prova ha 3 argomenti
 +pippo
 +pluto
 +paperone
 +</code>
 +
 +===== Esercizio 6: Leggere il file anagrafe da linea di comando =====
 +Modificare la soluzione dell'esercizio 4 in modo da leggere il nome del file di anagrafe da linea di comando e da poter specificare opzionalmente il nome del file in cui scrivere la sequenza ordinata di studenti. Cioe'
 +<code>
 +bash$ ./leggistud nome_file [-o out_file]
 +</code>
 +legge gli studenti dal file ''nome_file'' passato come primo parametro. Se specificato un file per l'output (opzione ''-o'') l'elenco degli studenti viene stampato su file invece che su standard output. 
 +
 +Fare in modo di stampare un opportuno messaggio di uso se ''leggistud'' e' attivato con un numero di parametri diverso da 2 o in modo sbagliato.
 +
 +//Approfondimenti//: provare ad utilizzare la funzione di libreria ''getopt'' (''man 3 getopt'') per eseguire l'analisi (//parsing//) della linea di comando. Questa funzione e' realmente utilizzata per analizzare la linea di comando dei comandi di shell che utilizziamo normalmente.
 +
 +===== Esercizio 8: Mazzo di carte  =====
 +Scrivete una funzione C ''nuovo_mazzo()'' che crea un mazzo (mischiato!) di 40 carte utilizzando i seguenti tipi:
 +<code c>
 +/** i valori delle carte */
 +typedef enum valori{ASSO,DUE,TRE,QUATTRO,CINQUE,SEI,SETTE,FANTE,DONNA,RE} valori_t;
 +/** i semi delle carte */
 +typedef enum semi{CUORI,QUADRI,FIORI,PICCHE } semi_t;
 +/** una carta e' data da un valore ed un seme */
 +typedef struct carta {
 +  /** valore */
 +  valori_t val; 
 +  /** seme */
 +  semi_t seme;  
 +} carta_t;
 +</code>
 +ed una funzione ''stampa_mazzo()'' che stampa le carte del mazzo sullo standard output in modo gradevole. Definite i parametri ed i valori restituiti dale funzioni opportunamente.
 +
 +===== Esercizio 9: Il gioco della briscola  =====
 +Utilizzando le funzioni dell'esercizio precedente realizzate un programma C che gioca a briscola con un utente. Il programma crea il mazzo di carte, stampa sullo standard output il nome della briscola e le carte in mano all'utente ed attende sullo standard input la giocata. Il programma puo' giocare con una strategia semplice a piacere (ad esempio la prima carta della mano). Ad esempio:
 +<code>
 +$./briscola
 +Nuova partita, briscola CUORI 
 +Mano #1: Hai in mano
 +4Fiori 5Picche QCuori
 +Cosa giochi ?
 +</code>
 +se digitiamo
 +<code>
 +4Fiori
 +io gioco 2Cuori, preso
 +Mano #2: Hai in mano
 +KFiori 5Picche QCuori
 +io gioco 7Picche
 +Cosa giochi ?
 +</code>
 +Il gioco continua fino all'esaurimento delle carte. Alla fine il programma stampa  il vincitore ed i punti totalizzati. Ad esempio:
 +<code>
 +Hai vinto con 87 punti!
 +</code>
fisica/informatica/201415/esercitazioni/esercitazione7.7.1422983628.txt.gz · Ultima modifica: 03/02/2015 alle 17:13 (11 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki