1. problema - Università degli Studi di Roma "Tor Vergata"

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