Programmazione Procedurale in Linguaggio C Elementi di Base
Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 2 Dichiarazione dei Dati versione 2. 0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – Università della Basilicata – mecca@unibas. it
Elementi di Base: Dichiarazioni >> Sommario m Panoramica m Identificatori m Tipi di Dato Semplici del C++ m Costanti m Variabili m Errori nella rappresentazione G. Mecca - Programmazione Procedurale in Linguaggio C++ 2
Elementi di Base: Dichiarazioni >> Panoramica m Elementi di base di un linguaggio di programmazione procedurale ðle funzionalità che consentono di usare il linguaggio come una calcolatrice ðl’utente fornisce dei dati (es: numeri) ðl’utente stabilisce le operazioni sui dati ðil programma visualizza i risultati delle operazioni G. Mecca - Programmazione Procedurale in Linguaggio C++ 3
Elementi di Base: Dichiarazioni >> Panoramica m Nel seguito ðci occupiamo della dichiarazione dei dati in un programma m Concetti introdotti ðidentificatore ðtipo di dato ðcostante e variabile m Il resto nelle lezioni successive G. Mecca - Programmazione Procedurale in Linguaggio C++ 4
Elementi di Base: Dichiarazioni >> Panoramica m Dati principali di un programma ðcostanti ðvariabili m Sono contraddistinti da ðun nome (“identificatore”) ðun tipo m Peculiarità dei linguaggi di prog. ðper usare un dato devo descriverne il tipo G. Mecca - Programmazione Procedurale in Linguaggio C++ 5
Elementi di Base: Dichiarazioni >> Identificatori m Nome di un oggetto del programma ðesempi: pigreco, raggio, cerchio m Regole sintattiche ðsequenza composta da lettere e/o cifre e/o dal carattere “underscore” ‘_’: ðprimo carattere: lettera oppure underscore ðATTENZIONE: codice ASCII a 7 bit esempi: mio_prog 1, _1 bis, Cerchio città, 1 prova, codice libro, m!n G. Mecca - Programmazione Procedurale in Linguaggio C++ 6
Elementi di Base: Dichiarazioni >> Identificatori m Sensibili alle maiuscole ðcerchio, CERCHIO sono considerati nomi diversi m Lunghezza massima ðdipende dal compilatore ðè opportuno trovare un compromesso tra leggibilità e lunghezza Es: misura. Della. Superficie. Del. Cerchio m Identificatori riservati ðparole chiave del linguaggio Es: main, const, float, cin G. Mecca - Programmazione Procedurale in Linguaggio C++ 7
Elementi di Base: Dichiarazioni >> Tipi Di Dato Semplici Tipi di Dato m Funzione ðspecificare la natura del dato, ed in particolare: Spazio di memoria associato al dato esempi: int raggio; --> 32 bit char c; --> 8 bit m Insieme dei valori che il dato può assumere esempi: int raggio; --> valori interi float raggio; --> valori reali m Insieme di operazioni consentite sul dato m G. Mecca - Programmazione Procedurale in Linguaggio C++ 8
Elementi di Base: Dichiarazioni >> Tipi Di Dato Semplici Tipi di Dato m Tipi di dato fondamentali in C++ ðint (numeri interi) ðfloat (numeri reali, precisione singola) ðdouble (numeri reali, doppia precisione) ðchar (caratteri) ðbool (valori veri o falsi) m Un altro tipo importante (>>) ðstring (sequenze o “stringhe” di caratteri) G. Mecca - Programmazione Procedurale in Linguaggio C++ 9
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Tipo intero: int ðesempio: int raggio; raggio ð 32 bit di memoria in complemento a 2 ðvalori (-2. 147. 483. 648, +2. 147. 483. 647) m Esempi di valori ammissibili ð 15 ð 256 ð-46 ð 765432 G. Mecca - Programmazione Procedurale in Linguaggio C++ 10
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Tipo reale: float ðesempio: float cerchio; cerchio ð 32 bit di memoria in virgola mobile ðvalori in modulo tra (1. 2 x 10 -38, 3. 4 x +1038) m Esempi di valori ammissibili ð 12. 67 ð-13. 0 ð. 234 ð. 345 E+4 (notazione esponenz. : 0. 345 x 104) G. Mecca - Programmazione Procedurale in Linguaggio C++ 11
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Tipo reale doppia precisione: double ðesempio: double portata. Ala; portata. Ala ð 64 bit di memoria in virgola mobile ðvalori in modulo tra (1. 7 x 10 -308, 1. 7 x +10308) m Esempi di valori ammissibili ð 12. 67 ð-13. 0 ð. 234 ð. 345 E+4 (notazione esponenziale) G. Mecca - Programmazione Procedurale in Linguaggio C++ 12
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Tipo carattere: char ðesempio: char segno. Schedina; segno. Schedina ð 8 bit di memoria in codice ASCII ðlettere, cifre e simboli m Esempi di valori ammissibili ð‘a’, ‘X’, ‘ 0’, ‘ 8’, ‘? ’, ‘+’, ‘(‘, ‘)’. . . ð‘ ’, ‘n’, ‘t’ (caratteri speciali: “spazi bianchi”) m Attenzione: codice ASCII a 7 bit ðnon sono incluse i simboli estesi (accentate) G. Mecca - Programmazione Procedurale in Linguaggio C++ 13
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Attenzione: char vale per i singoli caratteri, non per le “stringhe di caratteri” m A questo scopo esiste in C++ il tipo string ðesempio: string nome; nome ðconsente di rappresentare sequenze di car. m Esempi ð“Pinco”, “Pinco Pallino”, “C 3 PO-!? !” m Non è un tipo di dato semplice ðlo vedremo in seguito G. Mecca - Programmazione Procedurale in Linguaggio C++ 14
Elementi di Base: Dichiarazioni >> Tipi di Dato Semplici m Tipo booleano: bool ðesempio: bool trovato; trovato ð 1 bit di memoria ðdue soli valori (vero, falso) m Esempi di valori ammissibili ðtrue oppure 1 ðfalse oppure 0 m Viene utilizzato per controllare se opportune condizioni sono verificate (>>) G. Mecca - Programmazione Procedurale in Linguaggio C++ 15
Elementi di Base: Dichiarazioni >> Costanti m Costante ðdato che assume lo stesso valore per tutta la durata della esecuzione del programma m Ne esistono due tipi ðcostanti ordinarie (valori): numeri, caratteri, stringhe utilizzati nel programma ðcostanti simboliche: valori costanti a cui viene attribuito un nome G. Mecca - Programmazione Procedurale in Linguaggio C++ 16
Elementi di Base: Dichiarazioni >> Costanti Dichiarazione di Costanti m Costanti ordinarie (valori) ðnumeri interi; es: 15 -2 0 ðnumeri non interi: -12. 345 E+2 ðcaratteri: ‘a’, ‘A? , ‘*’, ‘ 0’ ðstringhe: “Inserisci il raggio” “Valore: “, “a” ðbooleani: true, false m Costanti simboliche ðdichiarate attraverso la parola chiave “const” G. Mecca - Programmazione Procedurale in Linguaggio C++ 17
Elementi di Base: Dichiarazioni >> Costanti Dichiarazione di Costanti Simboliche m Sintassi const <tipo> <nome> = <valore>; m Dove ð<tipo> è uno dei tipi di dato del linguaggio ð<nome> è un identificatore ð<valore> è il valore della costante m Esempi ðconst int segni. Totocalcio = 13; ðconst char lettera = ‘A’; G. Mecca - Programmazione Procedurale in Linguaggio C++ 18
Elementi di Base: Dichiarazioni >> Costanti Dichiarazione di Costanti Simboliche m Semantica ðallocazione di uno spazio di memoria compatibile con il tipo di dato (es: float 32 bit) ðil valore viene memorizzato nello spazio di memoria (es: 3. 14) e non può essere cambiato durante l’esecuzione del prog. ðè possibile riferirsi al valore attraverso il nome es: circonf = 2 * pigreco * raggio; equivale a: circonf = 2 * 3. 14 * raggio; m Vantaggio ðparametricità del programma rispetto al valore G. Mecca - Programmazione Procedurale in Linguaggio C++ 19
Elementi di Base: Dichiarazioni >> Variabili m Variabile ðdato che può assumere valori differenti durante l’esecuzione del programma ðessenzialmente: uno spazio nella memoria ðdeve essere dichiarata (“annunciata”) prima di essere utilizzata nel programma m Esempi: ðint raggio; ðfloat cerchio, circonf; G. Mecca - Programmazione Procedurale in Linguaggio C++ 20
Elementi di Base: Dichiarazioni >> Variabili Dichiarazione di Variabili m Sintassi <tipo> <nome>; <tipo> <nome 1>, <nome 2>, . . . ; m Dove ð<tipo> è uno dei tipi di dato del linguaggio ði nomi sono identificatori distinti (e devono obbedire alle regole sintattiche relative) G. Mecca - Programmazione Procedurale in Linguaggio C++ 21
Elementi di Base: Dichiarazioni >> Variabili Dichiarazione di Variabili m Semantica ðallocazione di uno spazio di memoria della dimensione prevista per il tipo di dato ðallo spazio di memoria è associato il nome (identificatore) ðlo spazio di memoria può, durante l’esecuzione del programma, contenere valori differenti G. Mecca - Programmazione Procedurale in Linguaggio C++ 22
Elementi di Base: Dichiarazioni >> Variabili Dichiarazione di Variabili: Esempi m ----- 32 bit ----- Esempi int contatore; un registro da 32 bit char sim, let 1; porzione di registro (8 bit) double superficie; due registri (64 bit) … contatore #100 #101 #102 #103 sim let 1 superficie … G. Mecca - Programmazione Procedurale in Linguaggio C++ 23
Elementi di Base: Dichiarazioni >> Variabili Dichiarazione di Variabili: Esempi Esecuzione n. 1 m Attenzione ðl’assegnazione dello spazio vale per una sola esecuzione del programma m Esempi int contatore; char sim, let 1; double superficie; contatore #100 #101 sim #102 let 1 superficie #103 … Esecuzione n. 2 contatore #2305 #2306 #2307 #2308 sim let 1 superficie … G. Mecca - Programmazione Procedurale in Linguaggio C++ 24
Elementi di Base: Dichiarazioni >> Variabili m Per lavorare con una variabile ðil processore ha bisogno di conoscerne lo spazio relativo nella memoria ðovvero l’indirizzo del primo bit di spazio occupato dalla variabile ed il relativo tipo ðEs: contatore: bit 0 del registro #100, 32 bit successivi ðEs: let 1: bit 8 del registro #101, 8 bit successivi G. Mecca - Programmazione Procedurale in Linguaggio C++ 25
Elementi di Base: Dichiarazioni >> Variabili m Per il programmatore invece ðè più semplice fare riferimento alla variabile attraverso il suo nome m Utilizzo della variabile ðil processore traduce i riferimenti alla variabile fatti nelle istruzioni attraverso il suo nome nel corrispondente indirizzo ðattraverso una tabella nome-indirizzo mantenuta durante l’esecuzione del prog. G. Mecca - Programmazione Procedurale in Linguaggio C++ 26
Elementi di Base: Dichiarazioni >> Variabili Inizializzazione delle Variabili m Attenzione ðil valore di una variabile è inizialmente “indefinito” ðdipende dal contenuto (casuale) del registro di memoria ðper usare una variabile è necessario attribuirle un valore iniziale ðoperazione di inizializzazione G. Mecca - Programmazione Procedurale in Linguaggio C++ 27
Elementi di Base: Dichiarazioni >> Variabili Inizializzazione delle Variabili #include <iostream. h> void main () { int num; cout << num << endl; } Schermo 1 a esecuzione: 14734480 2 a esecuzione: -332388 il valore restituito è casuale G. Mecca - Programmazione Procedurale in Linguaggio C++ 28
Elementi di Base: Dichiarazioni >> Variabili Inizializzazione delle Variabili #include <iostream. h> void main () { int num; num = 5; cout << num << endl; } Schermo 5 Il valore restituito è predicibile G. Mecca - Programmazione Procedurale in Linguaggio C++ 29
Elementi di Base: Dichiarazioni >> Variabili Inizializzazione delle Variabili m E’ possibile effettuare l’inizializzazione contestualmente alla dichiarazione m Sintassi <tipo> <nome> = <valore>; m Esempio void main () { int num = 5; cout << num << endl; } ATTENZIONE: differenza con le costanti: si tratta solo di un valore iniziale, che poi può cambiare G. Mecca - Programmazione Procedurale in Linguaggio C++ 30
Elementi di Base: Dichiarazioni >> Errori nella Rappresentazione m Dati del programma ðcostanti e variabili ðvengono utilizzate per rappresentare i dati del problema da risolvere m Attenzione ða causa dei vincoli dell’implementazione ci possono essere errori nella rappresentazione ðtrabocco ðerrori dovuti ad approssimazione G. Mecca - Programmazione Procedurale in Linguaggio C++ 31
Elementi di Base: Dichiarazioni >> Errori nella Rappresentazione Trabocco m Ogni tipo ha un insieme limitato di valori ðnon è possibile assegnare alle variabili valori al di fuori dell’intervallo corrispondente al tipo ðfenomeno di trabocco (“overflow”) m Esempio int i; float f; i = 400000; f =. 12 e+40; cout << i << “ “ << f; G. Mecca - Programmazione Procedurale in Linguaggio C++ Schermo -294967296 +INF 32
Elementi di Base: Dichiarazioni >> Errori nella Rappresentazione Trabocco m Di conseguenza ðogni volta che in un linguaggio è necessario utilizzare un dato, bisogna selezionare un tipo ðil tipo deve essere sufficientemente generale per contenere i valori del dato ðe deve essere sufficientemente economico da non rendere inefficienti le operazioni G. Mecca - Programmazione Procedurale in Linguaggio C++ 33
Elementi di Base: Dichiarazioni >> Errori nella Rappresentazione Errori di Approssimazione m Rappresentazione in virgola mobile ðinerentemente approssimata per i numeri irrazionali m Esempio double x; double y; x = 1/3. 0; // x vale 1/3 y = 3*x-1; // y vale 3*1/3 -1 Schermo cout << y << endl; -5. 55112 e-17 G. Mecca - Programmazione Procedurale in Linguaggio C++ 34
Elementi di Base: Dichiarazioni >> Errori nella Rappresentazione Errori di Approssimazione m In effetti ðl’intervallo di rappresentazione di float e double contiene dei “vuoti” m Esempio: float ðvalori in modulo tra (10 -38, 1038) 0 -1038 -10 -38 G. Mecca - Programmazione Procedurale in Linguaggio C++ 1038 inoltre, NON tutti i numeri reali in questi intervalli sono rappres. 35
Elementi di Base: Dichiarazioni >> Sommario Riassumendo m Dati di un programma ðvariabili ðcostanti m Tipi di dato m Elementi sintattici introdotti ðidentificatori (ATTENZIONE) ðistruzioni di dichiarazione m Semantica G. Mecca - Programmazione Procedurale in Linguaggio C++ 36
Elementi di Base: Dichiarazioni >> Elementi Sintattici di Base Un Semplice Programma // Calcolo della superficie del cerchio #include <iostream. h> void main() { // Dichiarazioni const float pigreco=3. 14; int raggio; float cerchio, circonf; // Operazioni cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio*pigreco; circonf = 2*pigreco*raggio; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; } G. Mecca - Programmazione Procedurale in Linguaggio C++ >> 37
Termini della Licenza m This work is licensed under the Creative Commons Attribution. Share. Alike License. To view a copy of this license, visit http: //creativecommons. org/licenses/by-sa/1. 0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-Share. Alike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http: //creativecommons. org/licenses/by-sa/1. 0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. G. Mecca - Programmazione Procedurale in Linguaggio C++ 38
- Slides: 38