11/11/25 3
Strutture
Cos’èuna struttura?
Una struttura è una collezione
contenente una o più variabili, di
uno o più tipi, raggruppate da un
nome comune. Le strutture
consentono di trattare come un
unico oggetto un insieme di variabili
correlate
4.
11/11/25 4
Strutture
Comesi definisce una struttura?
Un punto nel piano cartesiano è
definito da due valori: uno per le
ascisse e l’altro per le ordinate.
Struct elemento{
float ascissa;
float ordinata;
};
typedef struct elemento Punto;
Definisco una struttura di
tipo elemento
Nella struttura deifnisco due
variabili float
struct elemento=Punto
5.
11/11/25 5
Strutture
Comeuso una struttura?
Posso usare una struttura come una
qualunque altra variabile.
Posso definire una variabile di tipo Punto
Punto elemento_del_piano;
Oppure definire un’array di variabili Punto
Punto punti[2];
E far riferimento ai campi come:
punti[0].ascissa
punti[0].ordinata
Inoltre posso passare le variabili Punto come parametri ad una funzione
distanza(punti[0],punti[1]);
6.
11/11/25 6
Strutture
Scriviamoun programma che, dati
due punti sul piano cartesiano,ne
calcola la distanza
L’utente inserirà i valori x e y dei due
punti che verranno gestiti tramite una
struttura e il programma restituirà la
distanza fra P e Q
Vediamo il codice…
7.
11/11/25 7
Strutture
#include <stdio.h>
#include<math.h> /*includo la libreria per SQRT*/
/*definisco una struttura formata da due campi float*/
struct elemento {
float ascissa;
float ordinata;
};
typedef struct elemento Punto;
/*questo TIPO di struttura la chiamo Punto*/
float distanza(Punto, Punto); /*il prototipo funzione*/
void main(void) {
Punto punti[2]; /*def un vettore di due elementi*/
/*ogni elemento è una struttura Punto*/
float dist; /*definisco la varibile dist */
system("cls"); /*pulisco lo schermo*/
/*metto i valori nei campi delle strutture*/
printf("Inserisci l'ascissa del primo punto: n");
scanf("%f",&punti[0].ascissa);
printf("Inserisci l'ordinata del primo punto: n");
scanf("%f",&punti[0].ordinata);
printf("Inserisci l'ascissa del secondo punto: n");
scanf("%f",&punti[1].ascissa);
printf("Inserisci l'ordinata del secondo punto: n");
scanf("%f",&punti[1].ordinata);
dist=distanza(punti[0],punti[1]);
/*chiamo distanza*/
/*passando le strutture come parametri*/
printf("La distanza fra i due punti e': %fn",dist);
system("pause");
}
float distanza(Punto p1, Punto p2) {
float delta1 = p1.ascissa - p2.ascissa;
float delta2 = p1.ordinata - p2.ordinata;
return sqrt((delta1*delta1)+(delta2*delta2));
}
8.
11/11/25 8
Strutture eliste
Cos’è una lista?
Una lista è una struttura dati astratta che
denota una collezione ordinata di oggetti
9.
11/11/25 9
Strutture eliste
Implementiamo una lista di punti
typedef struct elemento{
int ascissa;
int ordinata;
struct elemento *next;
};
typedef struct elemento punto;
Definisco una struttura, di
tipo elemento, formata da 3
campi
I primi due campi sono
variabili intere
Il terzo campo è un puntatore
ad una struttura elemento
struct elemento=punto
10.
11/11/25 10
Strutture eliste
Possiamo immaginare una lista
composta in questo modo:
3
2
4
45
32
0
Ogni elemento della
lista è una struttura
11.
11/11/25 11
Strutture eliste
Scriviamo un programma che permetta di inserire,
visualizzare e cancellare delle coppie di punti da una
lista in modo da implementare il funzionamento di
uno stack
2,4
23,5
32,65
0,7
Input
Output
12.
11/11/25 12
Strutture eliste
#include <stdio.h>
struct elemento{ /*definisco una struttura formata da tre campi*/
int ascissa;
int ordinata;
struct elemento *next; /*questo campo contiene un ptr ad una struttura*/
};
typedef struct elemento punto;
punto* inserisci(punto *); /*prototipi di funzione*/
punto *cancella(punto *first);
void stampa(punto *first);
void main(void){
int scelta;
punto *primo=NULL; /*Puntatore a punto, inizializzato a NULL*/
do{
printf("Scegli la tua opzionen");
printf("1) Inserisci nuovo punton");
printf("2) Cancella ultimo punton");
printf("3) Stampa lista corrente dei puntin");
printf("4) Termina programman");
scanf("%d",&scelta);
switch(scelta){
case 1:
primo=inserisci(primo); /*chiamo inserisci passando il puntatore "primo"*/
break;
case 2:
primo=cancella(primo); /*chiamo cancella passando il puntatore "primo"*/
break;
case 3:
stampa(primo); /*chiamo stampa passando il puntatore "primo"*/
break;
case 4:
break;
default:
printf("Scelta non corretta; inserisci nuovamentenn");
}
}while (scelta!=4);
}
13.
11/11/25 13
punto* inserisci(punto*first){
int asc,ord;
punto *q; /*dichiaro un puntatore a struttura punto*/
printf("nInserisci le coordinate del nuovo punton");
printf("Ascissa=");
scanf("%d",&asc);
printf("Ordinata=");
scanf("%d",&ord);
q=(punto *)malloc(sizeof(punto)); /*allocazione dinamica memoria per il nuovo elemento*/
if (q==NULL) { /*verifico che l'allocazione abbia avuto successo*/
printf("nMemoria esaurita!n");
return(first);
}
q->ascissa=asc; /*inserisco nei campi della struttura puntata da q i valori*/
q->ordinata=ord;
q->next=first; /*inserimento in testa*/
printf("Punto (%d,%d) inserito con successo.n",q->ascissa,q->ordinata);
return q;
}
/******************************************************************************/
punto *cancella(punto *first){
punto *p; /*dichiaro un puntatore alla struttura punto*/
if (first==NULL)
printf("nNessun elemento nella lista.nn");
else{
p=first->next; /*metto in p il valore next della strutt. puntata da first*/
free(first); /*deallocazione della memoria*/
}
return p;
}
/******************************************************************************/
14.
11/11/25 14
void stampa(punto*first){
int cont=1;
punto *q; /*dichiaro un puntatore alla struttura punto*/
if (first==NULL)
printf("La lista e' vuota.n");
else
for(q = first; q != NULL; q = q-> next){
printf("%d -- (%d,%d)n",cont,q->ascissa,q->ordinata);
cont++;
}
}