L E Z I O N I P E R I C O R S I D I I N F O R M A T I C A D E L L I C E O S C I E N T I F I C O O P Z I O N E S C I E N Z E
A P P L I C A T E
P R O F . D O M E N I C O L O R U S S O
Elementi di programmazione
Macchina astratta
Scelta del linguaggio di programmazione e natura dell’esecutore
Identificazione fra linguaggio di programmazione ed esecutore.
Formulazione degli algoritmi con punto di vista del linguaggio di programmazione.
Descrizione dell'esecutore automatico fatta dal punto di vista del linguaggio di programmazione evidenziando quindi le funzionalità (cosa l'esecutore è in grado di fare ).
Punto di vista LOGICO/ASTRATTO: si considera l'esecutore prescindendo dalle sue componenti fisico/strutturali (come e' fatto e come funziona).
Macchina astratta
Fasi di esecuzione
Compito
Algoritmo
PROGRAMMA SORGENTE scritto nel linguaggio di programmazione
Traduzione nel programma ESEGUIBILE scritto nel linguaggio macchina
Esecuzione dell’algoritmo
INTERPRETE : traduzione istruzione per istruzione ( linguaggi interpretati)
COMPILATORE: traduzione integrale in un programma EQUIVALENTE che sia eseguibile da parte dell' esecutore.
FILE SORGENTE: file scritto nel linguaggio di programmazione
FILE ESEGUIBILE: file tradotto nel linguaggio direttamente eseguibile dall'esecutore.
Linguaggio macchina: e' quello direttamente comprensibile dalla macchina.
Macchina astratta
Macchina astratta
Elementi costitutivi dell’esecutore Descrizione astratta e FUNZIONALE dell'esecutore.
INTERPRETE/ATTUATORE: è la parte attiva dell'esecutore in grado di compiere le operazioni descritte nell'algoritmo anche agendo sulle altre parti dell'esecutore
MEMORIA: insieme di celle (virtuali) in cui contenere la rappresentazione di un valore. Alle celle sono associati un NOME, che generalmente indica il significato del valore e un TIPO che indica le modalita'di rappresentazione e trattamento. Generalmente ogni cella e'univocamente individuata.
STANDARD INPUT: entità utile a ricevere informazioni dall'esterno. In modo astratto è una sequenza di valori generata ESTERNAMENTE all'esecutore.
STANDARD OUTPUT: entità per il trasferimento verso l'esterno dei valori generati dall'esecutore. Per il momento sia una sequenza di valori generati dall'esecutore e trasferiti all'esterno di esso.
BUS DATI: trasferimento dei dati
Macchina astratta
Elementi costitutivi dell’esecutore
Queste cinque componenti sono poi logicamente collegate tra loro in modo che i valori delle informazioni possano essere trasferiti tra di esse. In particolare i valori possono essere trasferiti dalla memoria all’interprete, dall’interprete alla memoria, dallo standard input alla memoria e dall’interprete allo standard output.
Questa struttura è raffigurata nella figura sottostante.
Macchina astratta
Interprete-attuatore
Entità in grado di compiere le azioni descritte nel programma/algoritmo attraverso il linguaggio di programmazione. Le azioni vengono eseguite secondo la sequenza dinamica di esecuzione dell'algoritmo, determinata in base al calcolo di valori di verità su condizioni.
Azioni elementari compiute dall'esecutore:
1. Lettura ed acquisizione del contenuto di un valore rappresentato in una cella di memoria.
2. Scrittura di un valore in una cella di memoria secondo le opportune modalità di rappresentazione associate alla cella (tipo associato).
3. Estrazione delle rappresentazioni dei valore dallo standard di input e trascrizione in una cella di memoria.
4. Aggiunta di un nuovo valore, comunque generato, allo standard di output.
5. Generazione di nuovi valori utilizzando gli opportuni operatori.
Macchina astratta
Memoria
La memoria è un insieme di celle (virtuali) in grado di contenere le rappresentazioni dei valori delle informazioni. Il linguaggio di programmazione consente la creazione e distruzione (virtuale) delle celle di memoria.
Ad ogni cella di memoria viene associato un tipo per la opportuna rappresentazione dei valori contenuti.
Ogni linguaggio di programmazione:
è dotato di tipi primitivi
Consente di definire nuovi tipi.
Il tipo determina la modalita' di rappresentazione dei valori delle informazioni contenute nelle celle.
GENERALMENTE ogni cella è univocamente individuabile tramite il relativo identificatore.
Macchina astratta
Memoria
Un identificatore è una sequenza di lettere e di cifre iniziata da una lettera; può inoltre contenere il carattere speciale (underscore). Sono pertanto esempi di identificatori i seguenti:
dato
Dato
X1
X2
esami sostenuti
Non sono invece esempi di identificatori i seguenti:
3dato
x$
esami sostenuti
Macchina astratta
Memoria
Si noti in particolare che gli identificatori non possono iniziare con una cifra e che non devono contenere spazi;
inoltre:
Le lettere maiuscole sono considerate diverse da quelle minuscole (gli identificatori dato e Dato sono pertanto due identificatori distinti).
Sebbene l’associazione di una cella ad un identificatore non sia ne necessaria ne univoca (lo stesso identificatore può essere associato a più celle), assumeremo per ora che tutte le celle siano associate ad un uno ed un solo identificatore.
Macchina astratta
Variabili
Una cella di memoria, che, come abbiamo detto, è sempre associata a un tipo e a un identificatore, viene indicata con il termine variabile e ha le seguenti proprietà fondamentali:
1. Una volta creata contiene sempre la rappresentazione di un valore tra quelli che possono essere rappresentati in base al tipo ad associato.
2. Una variabile si dice definita se il valore in essa rappresentato è stato scritto dall’interprete/attuatore secondo le modalità esplicitamente previste dall’algoritmo;
si dice indefinita altrimenti. Si noti che in base a tale definizione una variabile appena creata è indefinita.
Macchina astratta
Variabili
3. Una variabile definita contiene un’informazione solo se associamo concettualmente un attributo al nome della variabile. In tal caso infatti il tipo della variabile determina la rappresentazione del valore mentre il nome associa un attributo. Ribadiamo che, in mancanza del tipo e del nome, il solo contenuto della cella/variabile non determina alcuna informazione.
Macchina astratta
Variabili
4. Una variabile indefinita non contiene un’informazione perchè la rappresentazione in essa contenuta è indeterminata. Di conseguenza non è mai lecito leggere una variabile indefinita (cioè trasferire il valore in essa rappresentato all’interprete, in memoria o, infine, allo standard output) perchè il risultato di tutte le operazioni che usassero tale valore sarebbe indeterminato.
Macchina astratta
Variabili
L’operazione di lettura di una variabile viene indicata tecnicamente con il termine uso della variabile.
Quanto detto si traduce pertanto nella seguente regola del tutto generale e di importanza fondamentale nella programmazione:
Regola 4.1 In un algoritmo, una variabile non può mai essere usata prima di essere stata definita
Macchina astratta
STANDARD DI INPUT
Sequenza di (rappresentazione di) valori generati esternamente all'esecutore.
L'interprete trasferisce uno per volta i valori all'interno delle celle di memoria secondo la opportuna rappresentazione determinata dal tipo possibile per la cella di destinazione
L'operazione di trasferimento dallo standard input deve tenere conto del
tipo previsto per la particolare cella di memoria e quindi dell’insieme dei valori possibili per quel tipo.
Necessità di sincronizzazione con l'algoritmo (quando l’algoritmo lo richiede)
Macchina astratta
Standard output
• Dispositivo per il trasferimento verso l’esterno delle rappresentazioni dei valori
• Le rappresentazioni tengono conto del tipo richiesto
• Il trasferimento avviene QUANDO l'algoritmo lo stabilisce
Macchina astratta
Espressioni
Notazioni che mediante il linguaggio di programmazione permettono di descrivere il meccanismo per generare un valore. Si suddividono in:
Espressioni costanti semplici: le espressioni costanti semplici, indicate anche comunemente col termine costanti, sono notazioni che specificano direttamente un valore. Le costanti possono essere numeri interi o reali, nel qual caso si usano sequenze di cifre composte con alcuni caratteri speciali secondo le usuali convenzioni, valori logici, caratteri singoli o stringhe di caratteri.
Macchina astratta
Espressioni
Espressioni costanti composte: le espressioni costanti composte, indicate anche comunemente col termine espressioni costanti, sono espressioni costituite da più parti.
L’elemento che consente di formare espressioni costanti è sempre un operatore, cioè un simbolo che rappresenta una legge che trasforma un numero finito di valori detti argomenti in un valore detto risultato. La nozione di operatore coincide pertanto con la nozione matematica di operazione nel suo significato più generale. Ad esempio, se il simbolo + rappresenta l’operatore di somma tra numeri, l’espressione:
1254 + 36
rappresenta il valore 1290, che è il risultato che si ottiene sommando i numeri interi 1254 e 36 .
Macchina astratta
Espressioni
Espressioni non costanti semplici: Le espressioni non costanti semplici sono espressioni formate unicamente dall’identificatore di una variabile e rappresentano il valore contenuto nella variabile al momento in cui sono considerate
Macchina astratta
Espressioni
Espressioni non costanti composte: le espressioni non costanti composte, analogamente alle espressioni costanti composte, sono espressioni costituite da parti.. La differenza consiste nel fatto che nel caso di espressioni non costanti composte, le variabili (che sono espressioni non costanti semplici) possono essere usati come operandi degli operatori presenti nell’espressione.