Strumenti Utente

Strumenti Sito


fisica:informatica:201516:secondoanno:laboratorio_9

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:201516:secondoanno:laboratorio_9 [28/04/2016 alle 07:26 (9 anni fa)] – creata Roberta Gorifisica:informatica:201516:secondoanno:laboratorio_9 [28/04/2016 alle 08:11 (9 anni fa)] (versione attuale) – [Esercizio 6] Roberta Gori
Linea 1: Linea 1:
 ====== Esercitazione 8 ====== ====== Esercitazione 8 ======
 +
 +===== Esercizio 1  =====
 +Realizzare un programma C che legge e memorizza in un VLA una sequenza di double di lunghezza non nota a tempo di compilazione.
 +Richiedere all'utente di specificare la lunghezza prima di immettere la sequenza.
 +
 +
 +===== Esercizio 2 =====
 +
 +Modificare la soluzione all'esercizio 1 in modo da utilizzare la funzione ''malloc()'' per allocare l'array dopo aver letto la lunghezza.
 +
 +Verificare la corretta allocazione e gestire gli errori.
 +
 +
 +
 +
 +===== Esercizio 3 =====
 +
 +Le matrici possono essere rappresentate come array di puntatori a righe.
 +
 +Si richiede di implementare le procedure  per la creazione e la deallocazione di matrici ''nxm'' di double. In particolare, la procedura 
 +<code>
 +/** crea una matrice di double  con n righe ed m colonne e  assegna il  puntatore a tale struttuta al puntatore mat, 
 +se c'e' stato un errore assegna al puntatore mat la costante NULL. 
 +  */
 +    void   mat_new (double ***mat, unsigned n, unsigned m);
 +</code>
 +
 +E
 +<code>
 +/** libera la memoria occupata da una matrice di double rappresentata come array di puntatori a righe e
 + pone il puntatore alla struttura mat a NULL.
 +  */
 +void mat_free (double*** mat, unsigned n);
 +</code>
 +Sviluppare un opportuno main che testa che l'allocazione e la deallocazione siano stata effettuata correttamente, anche in caso di errori in corso d'opera.
 +
 +
 +===== Esercizio 4 =====
 +
 +Le matrici possono essere rappresentate come array di puntatori a righe.
 +
 +E se invece di una  procedura per l'allocazione  avessimo usato una  funzione?  Implementare adesso una funzione    per la creazione di matrici ''nxm'' di double. In particolare, la  funzione deve essere
 +<code>
 +/** crea una matrice di double rappresentata come array di puntatori a righe e restituisce 
 +il puntatore alla struttura creata, NULL se c'e' stato un errore, 
 +  */
 + double** mat_new_fun (unsigned n, unsigned m);
 +</code>
 +
 +Sviluppare un opportuno main che testa che l'allocazione  sia stata effettuata correttamente, anche in caso di errori in corso d'opera.
 +
 +
 +===== Esercizio 5=====
 +
 +Modificare la soluzione all'esercizio 2 in modo da utilizzare la funzione ''relloc()'' per fare crescere dinamicamente l'array senza richiedere la lunghezza della sequenza.
 +
 +Verificare la corretta allocazione e gestire gli errori.
 +
 +
 +
 +===== Esercizio 6 =====
 +Eseguire il seguente programma C  
 +<code c>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#define SIZE 10000000000
 +
 +int main (void) {
 +  double * h;
 +
 +  h = malloc(SIZE*sizeof(double));
 +  
 +  if ( h == NULL ) {
 +    perror("malloc");
 +    exit(EXIT_FAILURE);
 +  }
 +  
 +  printf("Allocato h = %p\n",(void *) h);
 +
 +  return 0;
 +}
 +</code>
 +cosa succede ? Cercate di capire che cosa succede quando va in esecuzione ''perror()'' andando a verificare il manuale (sezione 3 ''man 3 perror'')
 +
 +===== Esercizio 7 (Strutture) =====
 +Scrivete una funzione C nuovo_mazzo() che crea un mazzo (mischiato!) di 40 carte utilizzando i
 +seguenti tipi: 
 +<code>
 +/** 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 
 +<code>
 +stampa_mazzo()
 +</code>
 + che stampa le carte del mazzo sullo standard output in modo
 +gradevole. Definite i parametri ed i valori restituiti dale funzioni opportunamente. 
 +
 +===== Esercizio 8 (Strutture) =====
 +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 ?
 +se digitiamo 
 +4Fiori
 +io gioco 2Cuori, preso
 +Mano #2: Hai in mano
 +KFiori 5Picche QCuori
 +io gioco 7Picche
 +Cosa giochi ?
 +</code>
fisica/informatica/201516/secondoanno/laboratorio_9.1461828380.txt.gz · Ultima modifica: 28/04/2016 alle 07:26 (9 anni fa) da Roberta Gori

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki