Lezione 3 – Tipi di Dati Semplici



By admin on febbraio 7, 2010


La lezione che stiamo per iniziare ci permetterà di imparare a definire le diverse variabili di cui è composto un programma. Definire una variabile significa allocare memoria sufficiente a contenere l'informazione desiderata. Una variabile può essere vista per semplicità come una scatola aperta nella quale posso inserire una sola cosa per volta. Così come ci sono scatole di diversa forma (tipo) e dimensione, così esistono variabili di tipo e dimensioni diverse.
I tipi di dati possono essere divisi in due insiemi:

  • Tipi semplici
  • Tipi complessi

 

Tipi semplici

I tipi di dati semplici sono i mattoncini elementari con i quali costruire i tipi più complessi i quali a loro volta permettono di creare complesse le strutture dati utilizzate nei database, nei sistemi operativi, ecc.
In C/C++ i tipi semplici sono i seguenti:

  • int: Permette di rappresentare interi positivi e negativi di 32bit (4 byte), ovvero valori compresi in un intervallo tra –2147483648 e 2147483647. Esistono alcune varianti di questo tipo di dato:
    • Unsigned: Valore intero senza segno a 32bit. L'intervallo dei numeri rappresentabili e compreso tra 0 e 4294967296.
    • Short: Permette di rappresentare interi positivi e negativi di 16bit (2 byte), ovvero valori compresi in un intervallo tra –32768 e 32767.
    • Unsigned Short: Valore intero senza segno a 16bit. L'intervallo dei numeri rappresentabili e compreso tra 0 e 65535.
    • DWORD: Uguale al tipo Intero, utilizzato nella programmazione per Windows e assembler.
    • WORD: Uguale al tipo Short, utilizzato nella programmazione per Windows e assembler.
  • char: Permette di memorizzare un carattere. Ha la dimensione di 8bit (1 byte).
  • bool: Tipo di dato utilizzato nella valutazione delle espressioni logiche. Ha la dimensione di 8bit (1 byte) e memorizza 0 per la condizione false (falso) ed 1 per true (vero).
  • float: Tipo di dato per la memorizzazione di valori in virgola mobile a singola precisione. Ha la dimensione di 32bit (4 byte) e l'intervallo dei valori è compreso tra 3.4x10-38 e 3.4x1038.
  • double: Tipo di dato per la memorizzazione di valori in virgola mobile a doppia precisione. Ha la dimensione di 64bit (8 byte) e l'intervallo dei valori è compreso tra 5.0x10–324 e 1.7x10308.
  • Puntatore: Un puntatore è un tipo di dato che contiene l'indirizzo di memoria di un'altra variabile. I computer a 32-bit hanno uno spazio di indirizzamento di 32bit pari a 4GB, un puntatore quindi occupa 4 byte di memoria.
  • void: Non è un vero e proprio tipo di dato, ma in C/C++ è utilizzato per indicare che ad esempio la funzione non restituisce nulla oppure per indicare un puntatore generico (void *). Per questo ultimo caso, il puntatore è sempre di 4 byte.

 

Tipi Complessi

Se qualche lettore ha gia familiarità con qualche linguaggio di programmazione si sarà accorto della mancanza del tipo di dati per le stringhe. In effetti in C non esiste un tipo di dato per le stringhe, mentre in C++ è stato creato l'oggetto String che permette di lavorare con le stringhe come con qualsiasi altro tipo di dato. Il motivo per cui in C non esiste il tipo stringa è semplice: una stringa di caratteri altro non è che una sequenza finita di caratteri memorizzati uno di seguito all'altro.
Una sequenza è possibile realizzarla con qualunque tipo di dato. Per i caratteri si parla di stringhe, mentre per gli altri tipi di parla di vettore o array. Quindi è possibile realizzare array di caratteri, interi, double, ecc. La sintassi utilizzata per dichiarare una variabile di tipo array è semplicissima:

tipo_base_array nome_variabile[num_elem];

