INFORMATICA Il costrutto struct
Il costrutto struct <ul><li>Supponiamo di dover realizzare una base dati contenente i nomi e l’anno di   corso di una popo...
Il costrutto struct <ul><li>La difficoltà è superata da un altro tipo di dato strutturato, molto più flessibile: il tipo  ...
Il costrutto struct <ul><li>Sono numerose le informazioni che intrinsecamente possono accordarsi con questo tipo di dato, ...
Il costrutto struct <ul><li>Poiché in italiano il termine “ struttura  ” è usato con un'accezione più   generica, viene di...
Il costrutto struct <ul><li>Una  struct   viene definita elencando i nomi che si intendono attribuire ai singoli campi ( i...
Il costrutto struct: esempi <ul><li>definizione di una variabile di tipo  record   una_persona : </li></ul><ul><li>struct ...
Il costrutto struct : esempi <ul><li>definizione di un record denominato  data  e di una variabile  day  di quel tipo: </l...
Il costrutto struct: esempi <ul><li>definizione di  numero complesso  dato come  x + iy , dove  x  e  y  sono numeri reali...
Il costrutto struct <ul><li>Le variabili possono essere dichiarate nell’ambito della stessa struttura,   come succede per ...
<ul><li>La dichiarazione di una  struct  corrisponde alla creazione di un nuovo tipo. Pertanto (come per  enum ) si può ri...
Il costrutto struct <ul><li>Un  campo  di una  struct  può essere un  vettore , una  matrice  o un’altra  struct . Inoltre...
Il costrutto struct <ul><li>Esempio: </li></ul><ul><li>/*  uso della struttura complesso  */ </li></ul><ul><li>struct comp...
struct: esempio <ul><li>Esempio: programma che riceve in input da tastiera delle  sequenze  di caratteri (parole) e calcol...
struct: esempio <ul><li>#include <stdio.h> </li></ul><ul><li>#define NUM_MAX_CAR 100 </li></ul><ul><li>typedef enum {FALSO...
struct: esempio <ul><li>num_car_pres = 0; </li></ul><ul><li>printf (“
Introduci le sequenze di caratteri.
 &quot;); </li><...
struct: esempio <ul><li>while ((!trovato)  && (indice < num_car_pres)) </li></ul><ul><li>if (vett_car[indice].carattere ==...
struct: esempio <ul><li>/*  stampa i risultati  */ </li></ul><ul><li>  </li></ul><ul><li>printf (“
Carattere  Presenze
&qu...
struct come parametro di funzioni <ul><li>Le  struct  si comportano a tutti gli effetti come variabili di tipo semplice, c...
struct come parametro di funzioni <ul><li>Esempio:  somma di due numeri complessi. </li></ul><ul><li>#include <stdio.h> </...
struct come parametro di funzioni <ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>complesso x, y, total; </li></ul><u...
struct come parametro di funzioni <ul><li>complesso somma_cmplx (complesso dato1, complesso dato2)  </li></ul><ul><li>{ </...
struct come parametro di funzioni <ul><li>Osservazioni: </li></ul><ul><li>  </li></ul><ul><ul><li>nel programma principale...
Esempio: punti nel piano <ul><li>In un file,  il cui nome va richiesto da tastiera, ci sono le coordinate X e Y di una ser...
Esempio: punti nel piano <ul><li>Ad esempio se il file dei punti si chiama PUNTI.DAT e contiene: </li></ul><ul><li>2 2 </l...
Esempio: punti nel piano <ul><li>#include <stdio.h> </li></ul><ul><li>#include <math.h> </li></ul><ul><li>#define NMAX 100...
Esempio: punti nel piano <ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>FILE *input, *output; </li></ul><ul><li>int ...
Esempio: punti nel piano <ul><li>np = 0; </li></ul><ul><li>while (fscanf (input, &quot;%lf%lf&quot;, &punti[np].x,   &punt...
Esempio: punti nel piano <ul><li>/*  Operazioni finali: chiede il nome del file di output e lo crea  */ </li></ul><ul><li>...
Esempio: punti nel piano <ul><li>void bubble (modello punti[ ], int n) </li></ul><ul><li>{  </li></ul><ul><li>modello prov...
Upcoming SlideShare
Loading in …5
×

12 Struct

2,640 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,640
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
73
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

12 Struct

  1. 1. INFORMATICA Il costrutto struct
  2. 2. Il costrutto struct <ul><li>Supponiamo di dover realizzare una base dati contenente i nomi e l’anno di corso di una popolazione studentesca. Non si può ricorrere a una matrice bidimensionale con una dimensione per le variabili di tipo carattere (per i nomi) e l'altra per la variabile intera (anno di corso): le matrici possono essere di dimensioni qualsiasi ma il tipo-base deve essere unico! </li></ul><ul><li>Occorrerebbe definire una matrice (vettore di vettori) di caratteri per i nomi e un vettore di interi per l'anno di corso: due strutture dati separate tra loro. Pertanto l'allineamento dei dati inerenti la stessa persona dovrà essere garantito dal programmatore mediante una efficiente politica di gestione di indici. </li></ul>
  3. 3. Il costrutto struct <ul><li>La difficoltà è superata da un altro tipo di dato strutturato, molto più flessibile: il tipo struct . </li></ul><ul><li>Si tratta di una collezione di dati, anche di caratteristiche molto diverse tra loro (tipo diverso!), che però sono identificati dallo stesso nome. </li></ul><ul><li>  </li></ul><ul><li>Una struttura è formata da membri o campi . Ogni campo rappresenta un dato (col suo tipo) della collezione . </li></ul><ul><li>In questo modo dati di natura diversa (ovvero rappresentati in memoria da codici binari diversi) ma riferentesi alla stessa cosa, possono condividere lo stesso nome </li></ul>
  4. 4. Il costrutto struct <ul><li>Sono numerose le informazioni che intrinsecamente possono accordarsi con questo tipo di dato, ad esempio: </li></ul><ul><ul><li>una data è composta da giorno ( int ), mese ( char ) e anno ( int ) e quindi si può definire una struttura composta da questi tre campi; </li></ul></ul><ul><ul><li>una persona è identificata da nome , cognome , data di nascita , codice fiscale , stato civile , indirizzo , ecc., quindi si può definire una struttura composta da tutti questi campi; </li></ul></ul><ul><ul><li>la classifica di una manifestazione sportiva è composta da nome e cognome degli atleti a cui è associata la prestazione (tempo impiegato, punti, ecc.). </li></ul></ul>
  5. 5. Il costrutto struct <ul><li>Poiché in italiano il termine “ struttura ” è usato con un'accezione più generica, viene di solito utilizzata la dizione di record , mutuata da altri linguaggi, e per i membri della struttura quella di campi . </li></ul><ul><li>I campi di un record possono essere di tipo diverso, scalari , vettori o, a loro volta, altre struct . </li></ul><ul><li>  </li></ul><ul><li>Differentemente dai vettori , i cui elementi sono identificati dal nome e dalla posizione occupata, nelle struct i singoli elementi sono identificati dal nome della struttura e dal nome del campo .   </li></ul>
  6. 6. Il costrutto struct <ul><li>Una struct viene definita elencando i nomi che si intendono attribuire ai singoli campi ( identificatori di campo ). Per ogni identificatore di campo poi, occorre specificare il tipo. </li></ul><ul><li>struct [ nome_struct ] </li></ul><ul><li>{ </li></ul><ul><li>tipo_1 variabile_1; /* campo 1 */ </li></ul><ul><li>tipo_2 variabile_2; /* campo 2 */ </li></ul><ul><li>.......... </li></ul><ul><li>tipo_n variabile_n; /* campo n */ </li></ul><ul><li>} [variabile] [,variabile]....; </li></ul><ul><li>dove le parti opzionali sono tra parentesi quadra. </li></ul><ul><li>nome_struct costituisce il tag , cioè il nome che identifica quel particolare tipo di struttura in successive dichiarazioni di variabili. </li></ul>
  7. 7. Il costrutto struct: esempi <ul><li>definizione di una variabile di tipo record una_persona : </li></ul><ul><li>struct </li></ul><ul><li>{ </li></ul><ul><li>char nome[20]; </li></ul><ul><li>char cognome[20]; </li></ul><ul><li>int giorno_nascita; </li></ul><ul><li>int mese_nascita; </li></ul><ul><li>int anno_nascita; </li></ul><ul><li>float peso; </li></ul><ul><li>int altezza; </li></ul><ul><li>} una_persona; </li></ul>
  8. 8. Il costrutto struct : esempi <ul><li>definizione di un record denominato data e di una variabile day di quel tipo: </li></ul><ul><li>struct data </li></ul><ul><li>{ </li></ul><ul><li>int giorno; </li></ul><ul><li>enum {gennaio, febbraio, marzo, aprile, maggio, giugno, </li></ul><ul><li>luglio, agosto, settembre, ottobre, novembre, </li></ul><ul><li>dicembre} mese; </li></ul><ul><li>int anno; </li></ul><ul><li>}; </li></ul><ul><li>struct data day; </li></ul>
  9. 9. Il costrutto struct: esempi <ul><li>definizione di numero complesso dato come x + iy , dove x e y sono numeri reali e : vengono definiti la struct denominata complesso e la variabile val_complex di quel tipo record . </li></ul><ul><li>struct complesso </li></ul><ul><li>{ </li></ul><ul><li>double reale; </li></ul><ul><li>double immaginario; </li></ul><ul><li>} val_complex; </li></ul>
  10. 10. Il costrutto struct <ul><li>Le variabili possono essere dichiarate nell’ambito della stessa struttura, come succede per la variabile val_complex , oppure esternamente come nel caso di day : ad esempio, dopo le dichiarazioni precedenti, sarebbero lecite le seguenti: </li></ul><ul><li>struct complesso num_complesso; </li></ul><ul><li>struct data giorno; </li></ul><ul><li>I campi di una struct sono racchiusi in un blocco e quindi il loro campo di esistenza è limitato: è per questo che è lecita la definizione della variabile giorno nell’esempio precedente, pur esistendo un campo con lo stesso nome. </li></ul><ul><li>Anche una funzione può essere definita di tipo struct e pertanto può restituire un valore di questo tipo. </li></ul>
  11. 11. <ul><li>La dichiarazione di una struct corrisponde alla creazione di un nuovo tipo. Pertanto (come per enum ) si può rinominare questo tipo mediante il typedef per ottenere una struttura del programma più comprensibile e più leggibile. </li></ul><ul><li>Esempio: </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>…………………… </li></ul><ul><li>typedef struct </li></ul><ul><li>{ </li></ul><ul><li>double reale; </li></ul><ul><li>double immaginario; </li></ul><ul><li>} complesso; </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>complesso val_complex; /* dichiarazione della variabile val_complex */ </li></ul><ul><li>……………………………… .. </li></ul>Il costrutto struct creazione del nuovo tipo struct e ridefinizione del nome: il nuovo tipo si chiamerà complesso .
  12. 12. Il costrutto struct <ul><li>Un campo di una struct può essere un vettore , una matrice o un’altra struct . Inoltre le struct possono costituire il tipo base per la definizione di vettori . </li></ul><ul><li>  </li></ul><ul><li>Nel corso del programma si può far riferimento ad uno specifico campo di una struct indicando l'identificatore della variabile seguito da un punto e dal nome del campo . </li></ul><ul><li>  </li></ul><ul><li>Il campo di una struct deve essere trattato come una qualsiasi altra variabile. </li></ul><ul><li>Sul tipo struct nel suo complesso non agisce alcun operatore, ma è lecita l'assegnazione di un’intera struct a un’altra struct dello stesso tipo. </li></ul><ul><li>I campi delle struct mantengono invece le proprietà, e quindi gli operatori, del tipo a cui appartengono . </li></ul>
  13. 13. Il costrutto struct <ul><li>Esempio: </li></ul><ul><li>/* uso della struttura complesso */ </li></ul><ul><li>struct complesso </li></ul><ul><li>{ </li></ul><ul><li>double reale; </li></ul><ul><li>double immaginario; </li></ul><ul><li>}; </li></ul><ul><li>struct complesso x; </li></ul><ul><li>.............. </li></ul><ul><li>x.reale = 12.5; </li></ul><ul><li>x.immaginario = 0.7; </li></ul>
  14. 14. struct: esempio <ul><li>Esempio: programma che riceve in input da tastiera delle sequenze di caratteri (parole) e calcola il numero di volte che è presente ciascun carattere (frequenza statistica). La fine dell'introduzione delle parole sia segnalata da EOF ( <CTRL>+Z ). Il programma dovrà visualizzare tutti i caratteri diversi introdotti e la loro frequenza statistica. </li></ul><ul><li>  </li></ul><ul><li>La base dati può essere costituita da un vettore di struct avente due campi: un campo carattere, di tipo char , e un campo presenze , di tipo int . </li></ul><ul><li>  </li></ul><ul><li>Per ogni carattere letto da tastiera, si controlla se è già presente: s e presente, si incrementa il campo presenze di quel carattere, altrimenti lo si memorizza nel campo carattere e si pone il valore 1 nel campo presenze . </li></ul>
  15. 15. struct: esempio <ul><li>#include <stdio.h> </li></ul><ul><li>#define NUM_MAX_CAR 100 </li></ul><ul><li>typedef enum {FALSO, VERO} boolean; </li></ul><ul><li>typedef struct </li></ul><ul><li>{ </li></ul><ul><li>char carattere; </li></ul><ul><li>int presenze; </li></ul><ul><li>} memoria; </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int indice, num_car_pres; </li></ul><ul><li>memoria vett_car[NUM_MAX_CAR]; /* vettore di strutture */ </li></ul><ul><li>int carat; </li></ul><ul><li>boolean trovato; </li></ul>
  16. 16. struct: esempio <ul><li>num_car_pres = 0; </li></ul><ul><li>printf (“ Introduci le sequenze di caratteri. &quot;); </li></ul><ul><li>printf (&quot; Usa <CR> per andare a capo e <EOF> per finire: &quot;); </li></ul><ul><li>while ((( carat = getchar()) != EOF) && (num_car_pres < </li></ul><ul><li>NUM_MAX_CAR)) </li></ul><ul><li>/* finché non si arriva a EOF */ </li></ul><ul><li>{ </li></ul><ul><li>if (carat != ' ') </li></ul><ul><li>{ /* carat è diverso da new-line */ </li></ul><ul><li>/* cerca nella struct memoria se il carattere è già presente */ </li></ul><ul><li>trovato = FALSO; </li></ul><ul><li>indice = 0; </li></ul>
  17. 17. struct: esempio <ul><li>while ((!trovato) && (indice < num_car_pres)) </li></ul><ul><li>if (vett_car[indice].carattere == carat) </li></ul><ul><li>{ /* il carattere introdotto esiste già */ </li></ul><ul><li>trovato = VERO; </li></ul><ul><li>vett_car[indice].presenze++; /* incr. campo presenze */ </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>indice++; /* increm. indice per scansione */ </li></ul><ul><li>if (!trovato) </li></ul><ul><li>{ /* il carattere non c’è ancora nel vettore di struct: lo inserisce */ </li></ul><ul><li>vett_car[num_car_pres].carattere = carat; </li></ul><ul><li>vett_car[num_car_pres].presenze = 1; </li></ul><ul><li>num_car_pres++; /* incr. numero di caratteri inseriti nella struct*/ </li></ul><ul><li>} /* if not trovato */ </li></ul><ul><li>} /* if not eoln */ </li></ul><ul><li>} /* while not eof... */ </li></ul>
  18. 18. struct: esempio <ul><li>/* stampa i risultati */ </li></ul><ul><li>  </li></ul><ul><li>printf (“ Carattere Presenze &quot;); </li></ul><ul><li>for (indice = 0; indice < num_car_pres; indice++) </li></ul><ul><li>{ </li></ul><ul><li>printf (&quot; %c &quot;, vett_car[indice].carattere); </li></ul><ul><li>printf (&quot;%6d &quot;, vett_car[indice].presenze); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. struct come parametro di funzioni <ul><li>Le struct si comportano a tutti gli effetti come variabili di tipo semplice, con la particolarità che possono essere viste sia come un insieme aggregato, ad esempio nell'assegnazione di un record ad un altro, sia come singoli elementi ( campi ). </li></ul><ul><li>  </li></ul><ul><li>In quest'ultimo caso, l'identificatore dell'elemento è costituito dal nome dell'intera struttura seguito dal punto e dal nome del campo stesso. </li></ul><ul><li>  </li></ul><ul><li>Anche una funzione può essere definita di tipo struct e pertanto può restituire un valore di questo tipo. </li></ul>
  20. 20. struct come parametro di funzioni <ul><li>Esempio: somma di due numeri complessi. </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>#include <math.h> </li></ul><ul><li>  </li></ul><ul><li>typedef struct </li></ul><ul><li>{ </li></ul><ul><li>double reale; </li></ul><ul><li>double immagin; </li></ul><ul><li>} complesso ; </li></ul><ul><li>/* prototipo della funzione per la somma dei due numeri complessi */ </li></ul><ul><li>complesso somma_cmplx (complesso dato1, complesso dato2);   </li></ul>
  21. 21. struct come parametro di funzioni <ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>complesso x, y, total; </li></ul><ul><li>printf (“ Parte reale di x = &quot;); scanf (&quot;%lf&quot;, &x.reale); </li></ul><ul><li>printf (“ parte immaginaria di x = &quot;); scanf (&quot;%lf&quot;, &x.immagin); </li></ul><ul><li>printf (“ Parte reale di y = &quot;); scanf (&quot;%lf&quot;, &y.reale); </li></ul><ul><li>printf (“ parte immaginaria di y = &quot;); scanf (&quot;%lf&quot;, &y.immagin); </li></ul><ul><li>total = somma_cmplx (x, y); </li></ul><ul><li>printf (“ La somma vale: %f&quot;, total.reale); /* stampa della parte intera */ </li></ul><ul><li>if (total.immagin < 0.0) </li></ul><ul><li>printf(&quot; - i&quot;); /* stampa l’operatore i */ </li></ul><ul><li>else </li></ul><ul><li>printf(&quot; + i&quot;); </li></ul><ul><li>printf (&quot;%f&quot;, fabs(total.immagin)); /* stampa parte immaginaria */ </li></ul><ul><li>} </li></ul>
  22. 22. struct come parametro di funzioni <ul><li>complesso somma_cmplx (complesso dato1, complesso dato2) </li></ul><ul><li>{ </li></ul><ul><li>complesso somma; </li></ul><ul><li>somma.reale = dato1.reale + dato2.reale; </li></ul><ul><li>somma.immagin = dato1.immagin + dato2.immagin; </li></ul><ul><li>return (somma); </li></ul><ul><li>} </li></ul>
  23. 23. struct come parametro di funzioni <ul><li>Osservazioni: </li></ul><ul><li>  </li></ul><ul><ul><li>nel programma principale, i dati di tipo struct vengono usati come parametri di scanf e printf con le stesse modalità delle variabili di tipo semplice; </li></ul></ul><ul><ul><li>nella chiamata della funzione di tipo complesso somma_cmplx , i dati di tipo struct vengono passati by value : pertanto quando il controllo dell'esecuzione è passato alla funzione, verrà effettuata una copia delle variabili esterne nelle variabili locali della funzione dato1 e dato2 ; </li></ul></ul><ul><ul><li>la funzione è definita di tipo struct e restituisce un valore di tipo struct , il quale viene assegnato alla variabile total ; </li></ul></ul><ul><ul><li>mediante typedef si è ridefinito il nome della struct , semplificando l'intestazione della funzione. </li></ul></ul>
  24. 24. Esempio: punti nel piano <ul><li>In un file, il cui nome va richiesto da tastiera, ci sono le coordinate X e Y di una serie di punti appartenenti a un piano cartesiano. </li></ul><ul><li>Non si conosce a priori il numero di punti: si supponga siano meno di 100. </li></ul><ul><li>  </li></ul><ul><li>Leggere il file, calcolare la distanza dall'origine di ogni singolo punto, quindi riordinare i punti rispetto alla distanza dall'origine (dal più vicino al più lontano). </li></ul><ul><li>Infine visualizzarli su monitor e salvarli (un punto per riga) in un file il cui nome va anch’esso richiesto da tastiera. </li></ul>
  25. 25. Esempio: punti nel piano <ul><li>Ad esempio se il file dei punti si chiama PUNTI.DAT e contiene: </li></ul><ul><li>2 2 </li></ul><ul><li>1 4 </li></ul><ul><li>3 3 </li></ul><ul><li>0 1 </li></ul><ul><li>sul monitor dovrà apparire: </li></ul><ul><li>Punto 1: 0.0000, 1.0000 -> 1.0000 </li></ul><ul><li>Punto 2: 2.0000, 2.0000 -> 2.8284 </li></ul><ul><li>Punto 3: 1.0000, 4.0000 -> 4.1231 </li></ul><ul><li>Punto 4: 3.0000, 3.0000 -> 4.2426 </li></ul>
  26. 26. Esempio: punti nel piano <ul><li>#include <stdio.h> </li></ul><ul><li>#include <math.h> </li></ul><ul><li>#define NMAX 100 </li></ul><ul><li>typedef enum {FALSO, VERO} boolean; /* “tipo” boolean */ </li></ul><ul><li>  </li></ul><ul><li>typedef struct /* “tipo” modello */ </li></ul><ul><li>{ </li></ul><ul><li>double x; </li></ul><ul><li>double y; </li></ul><ul><li>double dist; </li></ul><ul><li>} modello; </li></ul><ul><li>/* prototipo della funzione di riordinamento */ </li></ul><ul><li>void bubble (modello punti[ ], int n) </li></ul>
  27. 27. Esempio: punti nel piano <ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>FILE *input, *output; </li></ul><ul><li>int i, j, stato, np; </li></ul><ul><li>char buffer[80], nomefile[20]; </li></ul><ul><li>modello punti[NMAX]; /* vettore di strutture */ </li></ul><ul><li>  </li></ul><ul><li>/* Legge il nome del file */ </li></ul><ul><li>printf (“ Nome del file che contiene i punti: &quot;); </li></ul><ul><li>scanf (&quot;%s&quot;, nomefile); </li></ul><ul><li>/* Apre il file in lettura */ </li></ul><ul><li>if ((input = fopen (nomefile,&quot;r&quot;)) == NULL) </li></ul><ul><li>{ </li></ul><ul><li>printf (&quot; Errore apertura file %s&quot;, nomefile); </li></ul><ul><li>exit (0); </li></ul><ul><li>} </li></ul>
  28. 28. Esempio: punti nel piano <ul><li>np = 0; </li></ul><ul><li>while (fscanf (input, &quot;%lf%lf&quot;, &punti[np].x, &punti[np].y) != EOF) </li></ul><ul><li>{ </li></ul><ul><li>punti[np].dist = sqrt (punti[np].x * punti[np].x </li></ul><ul><li>+ punti[np].y * punti[np].y); </li></ul><ul><li>np++; </li></ul><ul><li>} </li></ul><ul><li>fclose (input); </li></ul><ul><li>bubble (punti, np); </li></ul>
  29. 29. Esempio: punti nel piano <ul><li>/* Operazioni finali: chiede il nome del file di output e lo crea */ </li></ul><ul><li>printf (“ Nome del file di output: &quot;); </li></ul><ul><li>scanf (&quot;%s&quot;, nomefile); </li></ul><ul><li>if ((output = fopen (nomefile, “w&quot;)) == NULL) </li></ul><ul><li>{ </li></ul><ul><li>printf (&quot; Errore creazione file %s&quot;, nomefile); </li></ul><ul><li>exit (1); } </li></ul><ul><li>/* visualizza la sequenza di punti sul monitor e la salva nel file */ </li></ul><ul><li>for (i = 0; i < np; i++) </li></ul><ul><li>{ </li></ul><ul><li>printf (“ Punto %3d: %9.4lf,%9.4lf %10.4lf&quot;, </li></ul><ul><li>i+1, punti[i].x, punti[i].y, punti[i].dist); </li></ul><ul><li>fprintf (output, “ Punto %3d: %9.4lf,%9.4lf %10.4lf&quot;, </li></ul><ul><li>i+1, punti[i].x, punti[i].y, punti[i].dist); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  30. 30. Esempio: punti nel piano <ul><li>void bubble (modello punti[ ], int n) </li></ul><ul><li>{ </li></ul><ul><li>modello provv; /* struttura! */ </li></ul><ul><li>int ind; </li></ul><ul><li>boolean ord; </li></ul><ul><li>ord = FALSO; </li></ul><ul><li>while (!ord) </li></ul><ul><li>{ </li></ul><ul><li>ord = VERO; </li></ul><ul><li>for (ind = 0; ind < n-1; ind++) </li></ul><ul><li>if (punti[ind].dist > punti[ind+1].dist) </li></ul><ul><li> { </li></ul><ul><li>provv = punti[ind]; </li></ul><ul><li> punti[ind] = punti[ind+1]; </li></ul><ul><li> punti[ind+1] = provv; </li></ul><ul><li> ord = FALSO; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>

×