10 Typedef Enum

4,214 views

Published on

Published in: Technology, Art & Photos
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
4,214
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
30
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

10 Typedef Enum

  1. 1. INFORMATICA typedef
  2. 2. Ridefinizione dei tipi: typedef <ul><li>E’ possibile ridefinire un tipo già esistente mediante la parola chiave typedef , cosicché si può utilizzare un nuovo identificatore ( sinonimo ) al posto del precedente. </li></ul><ul><li>Formato: </li></ul><ul><li>typedef tipo_esistente nuovo_nome; </li></ul><ul><li>Esempio: </li></ul><ul><li>typedef long int interolungo; /* ridefinizione di tipo */ </li></ul><ul><li>integerolungo dato_int; /* dato_int e' un intero lungo */ </li></ul><ul><li>Mediante typedef si possono definire, ad esempio, tipi astratti, integer8 , integer16 e integer32 , dall'ovvio significato, per poi ridefinirli in funzione del compilatore effettivamente usati. </li></ul>
  3. 3. Il tipo enumerazione
  4. 4. Il tipo enumerazione: enum <ul><li>Nei problemi reali può succedere di dover trattare colori , categorie , dimensioni , ecc., per i quali non esiste un tipo predefinito che si adatti opportunamente alla loro rappresentazione. </li></ul><ul><li>  </li></ul><ul><li>In questi casi il C permette di definire le entità su cui il programma deve operare: questa possibilità è data dalla definizione dei tipi enumerati . </li></ul><ul><li>  La forma generale è: </li></ul><ul><li>enum [ identif_tipo ] { identif. [, identif. ]} [ variabile ]; </li></ul><ul><li>enum identif_tipo variabile ; </li></ul><ul><li>dove le parti opzionali sono tra parentesi quadra. </li></ul>
  5. 5. Il tipo enumerazione: enum <ul><li>Esempio: </li></ul><ul><li>enum colore {bianco, rosso, blu, giallo, verde, nero}; </li></ul><ul><li>enum week </li></ul><ul><li>{lunedi, martedi, mercoledi, giovedi, venerdi, sabato, domenica}; </li></ul><ul><li>................................ </li></ul><ul><li>enum colore col_parete; </li></ul><ul><li>enum week giorno; </li></ul><ul><li>La variabile col_parete , di tipo colore , potrà assumere i valori bianco , rosso , blu , ecc. </li></ul><ul><li>  </li></ul><ul><li>La variabile giorno di tipo week i valori lunedi , martedi , ecc. </li></ul>
  6. 6. Il tipo enumerazione: enum <ul><li>La definizione può apparire in varie forme: </li></ul><ul><li>  </li></ul><ul><li>a) enum { identif. [, identif .]} variabili ; </li></ul><ul><li>  </li></ul><ul><li>le variabili possono assumere uno dei valori della lista ( espressi in modo simbolico); e sempio: </li></ul><ul><li>enum {bianco, rosso, blu, giallo, verde, nero} c_bagno, c_cucina; </li></ul><ul><li>b) enum nome_tipo { identif. [, identif .]}; </li></ul><ul><li>............................... </li></ul><ul><li>enum nome_tipo variabili ; </li></ul><ul><li>  </li></ul><ul><li>In questo modo si identifica con enum nome_tipo la lista dei valori assunti, successivamente si definiscono le variabili di quel tipo enumerativo che potranno assumere soltanto i valori indicati nella lista precedente. </li></ul>
  7. 7. Il tipo enumerazione: enum <ul><li> Ad esempio: </li></ul><ul><li>enum colore {bianco, rosso, blu, giallo, verde, nero}; </li></ul><ul><li>................................ </li></ul><ul><li>enum colore col_parete; </li></ul><ul><li>c) enum nome_tipo { ident. [, ident. ]} variabile_1 ; </li></ul><ul><li>..................................... </li></ul><ul><li>enum nome_tipo variabile_2, ......, variabile_n ; </li></ul><ul><li>  </li></ul><ul><li>è una combinazione delle precedenti; esempio: </li></ul><ul><li>enum colore {bianco, rosso, blu, giallo, verde, nero} parete_A; </li></ul><ul><li>................................ </li></ul><ul><li>enum colore parete_B; </li></ul>
  8. 8. Il tipo enumerazione: enum <ul><li>In un programma si possono pertanto avere istruzioni del tipo: </li></ul><ul><li>col_parete = verde; </li></ul><ul><li>giorno = mercoledi; </li></ul><ul><li>  </li></ul><ul><li>I valori assunti da quel tipo corrispondono a delle costanti intere definite in modo automatico dal compilatore, che pertanto devono essere uniche nel programma. Ad esempio, </li></ul><ul><li>enum festivo {sabato, domenica}; </li></ul><ul><li>enum feriale {lunedi, martedi, mercoledi, giovedi, venerdi, sabato}; </li></ul><ul><li>è errato perché sabato è presente in due tipi; analogamente è illecito usare, per esempio, l'identificatore domenica come nome di una variabile. </li></ul>
  9. 9. Il tipo enumerazione: enum <ul><li>La lista degli identificatori che denotano i valori assunti da un tipo enumerato forma un insieme ordinato che il compilatore codifica con valori interi crescenti a partire da 0. </li></ul><ul><li>  </li></ul><ul><li>Nella definizione del tipo colore , l'identificatore bianco viene codificato con 0 , rosso con 1 , blu con 2 , ecc. Si possono modificare questi valori, assegnati automaticamente, imponendo i valori interi che si vogliono assegnare direttamente nella definizione. </li></ul><ul><li>  </li></ul><ul><li>Si fa seguire al nome dell'identificatore il segno uguale e il valore che si intende assegnare. Il compilatore assumerà questo numero come nuovo valore di partenza per le assegnazioni successive. </li></ul>
  10. 10. Il tipo enumerazione: enum <ul><li>Esempio: </li></ul><ul><li>enum colore {bianco, rosso, blu = 20, giallo, verde, nero}; </li></ul><ul><li>  </li></ul><ul><li>In questo caso bianco vale 0 , rosso vale 1 , blu vale 20 , giallo vale 21 , ecc. </li></ul><ul><li>  </li></ul><ul><li>E’ possibile attribuire a più identificatori valori identici, o esplicitamente (ad esempio, blu = 20, giallo = 20 ), o implicitamente: se, ad esempio, si pone blu = 0 ( lo stesso valore di bianco che a questo punto è già stato codificato), giallo assumerà lo stesso valore di rosso , cioé 1). </li></ul>
  11. 11. Il tipo enumerazione: enum <ul><li>In generale quindi questi identificatori agiscono come costanti intere e possono essere usati dovunque è appropriata una costante. </li></ul><ul><li>Un'applicazione interessante è la definizione del tipo logico (assente in C) ottenuta combinando la definizione di tipo enumerato con la creazione di un tipo simbolico mediante typedef : </li></ul><ul><li>typedef enum {FALSO, VERO} boolean; </li></ul><ul><li>/* boolean è definito come sinonimo di un tipo enumerato a due valori*/ </li></ul><ul><li>boolean finito, trovato; /* definizione di due variabili logiche */ </li></ul><ul><li>Si noti che FALSO e VERO sono definite in un modo implicito e assumono rispettivamente i valori 0 e 1 . </li></ul>
  12. 12. Il tipo enumerazione: enum <ul><li>Il linguaggio C definisce gli enumerati come una forma particolare del tipo intero: ne consegue che i valori definiti in tipi enumerati differenti sono a tutti gli effetti dei valori interi. </li></ul><ul><li>  </li></ul><ul><li>Sono pertanto lecite (sintatticamente, non semanticamente!) assegnazioni di valori di un tipo enumerato a una variabile di un altro tipo enumerato . </li></ul><ul><li>  </li></ul><ul><li>Un'altra conseguenza è che per le operazioni di I/O dei dati di tipo enumerato non sono previsti specificatori ad hoc, in quanto sono a tutti gli effetti degli interi. </li></ul>
  13. 13. Il tipo enumerazione: enum <ul><li>Esempio: </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>enum materia {italiano, latino, storia, geografia}; </li></ul><ul><li>enum giorni {lunedi, martedi}; </li></ul><ul><li>enum materia corso; </li></ul><ul><li>enum giorni domani; </li></ul><ul><li>corso = storia; /* corso assume il valore 2 */ </li></ul><ul><li>corso = 3; /* corso assume il valore 3, cioè geografia */ </li></ul><ul><li>domani = latino; /* domani assume il valore 1 */ </li></ul><ul><li>} </li></ul>
  14. 14. enum: esempio <ul><li>Esempio: programma per introdurre da terminale i voti acquisiti in ogni materia di insegnamento e calcolo della media. </li></ul><ul><li>  </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>  </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>enum materia {italiano, latino, storia, geografia}; </li></ul><ul><li>float sommavoti, voto, numvoti; </li></ul><ul><li>enum materia corso; </li></ul><ul><li>numvoti = 0; </li></ul><ul><li>sommavoti = 0; </li></ul><ul><li>printf (“ Calcola la media dei voti. Introdurre i voti. &quot;); </li></ul>
  15. 15. enum: esempio <ul><li>for (corso = italiano; corso <= geografia; corso++) </li></ul><ul><li>{ </li></ul><ul><li>printf(“ Voto di &quot;); /* costruisce il messaggio di richiesta voto */ </li></ul><ul><li>switch (corso) </li></ul><ul><li>{ </li></ul><ul><li>case italiano: printf (&quot;italiano: &quot;); break; </li></ul><ul><li>case latino: printf (&quot;latino: &quot;); break; </li></ul><ul><li>case storia: printf (&quot;storia: &quot;); break; </li></ul><ul><li>case geografia: printf (&quot;geografia: &quot;); </li></ul><ul><li>} </li></ul><ul><li>scanf (&quot;%f&quot;, &voto); </li></ul><ul><li>sommavoti += voto; /* accumula in sommavoti (per la media) */ </li></ul><ul><li>numvoti++; /* incrementa numvoti (per la media) */ </li></ul><ul><li>} </li></ul><ul><li>printf (“ Media dei voti: %5.2f &quot;, sommavoti/numvoti); </li></ul><ul><li>} </li></ul>

×