Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 4

Questo PDF è stato generato su richiesta di Lamonaca Gabriele Lamonaca

il 23/02/2023 alle 12:03. Attenzione: l'uso di questo file in violazione delle


norme in materia di diritto d'autore costituisce reato.

Lezione del corso C++ - Sviluppare software complessi con C++ e Code:Blocks

Variabili e tipi di dato


Possiamo pensare a un programma come a un modo di elaborare un insieme di dati, con lo scopo di
estrarre informazioni utili per l'utente. Nel corso di questa lezione, ci occuperemo di capire in quale modo
rappresentare le varie possibili tipologie di dato e come tali dati siano utilizzabili.

L'elemento di sintassi che corrisponde al concetto di dato prende il nome di variabile. Così come esistono
diversi tipi di dato, allo stesso modo identifichiamo diverse tipologie di variabile. In questa lezione ci
concentreremo su tre semplici tipologie di dato: numero intero, numero con virgola, carattere.

Esamineremo ora tutte le operazioni necessarie per la realizzazione di programmi incentrati sull'utilizzo di
tali variabili (esercizio2a.cpp, esercizio2b.cpp). In particolare, all'interno di esercizio2a.cpp chiederemo in
input all'utente il valore di un numero intero, di un numero con virgola e di un carattere. I valori letti da
tastiera verranno successivamente stampati a video. Per quanto riguarda invece esercizio2b.cpp,
chiederemo all'utente di inserire da tastiera un carattere minuscolo, stampando poi a video il corrispondente
carattere maiuscolo. Per comprendere il funzionamento di questo secondo programma sarà necessario
analizzare quale tipo di rappresentazione interna sia utilizzata dal computer per variabili di tipo carattere:
parleremo, a questo proposito, di codifica ASCII.

Prima però, realizziamo il primo programma, il cui codice sorgente è riportato in esercizio2a.cpp:
prenderemo come punto di partenza il contenuto della funzione main del programma di esempio "Hello
World" esaminato nel corso della scorsa lezione.

Per offrire una migliore comprensione di ciascun passaggio, scomponiamo il programma di lettura e scrittura
di variabili in tre step elementari: dichiarazione delle variabili, assegnazione delle variabili e utilizzo delle
variabili.

Dichiarazione
Per servirci di una variabile dobbiamo prima di tutto segnalare la sua presenza al programma, in modo che
possa riservarle un'area di memoria. Per poter riservare un'area di dimensione adeguata è inoltre
necessario specificare quale sia il tipo della variabile.

Otterremo tale scopo (come è possibile osservare anche analizzando esercizio2a.cpp) con un'istruzione
come:

int i;

La keyword int indica il tipo della variabile, in questo caso un numero intero, i indica invece il nome della
variabile intera appena dichiarata. Analogamente, per le dichiarazioni di una variabile di nome f di tipo
numero con virgola e di una variabile di nome c di tipo carattere, utilizzeremo le istruzioni:
float f;
char c;

Esaminiamo ora come assegnare alle variabili appena dichiarate un valore opportuno fornito in input
dall'utente.

Assegnazione
Consideriamo la variabile i, di tipo intero. Prima di tutto, chiediamo all'utente, tramite un messaggio
stampato a video, di inserire un valore per tale variabile:

cout<<"Inserisci un valore per la variabile i\n";

Utilizziamo ancora una volta l'istruzione cout, già esaminata nella scorsa lezione, per la stampa a video del
messaggio. Il carattere speciale \n equivale a un "a capo". Segnaliamo poi di voler leggere il valore inserito
dall'utente e memorizzarlo all'interno della variabile i:
cin>>i;

A seguito del completamento di cin il numero digitato dall'utente (che segnala di aver completato l'input
tramite il tasto Invio) è memorizzato nella variabile i. In modo analogo possiamo gestire l'assegnazione delle
variabili f e c:
cout<<"Inserisci un valore per la variabile f\n";
cin>>f;
cout<<"Inserisci un valore per la variabile c\n";
cin>>c;

Vediamo ora come stampare a video i valori appena memorizzati nelle variabili i, f e c.

Utilizzo
Ancora una volta, possiamo servirci del comando cout, utile sia per stampare messaggi di testo che per la
stampa dei valori contenuti all'interno di variabili:

cout<<"Valore di i:"<<i<<"\n";
cout<<"Valore di f:"<<f<<"\n";
cout<<"Valore di c:"<<c<<"\n";

Come possiamo vedere, l'operatore <<, che segue cout può essere utilizzato più volte all'interno della
stessa istruzione: l'effetto è quello di concatenare le stampe.

Passiamo ora ad analizzare il codice contenuto in esercizio2b.cpp. L'obiettivo di tale programma, come già
accennato, è di stampare il carattere maiuscolo corrispondente al carattere minuscolo inviato in input
dall'utente, tramite tastiera. Per comprendere come sia possibile svolgere tale operazione, è necessario
prendere in esame la rappresentazione interna di una variabile di tipo char, ovvero in che forma una
variabile carattere sia salvata nella memoria del computer. Parleremo, a questo proposito, di codifica ASCII.

Codifica ASCII
Internamente, un computer è in grado di gestire soltanto valori di 0 e 1 (equivalenti ad acceso/spento,
connesso/non connesso). Si può osservare però che, attraverso combinazioni di 0 e 1, il computer può
esprimere qualsiasi valore numerico, in base due.