Come possiamo osservare, si scrive prima il tipo di base dell'array, poi si mette il nome da assegnare all'array ed infine racchiuso tra le parentesi quadre si mette il numero massimo di elementi che l'array potrà contenere. Il ';' è obbligatorio.
Vediamo qualche esempio di dichiarazione di array:

double Punto_3D[3];
int Top10[10];
char Nome_Cognome[60];
float *Coordinate2D[2]; //Array di 2 puntatori a float


E' possibile realizzare un array di array? Certamente! Anzi è possibile creare array di array di array… di array fino a 32 dimensioni. Un array di array è detto matrice o anche array bi-dimensionale. La dichiarazione di una matrice o di un vettore multi-dimensionale in generale si fa nel seguete modo:

tipo_base_matrice nome_variabile[num_elem1][num_elem2]...[num_elemN];

ovvero:

double TavolaPitagorica[12][12];

Il numero di elementi di ogni dimensione non deve essere necessariamente uguale, ovvero avrei potuto anche scrivere:

double TavolaPitagorica[20][10];
int Matrice[3][4];


 

1

2

3

4

1

 

 

 

 

2

 

 

 

 

3

 

 

 

 

La tabella di sopra mostra l'organizzazione degli elementi, ovvero nella dicitura M[i][j], il numero i indica il numero di righe totali mentre il numero j rappresenta il numero di colonne.
Prima di proseguire il discorso con altri tipi di dati complessi, è obbligatorio anticipare il discorso sugli operatori matematici e vedere come si legge un elemento di un array o matrice anche perché questo argomento è fonte di molti errori logici durante la scrittura di un programma.
Per poter selezionare un elemento dell'array si deve utilizzare la scrittura seguente:

nume_array[num_elem_desiderato-1]

ad esempio

primo = Top10[0];

La precedente riga non è sbagliata! L'indicizzazione di un vettore inizia da zero (0), quindi avremo Top10[0], Top10[1], ..., Top10[9]; per un totale di 10 elementi. Lo stesso discorso si fa per gli array multi-dimensionali. L'ultimo elemento della precedente matrice è Matrice[2][3].
Concludiamo questa lezione con la descrizione del tipo di dato che racchiude (o può racchiudere) tutti i tipi visti finora: la Struttura – Struct (o record come viene denominata in altri linguaggi).

 

struct TModello3D
{
double Posizione[3];
char NomeOggetto[50];
int ColoreRGB[3];
};

TModello3D Modello;
TModello3D ListaModelli[1000];
TModello3D *ModelloTemporaneo;

Quello appena visto è un semplice esempio di struttura e dichiarazione di variabili che hanno tipo struttura. Una struttura viene dichiarata scrivendo la parola riservata struct:

struct nome_struttura
{
//dichiarazioni variabili
};

un altro modo di scrivere una variabile di tipo struttura è il seguente:

struct
{
//dichiarazioni variabili
} nome_var_struttura;

ovvero la variabile è di tipo struttura ma quest'ultima non ha nome e quindi non è possibile dichiarare nessun altra variabile in modo da utilizzare la stessa struttura. Per poter utilizzare le variabili dichiarate all'interno di una struttura si ricorre alla cosiddetta notazione puntata.
Ad esempio:

Modello.Posizione[0] = 2;
Modello.Posizione[1] = 0;
Modello.Posizione[2] = 5;

ovvero si utilizza la seguente sintassi:

nome_var_Struttura.Nomecampo;

se invece abbiamo il puntatore ad una variabile di tipo struttura si utilizza la notazione freccia '->':

nome_var_Struttura->Nomecampo;

ModelloTemporaneo->Posizione[0] = 2;
ModelloTemporaneo->Posizione[1] = 0;
ModelloTemporaneo->Posizione[2] = 5;

Vediamo ora come si utilizza un array di strutture. Riprendiamo l'esempio all'inizio della pagina:

TModello3D ListaModelli[1000];

il suo uso è il seguente:

ListaModelli[57].Posizione[2] = 3;





Lascia un Commento