110 likes | 255 Views
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
E N D
Informatica 6 Tipi didato
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 int 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 -> bool0 viene interpretato come false, tutti gli altri interi come true • E’ sconsigliato fare uso di queste conversioni nei programmi