Si tratta di un'operazione molto semplice: i numeri con cui siamo abituati a confrontarci sono espressi in
base dieci, ovvero servendoci di dieci simboli elementari: 0,1,2,3,4,5,6,7,8,9. Il meccanismo di base, detto
notazione posizionale, prevede che un numero assuma valore diverso a seconda della posizione in cui è
inserito. così per il numero "10", il valore della cifra "1", spostata di una posizione a sinistra, viene
moltiplicata per il valore della base (dieci): otteniamo in tal modo il valore dieci. Analogamente, per quanto
riguarda la sequenza di simboli "100", il valore del simbolo "1", spostato a sinistra di due posizioni, viene
moltiplicato per il valore della base elevato al quadrato: rappresentiamo in tal modo il valore cento. Lo
stesso procedimento può essere operato avendo a disposizione un minor numero di simboli elementari. Ad
esempio, per rappresentare il valore "quattro", con soli due simboli (base due), otterremo: 100. Anche in
questo caso il valore della cifra "1", spostata di due posizioni a sinistra, è uguale a 1*(base)^2, ovvero
uguale a quattro. A prezzo quindi dell'utilizzo di un maggior numero di cifre rispetto alla base dieci, è
possibile rappresentare ogni numero servendosi soltanto dei simboli "1" e "0", comprensibili da un computer.

Osserviamo, sia pur non entrando nei dettagli (che esulano dagli obiettivi specifici del corso) come sia
possibile, attraverso opportuni accorgimenti, rappresentare in base due anche numeri con segno e numeri
con virgola. La codifica ASCII permette di estendere l'insieme di elementi rappresentabili tramite sequenze
di "1" e "0" anche ai caratteri.

I computer utilizzano per tale scopo tabelle ASCII, che contengono tutte le lettere dell'alfabeto romano, più
alcuni caratteri aggiuntivi. In queste tabelle ogni carattere è associato a uno specifico numero: caratteri
minuscoli e maiuscoli sono associati a numeri diversi. Ad esempio, il codice ASCII per la lettera "A"
maiuscola è corrisponde al numero 65, rappresentabile in binario come: 1000001 (1*2^6+1=64+1=65).

Stabilita tale equivalenza, i caratteri possono essere salvati all'interno della memoria del computer come
semplici numeri, avendo cura però di indicare al compilatore che il numero contenuto all'interno di tale
locazione di memoria rappresenta in realtà il carattere corrispondente nella tabella ASCII. Per ottenere ciò, è
sufficiente dichiarare le variabili di tipo carattere premettendo la keyword char, come già visto anche in
esercizio2a.cpp.

Segnaliamo, per completezza, che la versione originale delle tabelle ASCII definisce 128 codici carattere
(rappresentabili medianti una sequenza di 7 simboli "0" o "1", ovvero tramite sette bit). Soltanto 96 di queste
128 possibili sequenze corrispondono a caratteri che possono essere stampati a video, le rimanenti 32
combinazioni sono associate a codici di controllo, di cui non ci serviremo durante il corso. Sono state
sviluppate successivamente versioni di tabelle ASCII che consentono di rappresentare fino a 256 possibili
combinazioni (tramite una sequenza di 8 bit, ovvero di un byte). Tra le declinazioni più note di ASCII,
ricordiamo ANSI Extended ASCII.

Cogliamo ora l'occasione per mettere in pratica, con un semplice esempio (esercizio2b.cpp) quanto appreso
a proposito delle tabelle ASCII, imparando anche qualcosa di più.
Codifica ASCII: esempio di utilizzo
L'obiettivo dell'esercizio è, dato in input un carattere minuscolo, stampare il corrispondente carattere
maiuscolo.

L'osservazione su cui si fonderà la stesura del nostro codice è molto semplice: la "distanza" a livello di
codice ASCII tra un carattere minuscolo e il suo corrispondente maiuscolo è uguale per tutti i caratteri.
L'insieme dei caratteri alfabetici (minuscoli e maiuscoli) è infatti rappresentato da codici ASCII consecutivi.

Teniamo presente inoltre che è possibile svolgere operazioni aritmetiche anche su variabili di tipo char: le
operazioni avranno effetto sul codice ASCII equivalente al carattere memorizzato.

Procediamo quindi senz'altro alla stesura del programma, prima di tutto dichiariamo due variabili char, di
nome in (carattere minuscolo, in input) e out (carattere maiuscolo corrispondente, in output):

char in, out;

Chiediamo poi all'utente di inserire un carattere minuscolo in input e memorizziamo il carattere inserito nella
variabile in. Ci serviremo ancora una volta delle istruzioni cin e cout:
cout<<"Immetti un carattere alfabetico minuscolo: ";
cin>>in;

Assegniamo poi alla variabile out un valore corrispondente a quello di in, aumentato della differenza tra il
codice ASCII di una lettera maiuscola e quello di una corrispondente lettera minuscola:
out = in + ('A'-'a');

Come possiamo vedere, la coppia di caratteri minuscoli e maiuscoli scelta è a - A. Il fatto che 'a' e 'A'
vengano utilizzati in questo contesto come caratteri e non, ad esempio, come nomi di variabili, è evidenziato
dal fatto che tali lettere sono comprese tra apici: ' '.

Stampiamo infine il carattere out, sempre servendoci di cout:


cout<<"Corrispondente carattere maiuscolo: "<<out<<"\n";

Nel corso della prossima lezione, realizzeremo un programma in grado, oltre che di gestire l'input e l'output
di variabili, anche di svolgere semplici operazioni aritmetiche tra le variabili stesse.

© MRW Corsi - www.mrwcorsi.it - IKIweb Internet Media SRL

Potrebbero piacerti anche