10   Typedef Enum
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Utilissimo
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
5,163
On Slideshare
5,148
From Embeds
15
Number of Embeds
2

Actions

Shares
Downloads
25
Comments
1
Likes
0

Embeds 15

http://www.slideshare.net 13
http://forum.me2web.net 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. INFORMATICA typedef
  • 2. Ridefinizione dei tipi: typedef
    • E’ possibile ridefinire un tipo già esistente mediante la parola chiave typedef , cosicché si può utilizzare un nuovo identificatore ( sinonimo ) al posto del precedente.
    • Formato:
    • typedef tipo_esistente nuovo_nome;
    • Esempio:
    • typedef long int interolungo; /* ridefinizione di tipo */
    • integerolungo dato_int; /* dato_int e' un intero lungo */
    • 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.
  • 3. Il tipo enumerazione
  • 4. Il tipo enumerazione: enum
    • 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.
    •  
    • In questi casi il C permette di definire le entità su cui il programma deve operare: questa possibilità è data dalla definizione dei tipi enumerati .
    •   La forma generale è:
    • enum [ identif_tipo ] { identif. [, identif. ]} [ variabile ];
    • enum identif_tipo variabile ;
    • dove le parti opzionali sono tra parentesi quadra.
  • 5. Il tipo enumerazione: enum
    • Esempio:
    • enum colore {bianco, rosso, blu, giallo, verde, nero};
    • enum week
    • {lunedi, martedi, mercoledi, giovedi, venerdi, sabato, domenica};
    • ................................
    • enum colore col_parete;
    • enum week giorno;
    • La variabile col_parete , di tipo colore , potrà assumere i valori bianco , rosso , blu , ecc.
    •  
    • La variabile giorno di tipo week i valori lunedi , martedi , ecc.
  • 6. Il tipo enumerazione: enum
    • La definizione può apparire in varie forme:
    •  
    • a) enum { identif. [, identif .]} variabili ;
    •  
    • le variabili possono assumere uno dei valori della lista ( espressi in modo simbolico); e sempio:
    • enum {bianco, rosso, blu, giallo, verde, nero} c_bagno, c_cucina;
    • b) enum nome_tipo { identif. [, identif .]};
    • ...............................
    • enum nome_tipo variabili ;
    •  
    • 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.
  • 7. Il tipo enumerazione: enum
    • Ad esempio:
    • enum colore {bianco, rosso, blu, giallo, verde, nero};
    • ................................
    • enum colore col_parete;
    • c) enum nome_tipo { ident. [, ident. ]} variabile_1 ;
    • .....................................
    • enum nome_tipo variabile_2, ......, variabile_n ;
    •  
    • è una combinazione delle precedenti; esempio:
    • enum colore {bianco, rosso, blu, giallo, verde, nero} parete_A;
    • ................................
    • enum colore parete_B;
  • 8. Il tipo enumerazione: enum
    • In un programma si possono pertanto avere istruzioni del tipo:
    • col_parete = verde;
    • giorno = mercoledi;
    •  
    • 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,
    • enum festivo {sabato, domenica};
    • enum feriale {lunedi, martedi, mercoledi, giovedi, venerdi, sabato};
    • è errato perché sabato è presente in due tipi; analogamente è illecito usare, per esempio, l'identificatore domenica come nome di una variabile.
  • 9. Il tipo enumerazione: enum
    • 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.
    •  
    • 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.
    •  
    • 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.
  • 10. Il tipo enumerazione: enum
    • Esempio:
    • enum colore {bianco, rosso, blu = 20, giallo, verde, nero};
    •  
    • In questo caso bianco vale 0 , rosso vale 1 , blu vale 20 , giallo vale 21 , ecc.
    •  
    • 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).
  • 11. Il tipo enumerazione: enum
    • In generale quindi questi identificatori agiscono come costanti intere e possono essere usati dovunque è appropriata una costante.
    • 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 :
    • typedef enum {FALSO, VERO} boolean;
    • /* boolean è definito come sinonimo di un tipo enumerato a due valori*/
    • boolean finito, trovato; /* definizione di due variabili logiche */
    • Si noti che FALSO e VERO sono definite in un modo implicito e assumono rispettivamente i valori 0 e 1 .
  • 12. Il tipo enumerazione: enum
    • 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.
    •  
    • Sono pertanto lecite (sintatticamente, non semanticamente!) assegnazioni di valori di un tipo enumerato a una variabile di un altro tipo enumerato .
    •  
    • 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.
  • 13. Il tipo enumerazione: enum
    • Esempio:
    • main()
    • {
    • enum materia {italiano, latino, storia, geografia};
    • enum giorni {lunedi, martedi};
    • enum materia corso;
    • enum giorni domani;
    • corso = storia; /* corso assume il valore 2 */
    • corso = 3; /* corso assume il valore 3, cioè geografia */
    • domani = latino; /* domani assume il valore 1 */
    • }
  • 14. enum: esempio
    • Esempio: programma per introdurre da terminale i voti acquisiti in ogni materia di insegnamento e calcolo della media.
    •  
    • #include <stdio.h>
    •  
    • main()
    • {
    • enum materia {italiano, latino, storia, geografia};
    • float sommavoti, voto, numvoti;
    • enum materia corso;
    • numvoti = 0;
    • sommavoti = 0;
    • printf (“ Calcola la media dei voti. Introdurre i voti. &quot;);
  • 15. enum: esempio
    • for (corso = italiano; corso <= geografia; corso++)
    • {
    • printf(“ Voto di &quot;); /* costruisce il messaggio di richiesta voto */
    • switch (corso)
    • {
    • case italiano: printf (&quot;italiano: &quot;); break;
    • case latino: printf (&quot;latino: &quot;); break;
    • case storia: printf (&quot;storia: &quot;); break;
    • case geografia: printf (&quot;geografia: &quot;);
    • }
    • scanf (&quot;%f&quot;, &voto);
    • sommavoti += voto; /* accumula in sommavoti (per la media) */
    • numvoti++; /* incrementa numvoti (per la media) */
    • }
    • printf (“ Media dei voti: %5.2f &quot;, sommavoti/numvoti);
    • }