Informatica 6 Tipi di dato Tipi di dato











- Slides: 11

Informatica 6 Tipi di dato

Tipi di dato • Nelle celle di memoria di un calcolatore ci sono solo “ 0” e “ 1”, fisicamente realizzati tramite due diversi livelli di tensione elettrica • A seconda di come questi “ 0” e “ 1” vengono interpretati dal calcolatore, si hanno diversi tipi di informazione • Un tipo di dato definisce i possibili valori che il dato può assumere, e le possibili operazioni che si eseguono su di esso

Classificazione dei tipi (1) • Tipi semplici vs. tipi strutturati – i tipi semplici sono quelli più adatti a rappresentare informazioni semplici, tipicamente a carattere numerico (ad es. : una temperatura) – i tipi strutturati sono quelli usati per rappresentare unità di informazione più complesse, con diverse componenti (ad es. : una data)

Classificazione dei tipi (2) • Tipi built-in vs. tipi user-defined – i tipi built-in (o predefiniti) sono quelli già presenti nel linguaggio di programmazione (ad es. : int) – i tipi user-defined (o definiti dall’utente) sono quelli definiti dal programmatore tramite appositi comandi, forniti dal linguaggio, di costruzione di nuovi tipi

Tipi semplici e built-in • int è un tipo numerico semplice e built-in • char è un tipo non-numerico bensì alfabetico, ma sempre semplice e built-in (i suoi valori vanno sempre scritti tra apici: char c = ‘d’; a differenza delle stringhe che sono strutturate e vogliono le virgolette: string s = “ciao”; ) • In memoria, una variabile int occupa 4 byte, mentre una variabile char solo 1 byte • Altri tipi numerici semplici e built-in sono (con le rispettive dimensioni di variabile): short int (2 byte), long int (4 byte), float (4 byte), double (8 byte) • Naturalmente, maggiore è la dimensione dedicata a una variabile di un tipo, più vasta è la gamma di valori che tale variabile può assumere: una variabile int può assumere valori tra -32768 e 32767, una variabile long int da 2147483648 a 2147483647

Tipi user-defined (1) • Tramite la parola chiave typedef, in C++ è data al programmatore la possibilità di definire nuovi tipi, in diversi modi • Ridenominazione (typedef <tipo esistente> <nuovo tipo>) typedef intero; /*si definisce un nuovo tipo chiamato “intero” che è esattamente come int*/ intero x = 5;

Tipi user-defined (2) • Enumerazione (typedef {<lista valori>} <nuovo tipo>) typedef {blu, rosso, verde} colore; /*si definisce un nuovo tipo chiamato “colore” le cui variabili possono assumere uno dei valori elencati*/ colore c = blu; • Il calcolatore costruisce una corrispondenza implicita tra i valori elencati e gli interi: blu == 0, rosso == 1, verde == 2

Tipi user-defined (3) • Tipi strutturati user-defined (typedef {<descrizione struttura>} <nuovo tipo>) typedef {int giorno; int mese; int anno; } data; /*si crea il tipo “data” le cui variabili contengono 3 “campi”, chiamati “giorno”, “mese”, “anno”, che sono tutti di tipo int*/

Tipi user-defined (4) • I diversi campi di una struttura possono essere di tipi diversi, a loro volta strutturati • Per accedere a un campo di una variabile strutturata si usa la “dot notation” (notazione col punto) data oggi; oggi. giorno = 15; oggi. mese = 1; oggi. anno = 2010;

Conversioni automatiche di tipo (1) • Attenzione: se si mischiano variabili di diverso tipo in una stessa istruzione, il calcolatore esegue delle conversioni automatiche di tipo • Ad es. : int totale; float x = 5. 75; int y = 3; totale = x + y; /*quanto vale totale? */ • totale vale 8, perché anche se esiste una regola che prevede che, sommando numeri di tipo diverso, tutti gli addendi vengano convertiti al tipo più generale (quindi: 3 -> 3. 0 perché float è più generale di int), alla fine la variabile di destinazione è di tipo int, quindi la parte decimale viene troncata (non approssimata)

Conversioni automatiche di tipo (2) • Esiste inoltre una convenzione che regola la conversione tra int e bool • bool -> int true viene interpretato come 1, false come 0 • int -> bool 0 viene interpretato come false, tutti gli altri interi come true • E’ sconsigliato fare uso di queste conversioni nei programmi