Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 9.Programmazione - Tipi semplici, Variabili e Costanti


Sommario

  • Breve storia del C++
  • Il concetto di variabile
  • Variabili e costanti
  • Tipi di dato
  • Tipi semplici
    • Predefiniti
    • Definiti dall’utente
  • Tipi semplici predefiniti in C/C++

Una precisazione

Le lezioni centrate sulla programmazione dei calcolatori elettronici hanno lo scopo di introdurre i concetti fondamentali della programmazione procedurale.

  • I concetti introdotti sono generali, e pertanto validi al variare del linguaggio di programmazione di tipo imperativo adottato.
  • Essi verranno però esemplificati facendo riferimento ad un particolare linguaggio, il C++, che supporta anche il paradigma di programmazione orientato agli oggetti.
  • Con abuso di notazione quindi viene indicato in alcuni casi come C/C++ il linguaggio utilizzato in questo corso, per rendere espicita la scelta di utilizzare tra i meccanismi messi a disposizione dal C++ solo quelli strettamente indispensabili a raggiungere lo scopo anzidetto. Tali meccanismi sono forniti in parte anche dal linguaggio C (che supporta solo la programmazione procedurale) di cui il C++ può essere considerato una “estensione”.

Breve storia del C++

  • 1983: presso i Bell Labs viene sviluppato da Bjarne Stroustrup il “C con classi”, un “miglioramento” del linguaggio C. Questo linguaggio mantiene le principali caratteristiche del C
  • 1998: viene standardizzato il C++ (ISO/IEC 14882:1998 “Information Technology – Programming Languages – C++”, aggiornato nel 2003) il C++ si distingue dal C fondamentalmente per:
    • a) il supporto alla programmazione orientata agli oggetti
    • b) il supporto alla programmazione generica attraverso l’uso dei template
  • Una nuova versione dello standard (nota informalmente come C++0x) è in fase di preparazione, dovrebbe essere rilasciata nel 2009.

Homepage di Bjarne Stroustrup

Comitato di standardizzazione del C++

Un richiamo

Si ricorda che:

  • Una informazione è caratterizzata da:
    • Tipo T – insieme degli elementi tra cui viene effettuata la scelta del valore
    • Valore – particolare elemento scelto nell’insieme T
    • Attributo – significato dell’informazione
  • Una informazione (opportunamente codificata mediante una sequenza di bit) viene memorizzata nell’elaboratore in memoria o in registri e pertanto ad essa è associata a tempo di esecuzione un indirizzo.

Il concetto di “Variabile”

  • Una variabile è la rappresentazione, in un linguaggio di programmazione, di una informazione. Ad essa è associato:
    • Un nome
    • Un registro virtuale di memoria R
  • Pertanto:
    • Il nome è opportuno che sia significativo, ed esprima sinteticamente l’attributo dell’informazione
    • Il valore è il dato che è memorizzato nel registro R
    • Il tipo è l’insieme dei valori rappresentabili in R (sono significative quindi codifica e dimensione in bit di R)

Definizione e Dichiarazione di Variabili in C/C++

Variabili

  • Associate ad un Tipo ed a un Attributo
    • Il tipo determina il valore
    • Il nome (identificatore) esprime in forma sintetica l’attributo
  • Una variabile prima di essere usata deve essere definita o dichiarata. In C/C++ definizione e dichiarazione sono due concetti differenti
    • “definizione”: il punto in cui la variabile viene creata. In seguito alla definizione alla variabile viene associata una indicazione sullo spazio necessario ad allocarla in memoria
    • “dichiarazione”: il punto dove viene dichiarato unicamente il tipo ed il nome della variabile. In seguito ad una dichiarazione non viene allocato spazio in memoria.

Definizione e Dichiarazione in C/C++

In altre parole:

  • la dichiarazione rende noto al compilatore il nome ed il tipo di una variabile in modo che essa venga riconosciuta quando successivamente comparirà in una istruzione
  • La definizione contiene in sé una dichiarazione, ma in aggiunta consente di allocare memoria alla variabile
  • E’ in generale possibile quindi:
    • che una variabile in un certo punto venga solo dichiarata (è stata definita altrove)
    • che di una stessa variabile siano date più dichiarazioni (in file differenti)
  • Non è invece possibile:
    • che una variabile non venga definita
    • che esistano più definizioni della stessa variabile

