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
 
 
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