Laboratorio di Programmazione. AA 2004/05.
Esercitazione n. 9

Scopo di questa esercitazione è di familiarizzarsi con la lettura di stringhe mediante scanf, con le strutture e con le operazioni di lettura e scrittura, definizione e manipolazione di liste concatenate.

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. Leggera una stringa lunga meno di 20 caratteri da stdin mediante scanf("%s",buf)   assegnandola ad un array di caratteri dichiarato come  char buf[20]; e far scrivere la lunghezza effettiva della stringa (calcolabile come strlen(buf)+1) oltre alla stringa stessa. Immettere in input una stringa di lunghezza maggiore di 20 caratteri. Cosa succede ?

    Modificare il convertitore di formato in "%20s" e riprovare a dare un input piu' lungo di 20 caratteri.

  2. Se la stringa in input nel precedente esercizio contiene spazi, con il convertitore di formato %s si legge solo a partire dal primo carattere diverso da spazio fino a (ed escluso) il prossimo spazio (o newline). Per leggere una stringa che contenga spazi occorre il seguente converitore di formato: "%[^\n]" (legge dall' inizio della riga di input fino al carattere di newline).

    Provare nel precedente programma (anche nella versione "%20[^\n]") e verificarne il funzionamento. 

  3. 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 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).

  4. Data una struttura dati cosi' definita:
     struct scheda
    { char *autore;
    char *titolo;
    int anno;
    };
    ed un puntatore a struct scheda (di nome ps), allocare dinamicamente memoria per ps e assegnare ai campi i valori "Dennis Ritchie" (autore), "Il mio primo programma C" (titolo), 1972 (anno). Scrivere quindi i valori dei 3 campi su schermo.

  5. Il file linklist.c  presenta un esempio di definizione, manipolazione ed utilizzo di una lista concatenata.

    Esaminare l' implementazione,  compilare il programma e provare ad utilizzarlo.