Strumenti Utente

Strumenti Sito


fisica:informatica:201516:secondoanno:laboratorio_9

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

/** 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);

E

/** 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);

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

/** 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);

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

#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;
}

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:

/** 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;

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 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:

$./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 ?
fisica/informatica/201516/secondoanno/laboratorio_9.txt · Ultima modifica: 28/04/2016 alle 08:11 (8 anni fa) da Roberta Gori