Costanti

  • Una costante è un valore di uno specificato tipo che viene utilizzato direttamente all’interno di una istruzione.
  • Ad esempio nell’espressione a+1 compare la costante di tipo intero 1.
  • Il tipo è implicito e viene desunto dalla notazione utilizzata.
  • Ad una costante può essere associato un nome (identificatore). In questo caso si parla di costanti con nome o costanti simboliche.

Costanti con nome

  • Una costante con nome è un valore a cui è stato associato un simbolo (mediante un identificatore)
  • L’associazione simbolo-valore non può mai cambiare nel corso dell’esecuzione del programma
  • In C++ una costante con nome è definita come segue:
    • const Tipo nome = valore;

Tipi di Dato

Ciascun tipo è caratterizzato:

  • Dagli elementi che gli appartengono
  • Dalla sua cardinalità (numero di elementi)
  • Dall’eventuale ordinamento (parziale o totale) definito sui suoi elementi
  • Dalle operazioni che possono essere applicate ai suoi elementi
    • Interne: il risultato dell’operazione di elementi di tipo T è ancora un elemento di tipo T
    • Esterne: il risultato dell’operazione di elementi di tipo T non appartiene al tipo T

Tipi Semplici e Strutturati

  • I Tipi di dato possono essere:
    • Semplici (o atomici): gli elementi nell’insieme sono considerati entità non scomponibili in parti più elementari
    • Strutturati: ciascun elemento nell’insieme è un aggregato di elementi a loro volta semplici o strutturati
  • I tipi strutturati verranno studiati in una prossima lezione. In questa trattiamo in particolare i tipi semplici.

Tipi Semplici

Predefiniti (tipi built-in): tipi di dato messi a disposizione dal linguaggio di programmazione, unitamente ad un insieme di operazioni applicabili ai suoi elementi.

  • In C/C++ i principali tipi semplici predefiniti sono:
    • Tipo intero
    • Tipo reale
    • Tipo carattere
    • Tipo booleano

Definiti dall’utente: il linguaggio fornisce dei meccanismi (costuttori) per la costruzione di nuovi tipi, le operazioni sugli elementi devono evidentemente essere esplicitamente fornite dall’utente programmatore.

  • Un esempio: tipo enumerativo (l’utente definisce il nuovo tipo per enumerazione, cioè esplicitamente elencando tutti gli elementi che appartengono all’insieme)

Tipi semplici in C/C++

Nel seguito si forniscono solo alcuni elementi relativamente ai tipi semplici predefiniti in C/C++, si rimanda per una trattazione completa al libro di testo, come specificato nell’indice delle letture.

