Università di Roma “Tor Vergata” L2 - 1 “ciclo di vita” della soluzione (informatica) di un problema errori “run-time” errori sintattici editor codice C++ compilatore codice eseguibile esegui OK risultati scorretti ma prima di arrivare a questo … 1. problema (espresso in linguaggio naturale: realizzare un “word processor” …) 2. analisi/specifica: quali dati in ingresso quali dati in uscita sottoproblemi (inserisci testo, cancella testo, … ) 3. rappresentazione + algoritmo Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 2 4. riesame dell’algoritmo (fa quanto richiesto? considera tutte le situazioni possibili?) 5. traduzione in C++ (programma) 6. inserimento del programma nel calcolatore 7. “compilazione” del programma sorgente 8. esecuzione (correzione di errori sintattici e semantici) (9. manutenzione/aggiornamento: ~ 80% del tempo speso da un programmatore professionale) Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 3 problema: automazione biblioteca analisi: richiedi operazione ricerca prestito restituzione nuovo libro sottoproblemi “rappresentazione di un libro”: autore titolo anno pubbl. posizione … ricerca acquisisci dati (autore e/o titolo e/o posizione …) ricerca in archivio sottoproblemi mostra risultato Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 4 Tradurre una soluzione (rappresentazione + algoritmo) in C++ a) comprendere “che cosa può fare” la macchina fl 1. come è fatta 2. quali operazioni b) imparare a interagire con la macchina C++ fl usare il linguaggio C++ fl i suoi elementi linguistici sono: (corrispettivo in ling. naturale) i. identificatori ii. operatori iii. espressioni iv. comandi v. blocchi Fondamenti di Informatica 1 (nomi) (verbi, predicati) (elementi di frasi) (frasi) (paragrafi) V. Grassi Università di Roma “Tor Vergata” L2 - 5 la macchina C++ (“astrazione” di una macchina reale) unità centrale x: alfa: • • • memoria standard input (• tastiera • mouse • …) standard output (• schermo • “file” su disco • …) unità centrale: dispositivo in grado di • trasferire valori da standard input a memoria (lettura) • trasferire valori da memoria a standard output (scrittura) azioni elementari • eseguire operazioni (aritmetiche, logiche, modifica) usando valori in memoria • controllare l’ordine di esecuzione delle operazioni elementari memoria: Fondamenti di Informatica 1 controllo del flusso insieme di contenitori di valori identificabili da un nome V. Grassi Università di Roma “Tor Vergata” L2 - 6 standard input standard output: sequenze di valori (stream) accedute in ordine sequenziale in lettura (input) o scrittura (output) i due flussi sono separati Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 7 memoria • insieme di contenitori (locazioni) • ogni contenitore : 1) contiene la rappresentazione di un valore 2) è identificato da un nome alcuni contenitori hanno nomi predefiniti : INT_MAX INT_MIN DBL_MAX DBL_MIN altri possono essere associati a nomi definiti da utente Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 8 nomi definiti da utente (identificatori): • iniziano con una lettera alfabetica • che può essere seguita da una qualsiasi combinazione di lettere, cifre e carattere _ • maiuscole e minuscole sono differenti! primonome primoNome 1nome sconto_in_% Numero2 Max dim Æ Æ Æ Æ Æ Æ OK OK ERRORE ERRORE OK ERRORE suggerimento: usare nomi significativi • significato di un nome fl contenuto della locazione corrispondente fl il significato di un nome varia al variare del contenuto della locazione associata Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 9 quali valori nelle locazioni? Z : interi relativi (INT_MIN ≤ n ≤ INT_MAX) R : reali (DBL_MIN ≤ |x| ≤ DBL_MAX) B : {vero, falso} Ch : {a, b, c,…, z, A, B, …, Z, !, ?, ;, % …} rappresentati come? Z : rappresentazione decimale (-312 42 …) R : rappresentazione con punto o esponenziale (-0.251 3001.23 1.23e-12 …) B : {true, false} Ch : {'a', 'b',…, 'z', 'A', 'B', …, 'Z', '!', '?', ';', '%'…} nota: 2 2.0 '2' rappresentano cose diverse !!!! in C++, questi insiemi di valori sono indicati dai seguenti nomi di tipo (tipi di dato primitivi): int double Fondamenti di Informatica 1 bool char V. Grassi Università di Roma “Tor Vergata” L2 - 10 come si associa un nome a una locazione dichiarazione: crea una coppia [nome, locazione] due tipi di dichiarazione (per ora) …: • di variabile: sintassi tipo nome ; fl ¨ valore modificabile nome • di costante: sintassi const tipo nome = valore ; fl nome Fondamenti di Informatica 1 valore ¨ valore non modificabile V. Grassi Università di Roma “Tor Vergata” L2 - 11 esempio: const double PI_GRECO = 3.1415 ; const char ASTER = '*' ; double x, y ; bool OK ; fl PI_GRECO 3.1415 ASTER '*' x y OK ¨ valore non modificabile ¨ valore non modificabile ¨ solo valori double ¨ solo valori double ¨ solo valori bool nota: un nome può comparire una sola volta in una dichiarazione double x, y; char x ; fl ERRORE !!! | | const int z=0; int z, y ; fl ERRORE !!! creano ambiguità Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 12 unità centrale: operazioni di lettura/scrittura • lettura: sintassi cin >> nome; generalizzabile in: cin >> nome1 >>nome2 >> …>> nomen ; • scrittura: sintassi cout << espressione; generalizzabile in: cout << espressione1 <<espressione2 << … << espressionen ; Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 13 output int x ; double y ; char c ; x y c 5 3.05 '%' cout << x << x+y << c ; fl (effetto sullo standard output) 58.05% • si può “abbellire” introducendo spazi bianchi: cout<<x<<' '<<x+y<<' '<<c ; fl (effetto sullo standard output) 5 8.05 % (segue …) Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 14 • possono essere scritti caratteri speciali come '\n' (a capo) cout<<x<<'\n'<<y<<' '<<c ; fl (effetto sullo standard output) 5 3.05 % • si possono scrivere “stringhe” (sequenze di caratteri): cout<<"questa e' una stringa"; cout<<"questa va a capo\n"; cout<<"questa e' un'altra stringa"; fl (effetto sullo standard output) questa e' una stringaquesta va a capo questa e' un'altra stringa Fondamenti di Informatica 1 V. Grassi Università di Roma “Tor Vergata” L2 - 15 struttura di un programma C++ vengono specificati: • un ambiente (quali nomi, quali valori ) • un algoritmo (sequenza di operazioni) istruzioni #include dichiarazioni main() {dichiarazioni ; comandi; } definizione ambiente definizione algoritmo #include <iostream> using namespace std; main() {int i; char c; double x; cout<<"scrivi un intero, un carattere, un reale \n"; cin >> i >> c >> x; cout<<"i valori letti sono: " <<i<<' '<<c<<' '<<x<<'\n'; return 0; /*segnala fine corretta*/ } Fondamenti di Informatica 1 V. Grassi