Laboratorio di Programmazione. AA
2007/08.
Esercitazione n. 10
Scopo di questa esercitazione è di familiarizzarsi con
strutture, unioni e puntatori a strutture.
Al solito, si suggerisce di creare una directory apposita per i
files relativi a questa esercitazione.
.
- 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).
- 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.
- Nel programma precedente, lasciare la sola dichiarazione e
inizializzare i tre campi mediante assegnazione (il campo anno) e
usando la funzione strcpy
(vedi man per l' utilizzo)
per le due stringhe.
- Rifare l' esercizio precedente usando, al posto della variabile
di tipo struct scheda, un
puntatore allo stesso tipo dati.
-
Il seguente programma scrive su standard output la sequenza di bit corrispondene al valore di un intero letto da tastiera.
#include <stdio.h>
int main()
{
int i,intero;
scanf("%i",&intero);
for(i = 8*sizeof(intero)-1; i >= 0; i--)
printf("%d",(intero>>i)&1 );
printf("\n");
return 0;
}
Compilarlo, verificare che funzioni e studiarne il meccanismo di funzionamento (occorre ricordare il funzionamento degli operatori bit a bit).
Lo stesso programma non può² essere utilizzato per scrivere la sequenza di bit di un dato di tipo float perchié© gli operatori bit a bit non sono definiti
per dati non interi. Utilizzare una unione che contenga la sovrapposizione
di uin int e di un float per leggere un float secondo il campo float e
poi analizzare i bit usando la componente intera dell' unione come fatto nel programma sopra riportato. Si potrebbe realizzare lo stesso scopo mediante puntatori opportuni ?