Laboratorio di Programmazione. AA 2005/06.
Esercitazione n. 9

Scopo di questa esercitazione è di familiarizzarsi con stringhe e strutture.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.
Ricordare inoltre che i prototipi delle function di libreria per operare sulle strighe risiedono nel file di header string.h.


  1. Definire un tipo dati "punto2D" mediante una struttura contenente due campi float per le coordinate x e y. Definire un secondo tipo dati "segmento2D" come struttura i cui due campi sono di tipo "punto2D". Definire infine una function che torni un float e di argomento "puntatore a  segmento2D" che calcoli la lunghezza del segmento secondo la formula: lunghezza = radice quadrata della somma dei quadrati delle differenze delle cordinate x e y dei due punti estremi dei segmenti. Usarla per calcolare la lunghezza del segmento di estremi (-1,2) e (3,5).


  2. La function strtok  ha  il prototipo   char *strtok(char *s, const char *delim);   La function permette di "spezzare"  la  stringa primo argomento in sottostringhe (token)  mediante la specifica di un insieme di caratteri di separazione mediante la seconda stringa argomento. Se il primo argomento e' la costante NULL, la ricerca della sottostringa si intende effettuata sulla stringa primo argomento della precedente chiamata a strtok con primo argomento diverso da NULL.  Ad ogni successiva chiamata con primo argomento NUL:L,  la ricerca inizia dall' ultima posizione raggiunta nella stringa. La stringa contenente i delimitatori puo' essere cambiata da una chiamata alla successiva.
    Esempio:
    #include <stdio.h>
    #include <string.h>
    int main(void)

    {

    char *token;
    char line[] = "...Linea esempio.Che non e' troppo lunga. Forse.";
    char *search = " .";

    token = strtok(line, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    return 0;
    }
    Modificare l' esempio in modo da estrarre tutti i token separati dal solo punto copiando le stringhe corrispondenti ad ogni token, ciascuna su una diversa componente di un array di stringhe (dichiarare l' array di stringhe come un array di array (matrice)  di char)..

  3. Data una struttura dati così  definita:
     struct scheda
    { char *autore;
    char *titolo;
    int anno;
    };
    allocare dinamicamente memoria per una variabile del tipo struct scheda ed inizializzarla, contestualmente alla dichiarazione, mediante i valori "Dennis Ritchie" (autore), "Il mio primo programma C" (titolo), 1972 (anno). Scrivere quindi i valori dei 3 campi su schermo.

  4. Nel programma precedente, lasciare la sola dichiarazione e ininzializzare i tre campi mediante assegnazione (il campo anno) e usando la funzione strcpy (vedi man per l' utilizzo) per le due stringhe.

  5. Rifare l' esercizio precedente usando, al posto della variabile di tipo struct scheda, un puntatore allo stesso tipo dati.