Il tipo intero

  • Il tipo intero fornisce una astrazione in un linguaggio di programmazione dell’insieme dei numeri interi (relativi).
  • In pratica non è possibile rappresentare mediante un registro finito un insieme infinito di informazioni:
    • Per rendere finita la cardinalità del tipo in concreto si fissa un intervallo di rappresentazione
    • Indicati con m ed M gli estremi del’intervallo si ha pertanto:
      • tipo intero = {i/ i è un numero intero e m
    • L’ampiezza dell’intervallo dipende evidentemente dal numero di bit impiegato per rappresentare in macchina il tipo intero.
  • Esiste dunque un numero intero che è il più piccolo numero intero rappresentabile ed un numero intero che à il più grande numero intero rappresentabile.

Il tipo intero in C/C++

  • Dichiarazione e Definizione di una variabile di tipo intero:
    • int a;
  • Inizializzazione di una variabile di tipo intero contestualmente alla sua definizione:
    • int a=10;
    • In questo caso all’atto della creazione della variabile, lo spazio di memoria ad esso assegnato verrà inizializzato al valore 10. Pertanto questa istruzione è necessariamente una definizione e non una dichiarazione di variabile
  • Costanti numeriche di tipo intero:
    • sequenza di cifre con o senza segno: -1, +5, 238
  • Definizione di costanti con nome:
    • const int DIM=100;

Principali Operazioni applicabili al tipo intero in C/C++

Operatori aritmetici (il risultato di i1 op i2 è un numero intero):

  • addizione i1+i2
  • sottrazione i1-i2
  • moltiplicazione i1*i2
  • divisione intera i1/i2
  • modulo (resto della divisione intera) i1%i2

Operatori relazionali (il risultato di i1 op i2 è un valore booleano):

  • uguale i1==i2
  • diverso i1!=i2
  • maggiore i1>i2
  • minore i1
  • maggiore o uguale i1>=i2
  • minore o uguale i1>=i2

Vi sono poi funzioni definite mediante librerie, ad esempio:

  • abs(i) calcola il valore assoluto dell’intero i

Il tipo reale

  • Il tipo reale fornisce una astrazione in un linguaggio di programmazione dell’insieme dei numeri reali.
  • Come per i numeri interi si pone il problema che non è possibile rappresentare mediante un registro finito un insieme infinito di informazioni.
  • Inoltre, poiché il campo dei numeri reali è denso in sé, dati due punti x1 ed x2 sull’asse reale, tra di essi vi sono infiniti numeri reali.
  • Pertanto non è possibile rappresentare esattamente tutti i numeri nell’intervallo di rappresentazione, e può essere necessario approssimare un numero x per rappresentarlo con il numero “più vicino”.

Il tipo reale

  • Quindi, fissato un valore ε e dato un l’intervallo di rappresentazione (m, M), l’insieme (finito) dei numeri reali può essere definito come:
    • tipo reale = {r/ r è un numero reale che verifica la proprietà β} dove:
  • Proprietà β: per ogni numero reale rs tale che m<=rs<=M, esiste r che lo approssima con assegnata precisione, cioè tale che: |(rs-r)|< ε
  • Per un maggiori informazioni circa la rappresentazione in macchina dei numeri interi e dei numeri reali si rimanda alle relative (prossime) lezioni.

Il tipo reale in C/C++

  • Dichiarazione e Definizione di una variabile di tipo reale:
    • float a;
    • double a; // variabile reale in doppia precisione
  • Una variabile reale in doppia precisione è rappresentata su un numero maggiore di bit, pertanto il numero reale è rappresentato con maggiore precisione usando il tipo double.
  • Inizializzazione di una variabile di tipo reale contestualmente alla sua definizione:
    • float a=10.3;
    • Valgono le considerazioni circa l’inizializzazione all’atto della definizione già fatte nella slide relativa ai numeri interi.

Costanti di tipo reale in C/C++

  • Costanti numeriche di tipo reale:
    • sequenza di cifre con o senza segno: -1.0, +5.3E+2, 238.25 … (Notazione esponenziale = 5,3×10+2)
  • Definizione di costanti con nome:
    • const float Pgreco=+3,14;
    • const double Epsilon=+1.E-9 (Notazione esponenziale =+10-9)

Principali Operazioni applicabili al tipo reale in C/C++

  • Operatori aritmetici (il risultato di i1 op i2 è un numero reale)
    • addizione i1+i2
    • sottrazione i1-i2
    • moltiplicazione i1*i2
    • divisione i1/i2
  • Operatori relazionali (il risultato di i1 op i2 è un valore booleano)
    • Sono previsti i principali operatori logici. Bisogna però ricordarsi, nell’usarli, che si sta trattando numeri con precisione fissata.
    • Ad esempio, dette r1 e r2 due variabili di tipo float, ed Espilon una costante di tipo float, sufficientemente vicina a zero, la relazione r1==r2 dovrebbe essere sostituita da:
      • abs(r1-r2) < Epsilon
  • Vi sono poi funzioni definite mediante librerie (trigonometriche, logaritmiche, esponenziali, etc…)

Il tipo carattere

  • Il tipo carattere è l’insieme dei simboli che possono essere stampati o visualizzati mediante periferiche, o più in generale riprodotti mediante unità di ingresso/uscita.
  • Comprendono le lettere dell’alfabeto inglese (maiuscole e minuscole), le 10 cifre decimali (da 0 a 9), i caratteri di interpunzione, alcuni simboli matematici e quelli relativi ai principali operatori aritmetiche e relazionali, ed anche dei caratteri speciali e di controllo (ad esempio tabulazione, a capo, etc…).

Il Codice ASCII (American Standard Code for Information Interchange)

  • Non è possibile rappresentare mediante il tipo carattere tutti i simboli che si vorrebbero poter riprodurre mediante periferiche (basti pensare alle specificità delle sole lingue europee).
  • All’inizio degli anni ‘60 è stato definito lo standard ASCII (Codice Standard Americano per lo Scambio di Informazioni) mediante il quale i caratteri sono rappresentati su 7 bit (più uno utilizzato per rilevare eventuali errori).
  • Nella sua versione originale quindi il codice ASCII rappresenta 128 caratteri, associati a stringhe di bit corrispondenti a numeri naturali crescenti da 0 a 127 (se interpretate come numeri binari) come specificato nella prossima slide.

Codice ASCII

  • da 0 a 31: “caratteri” di controllo
  • da 32 a 47: interpunzione e caratteri speciali
  • da 48 a 57: cifre decimali
  • da 58 a 64: interpunzione e caratteri speciali
  • da 65 a 90: lettere maiuscole dell’alfabeto inglese
  • da 91 a 96: interpunzione e caratteri speciali
  • da 97 a 122: lettere minuscole dell’alfabeto inglese
  • da 123 a 127: caratteri speciali

Il tipo carattere in C/C++

  • Dichiarazione e Definizione di una variabile di tipo carattere:
    • char c;
  • Inizializzazione di una variabile di tipo carattere contestualmente alla sua definizione:
    • char c= ‘a’ ;
  • Costanti di tipo carattere (notare l’uso del singolo apice prima e dopo il carattere):
  • ‘a’, ‘A’ , ‘ ‘ (spazio), ‘1′
  • Definizione di costanti con nome:
    • const char CAR= ‘A’;

Principali Operazioni applicabili al tipo carattere in C/C++

Dalla sua definizione discende che sul tipo carattere è definito un ordinamento. Pertanto ad esso sono applicabili:

  • Operatori relazionali (il risultato di c1 op c2 è un valore booleano)
    • uguale c1==c2
    • diverso c1!=c2
    • maggiore c1>c2
    • minore c1
    • maggiore o uguale c1>=c2
    • minore o uguale c1>=c2
  • E’ inoltre possibile definire le funzioni “carattere precedente”, “carattere successivo”, concatenazione etc..
  • Nelle librerie standard sono disponibili numerose funzioni per la manipolazione dei caratteri.

Il tipo booleano

  • Il tipo booleano contiene solo due elementi:
    • tipo booleano = {falso, vero}
  • Dichiarazione e Definizione di una variabile di tipo booleano in C++:
    • bool trovato;
  • Inizializzazione di una variabile di tipo booleano contestualmente alla sua definizione:
    • bool trovato=false;
  • Costanti di tipo booleano: false e true
  • Definizione di costanti on nome:
    • const bool OK= true;

Principali Operazioni applicabili al tipo booleano in C/C++

  • Agli elementi del tipo booleano sono associati dei valori interi. In particolare a false è associato 0 e a true è associato 1
  • Sul tipo booleno sono definiti gli operatori della logica boolena, in particolare:
    • la congiunzione AND (in C/C++: &&)
    • la disgiunzione OR (in C/C++: ||)
    • la negazione NOT (in C/C++: !)
  • Sono inoltre definiti gli operatori relazionali
  • Il risultato della valutazione di un predicato è false se il valore valutato è 0, è vero altrimenti

Prossima lezione

Le istruzioni semplici

  • Ingresso e Uscita
  • Assegnazione e calcolo

I materiali di supporto della lezione

Fadini, C. Savy, Fondamenti di Informatica I, Napoli, Liguori Ed., 1997; Parte 2, cap. II

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion