Laboratorio di Informatica (Chimica)
Algoritmi, Dati e Programmi.
Walter Cazzola
Dipartimento di
Università degli
Informatica e Comunicazione
Studi di Milano.
e-mail: [email protected]
Walter Cazzola
Algoritmi, Dati e Programmi
1
Algoritmi, Dati e Programmi
Introduzione ai concetti di:
–
–
–
–
–
Algoritmo;
Programma;
Dato;
Diagramma di flusso;
Linguaggio di programmazione.
Walter Cazzola
Algoritmi, Dati e Programmi
2
Algoritmi, Dati e Programmi: Nozioni
Algoritmo = Successione di operazioni elementari che
possono essere eseguite da un calcolatore.
Dato = informazione da elaborare rappresentata in un
formato che consenta al programma di operare su di essa.
Programma = algoritmo in un linguaggio “comprensibile” dal
computer.
Linguaggio macchina = Basato sul set di istruzioni della
macchina, rappresentato da sequenze di 0 e 1.
Linguaggio ad alto livello = Linguaggio più vicino al linguaggio
naturale, rigoroso e non ambiguo.
Walter Cazzola
Algoritmi, Dati e Programmi
3
Elaborazione dell’Informazione
Ogni problema legato all’elaborazione di informazioni
è caratterizzato da:
– un insieme di dati di partenza, ed
– un risultato cercato.
Ogni sua soluzione è:
– una procedura che genera il risultato cercato a
partire dall’insieme dei dati di partenza
specificati.
Walter Cazzola
Algoritmi, Dati e Programmi
4
Elaborazione dell’Informazione
Distinguiamo tra:
– conoscenza di come si risolve un problema:
Î
Î
Î
analisi del problema;
identificazione di una soluzione; e
descrizione della soluzione
– ed effettiva capacità di risolvere un problema:
Î
Î
interpretazione della soluzione; e
attuazione della soluzione
La conoscenza di come si risolve un problema è ciò
che ci permette di sviluppare un programma.
Walter Cazzola
Algoritmi, Dati e Programmi
5
Elaborazione dell’Informazione
Il programma sarà poi interpretato ed eseguito da un
esecutore (es. calcolatore).
Un esecutore è caratterizzato da:
–
–
–
il linguaggio che è in grado di interpretare;
l’insieme di azioni che è in grado di compiere; e
l’insieme delle regole che ad ogni costrutto linguistico
sintatticamente corretto associano le relative azioni da
compiere.
Walter Cazzola
Algoritmi, Dati e Programmi
6
Elaborazione dell’Informazione
Per la descrizione della soluzione si utilizza:
– linguaggio naturale (ad es. italiano, inglese, …): ambiguo;
– linguaggio formale (non ambiguo):
Î
Î
Î
Î
formalismo matematico;
pseudo-codice;
diagramma di flusso; e
linguaggio di programmazione.
La descrizione rigorosa di un metodo che consente di
ottenere un risultato attraverso passi elementari si
chiama algoritmo.
Walter Cazzola
Algoritmi, Dati e Programmi
7
Elaborazione dell’Informazione
Processo di sviluppo di un programma:
– analisi del problema e identificazione di una
soluzione;
– formalizzazione della soluzione e definizione
dell’algoritmo risolutivo;
– programmazione in un linguaggio di programmazione
“ad alto livello”; e
– traduzione in linguaggio macchina
Walter Cazzola
Algoritmi, Dati e Programmi
8
Algoritmo
Un algoritmo è un insieme finito ed ordinato di passi che
determinano un procedimento atto a risolvere in un
tempo finito un problema utilizzando i dati iniziali ed
ottenendo dei risultati.
Esempi:
Algoritmi per eseguire le 4 operazioni che ci sono stati
insegnati alle elementari
– Espressi in un linguaggio adatto ai bambini
Ricette di cucina
– Espresse nel linguaggio dei libri di cucina
Walter Cazzola
Algoritmi, Dati e Programmi
9
Algoritmo: Esempio
Esempio: Algoritmo per accedere al proprio account sul
computer del laboratorio:
1.
2.
3.
4.
5.
Accendere lo schermo se è spento;
Scrivere il proprio <username> nella riga in cui compare la
scritta login:
Scrivere la propria <password> nella riga in cui compare la
scritta password;
Se il sistema risponde con la frase: «utente non abilitato»
ritornare al punto 2. e riprovare;
Se il sistema continua a rispondere con la frase: «utente
non abilitato» allora chiamare il tutor.
Walter Cazzola
Algoritmi, Dati e Programmi
10
Algoritmi e Programmi: Sviluppo
Per costruire un programma conviene procedere con
metodo:
– passando da un’analisi del problema da risolvere,
– all’algoritmo della soluzione rappresentato in un
“linguaggio” adatto all’uomo ma non troppo lontano dai
linguaggi di programmazione,
– ed infine al programma scritto nel linguaggio di
programmazione prescelto.
Walter Cazzola
Algoritmi, Dati e Programmi
11
Algoritmi e Programmi: Sviluppo
Introdurremo la nozione di:
– contenitore di dati (variabile)
– come astrazione dalla nozione di zona della
memoria utilizzata da un computer per i dati
Descriveremo gli algoritmi mediante:
– diagrammi di flusso; e
– un linguaggio di programmazione didattico (LP)
Walter Cazzola
Algoritmi, Dati e Programmi
12
Processo di Sviluppo
A. Diamo un nome al problema e partiamo dall’analisi del
problema;
B. Scriviamo la specifica funzionale;
C. Outline dell’algoritmo,
1. Si introducono i contenitori di dati necessari e le
relative operazioni elementari;
2. Si disegna un diagramma di flusso che indica in modo
preciso e non ambiguo la successione di operazioni da
eseguire;
D. Traduciamo il diagramma di flusso in un programma.
Walter Cazzola
Algoritmi, Dati e Programmi
13
A. Problema e Analisi del Problema
L’analisi del problema è il primo passo e deve
fornire:
– un nome e una breve descrizione di cosa si vuol
fare;
– un elenco di requisiti: richieste che il programma
deve soddisfare.
Walter Cazzola
Algoritmi, Dati e Programmi
14
Esempio di Analisi del Problema
Problema: RADICI
Descrizione: vogliamo trovare le soluzioni reali di
un’equazione di secondo grado.
Requisiti: l’equazione può non avere soluzioni, avere due
soluzioni coincidenti o due soluzioni distinte; a seconda
dei casi, si vuole il messaggio:
– “nessuna radice x”;
– “radici coincidenti = r” dove r è il valore reale delle
radici;
– “due radici distinte r1, r2” dove r1 e r2 sono i
valori reali delle due radici.
Walter Cazzola
Algoritmi, Dati e Programmi
15
B. Specifica Funzionale
La specifica funzionale indica:
– quali sono i dati iniziali, cioè quelli da elaborare,
detti anche ingressi all’algoritmo; e
– Qual è il risultato atteso, in funzione degli
ingressi, detto anche uscita dell’algoritmo.
Walter Cazzola
Algoritmi, Dati e Programmi
16
Esempio di Specifica Funzionale
RADICI: specifica funzionale
Argomenti o ingressi:
– a,b,c: numeri reali, coefficienti dell’equazione da
elaborare
Risultati o uscite:
– “nessuna radice”
– “x1 = x2 = r” se l’equazione a.x2+b.x+c ha radici
coincidenti = r
– “x1 = r1, x2 = r2” se l’equazione a.x2+b.x+c ha
radici distinte = r1, r2
Walter Cazzola
Algoritmi, Dati e Programmi
17
C. Outline dell’Algoritmo
Descrivere brevemente l’idea dell’algoritmo
– cioè i passi da eseguire per giungere alla
soluzione a partire dagli ingressi.
Il primo outline non deve necessariamente essere
molto dettagliato: si procede per raffinamenti
successivi.
Walter Cazzola
Algoritmi, Dati e Programmi
18
Esempio di Outline dell’Algoritmo
RADICI: Outline dell’Algoritmo.
– Risolvo il problema calcolando il discriminante delta
dell’equazione;
– Analizzo i vari casi di delta:
< 0
= 0
> 0
– Caso per caso costruisco il messaggio da inviare in
uscita.
Successivamente definisco le variabili coinvolte e
dettaglio l’algoritmo grazie ad un diagramma di flusso.
Walter Cazzola
Algoritmi, Dati e Programmi
19
C.1. Contenitori di Dati
Un algoritmo deve tener traccia degli ingressi, dei risultati
e dei valori intermedi che prodice durante il calcolo.
Allo scopo, usa dei contenitori di dati.
Un contenitore dati, detto anche variabile, è un’astrazione
della nozione di area di memoria contenente dei dati.
I dati contenuti hanno un tipo, che caratterizza un insieme
di elementi e le operazioni possibili su di essi.
Walter Cazzola
Algoritmi, Dati e Programmi
20
C.1. Contenitori di Dati (Segue)
Tipo dei Contenitori.
TIPO di DATO = insieme di elementi rappresentabili in
modo finito, dotato di operazioni primitive su di esso.
ESEMPIO: il tipo degli interi
– è l’insieme degli interi, sono successioni finite di cifre con
eventuale segno;
– dotato delle seguenti operazioni primitive (e calcolabili): +, -,
*, divisione intera, resto.
pippo: intero
54
Walter Cazzola
Nome contenitore e tipo
Contenuto = dato appartenete al tipo di dati
associato al nome
Algoritmi, Dati e Programmi
21
C.1. Contenitori di Dati (Segue)
I contenitori di dati utilizzati per i risultati intermedi
dipendono dall’algoritmo:
– quindi, a meno di casi assai elementari, è
necessario avere già un’idea ben delineata
dell’algoritmo per determinarli
– difficilmente sono TUTTI prevedibili sin dall’inizio;
man mano che l’algoritmo prende forma, si possono
aggiungere al volo nuovi contenitori
Walter Cazzola
Algoritmi, Dati e Programmi
22
Esempio di Contenitori di Dati
Contenitori di dati usati da RADICI.
Di quali contenitori abbiamo bisogno per RADICI?
– Sicuramente di quelli per contenere i dati di
ingresso ed il risultato: 3 contenitori per a,b,c
(ingressi) e r1, r2.
– Eventuali contenitori per i risultati intermedi (ad
es. delta) ed eventualmente quello finale.
Tutti i contenitori saranno di tipo float.
Walter Cazzola
Algoritmi, Dati e Programmi
23
C.2 Diagrammi di Flusso
Diagramma di Flusso: è un formalismo visuale per
rappresentare in modo semplice ed intuitivo un algoritmo.
Un algoritmo compie due tipi fondamentali di operazioni:
– calcoli primitivi: ottenibili mediante le operazioni
primitive dei tipi di dati (sostanzialmente, valutando
espressioni);
– azioni: consistono nel modificare il contenuto dei
contenitori di memoria, eventualmente eseguendo calcoli
primitivi.
Walter Cazzola
Algoritmi, Dati e Programmi
24
Calcoli Primitivi
Valutazione di espressioni in cui compaiono i nomi dei
contenitori di dati utilizzati e solo operazioni primitive
disponibili sui relativi tipi di dati;
il valore dell’espressione è riferito allo STATO di
memoria dell’algoritmo, cioè al contenuto attuale dei
suoi contenitori dati.
Esempio:
b .b - 4
.
a
.
a : float
b : float
c : float
2
4
2
Stato della Memoria
c = 0
È un’espressione valutabile perché contiene operazioni
primitive disponibili nel tipo float.
Walter Cazzola
Algoritmi, Dati e Programmi
25
Calcoli Primitivi: Espressioni Booleane
Fra le espressioni valutabili assumono particolare importanza
quelle di tipo booleano.
Il tipo booleano contiene due valori:
– vero, falso.
Esempi di espressioni booleane disponibili nei tipi numerici:
– x < y
– (x + 5) = y
– ecc.
Walter Cazzola
Algoritmi, Dati e Programmi
26
Azioni
Modificano lo stato di memoria, cioè i valori dei
contenitori dati.
Le azioni più semplici sono gli assegnamenti, della forma:
– metti ESPRESSIONE in CONTENITORE
– si valuta ESPRESSIONE e si mette il risultato in
CONTENITORE, sostituendone il valore precedente.
Esempi di altre azioni: leggi da input, scrivi su output.
Esempio:
Stato della Memoria
a : float
b : float
c : float
delta: float
2
4
2
0
Metti b . b - 4
Walter Cazzola
.
a
.
c in delta.
Algoritmi, Dati e Programmi
27
Diagrammi di Flusso
– Blocchi Computazionali.
– Blocchi Decisionali.
vero
metti x+y in y;
metti x-1 in x;
Contengono sequenze di
azioni.
x = 0
falso
Contengono una condizione
booleana:
– se vera, si segue la freccia
etichettata “vero”;
– se falsa si segue la freccia
etichettata “falso”
Walter Cazzola
Algoritmi, Dati e Programmi
28
Strutture di Controllo Modulari
Un diagramma di flusso si ottiene collegando le frecce
uscenti dai blocchi di elaborazione e decisionali.
Una buona norma è attenersi a diagrammi con strutture
predefinite, con una sola freccia entrante ed una sola
uscente.
Tali strutture sono dette strutture di controllo e sono
alla base della programmazione strutturata.
Ciò consente di modularizzare (cioè dividere in parti o
moduli) il diagramma; è utile poiché spesso i moduli
corrispondono a sottoproblemi
Walter Cazzola
Algoritmi, Dati e Programmi
29
Strutture di Controllo Principali
– Sequenza.
– Iterazione.
falso
– Selezione.
vero
Walter Cazzola
vero
falso
Algoritmi, Dati e Programmi
30
Esempio Diagramma di Flusso
Ingresso: 1, 2, 1
Assegna ad a,b,c i
valori d’ingresso
RADICI:
Diagramma di Flusso
Metti il valore di
b2-4ac in delta
a:float
b:float
c:float
1
2
1
delta:float
0
MESSAGGIO:
radici coincidenti = -1
Stato della Memoria
delta<0?
vero
MESSAGGIO:
‘nessuna soluzione’
Walter Cazzola
falso
delta=0?
falso
vero
MESSAGGIO:
‘radici coincidenti=’
-b/2a
Algoritmi, Dati e Programmi
MESSAGGIO:
‘radici distinte=’
(-b-radice(delta))/2a
(-b+radice(delta))/2a
31
D. Il Programma
Disegnato il diagramma di flusso e quindi delineato in
tutte le sue parti l’algoritmo non resta che tradurlo in
un programma che il calcolatore sarà in grado di
eseguire.
Il programma verrà scritto usando un linguaggio di
programmazione (ad es. C, Java, Matlab etc.).
Noi cominceremo con un linguaggio didattico per prendere
dimestichezza coi vari concetti.
Walter Cazzola
Algoritmi, Dati e Programmi
32
Linguaggi di Programmazione
Un linguaggio di programmazione è costituito da:
– un vocabolario
– un insieme di regole sintattiche che specificano come
comporre istruzioni ben formate
– una semantica che associa un “significato” alle istruzioni
ben formate, cioè l’azione denotata da ciascuna
istruzione.
Rispetto ad una qualsiasi lingua parlata da esseri umani,
un linguaggio di programmazione è molto più semplice,
perché la sua sintassi è molto semplice.
Walter Cazzola
Algoritmi, Dati e Programmi
33
Linguaggi di Programmazione
Linguaggi di Basso Livello.
Sono linguaggi di programmazione caratterizzati da
istruzioni molto elementari (ad es. l’Assembly).
Richiedono uno sforzo di codifica maggiore da parte
del programmatore.
Linguaggi di Alto Livello.
Sono linguaggi di programmazione in cui ad ogni
istruzione corrisponde un insieme di azioni più
articolato. Richiedono uno sforzo di codifica
inferiore.
Walter Cazzola
Algoritmi, Dati e Programmi
34
Esempio
Il linguaggio L1 mette a disposizione i comadi:
–
–
–
–
Aggiungi_una_unità_al_dato_A
Leggi_dato_A
Leggi_dato_B
Esegui_per <numero di volte>
Il linguaggio L2 mette a disposizione i comadi:
– Leggi_dato_A
– Leggi_dato_B
– Somma <addendo1, addendo2>
Walter Cazzola
Algoritmi, Dati e Programmi
35
Esempio (Segue)
Vogliamo scrivere un programma per la somma di due
numeri memorizzati rispettivamente nei registro A e B.
In L1:
Leggi_dato_A
Leggi_dato_B
Esegui_per B volte:
Aggiungi _una_unità_al_dato_A
In L2:
Leggi_dato_A
Leggi_dato_B
Somma (A, B)
L2 è un linguaggio di livello più alto rispetto a L1,
perché offre al programmatore la possibilità di usare
istruzioni che sono meno “vicine” al modo in cui lavora il
processore.
Walter Cazzola
Algoritmi, Dati e Programmi
36
Il Linguaggio Macchina
Il processore è in grado di riconoscere (e quindi di
eseguire) solo programmi scritti in un proprio linguaggio
di basso livello (linguaggio macchina).
Ogni modello di processore (es: Intel, Pentium, Motorola,
PowerPC) ha un proprio linguaggio macchina diverso da
quello degli altri processori.
Un programma scritto in un linguaggio diverso dal linguaggio
macchina deve essere quindi tradotto nel linguaggio che
il processore sa interpretare.
Walter Cazzola
Algoritmi, Dati e Programmi
37
Linguaggi di Programmazione
Invece di codificare algoritmi in linguaggi macchina si
utilizzano linguaggi ad alto livello.
Le istruzione dei linguaggi ad alto livello sono facilmente
comprensibili ai programmatori.
Compilatore: (programma che) traduce automaticamente
un programma ad alto livello in linguaggio macchina.
Affronteremo la programmazione tramite un linguaggio
semplificato che chiameremo LP (riepilogo sintassi sul
sito del corso).
Walter Cazzola
Algoritmi, Dati e Programmi
38
Nozione di Variabile
Come si indirizzano le celle di memoria?
Invece di usare gli indirizzi fisici si usano dei nomi
simbolici (es., x, y, nome,...) che vengono mappati in
indirizzi fisici attraverso la fase di compilazione.
Le variabili vanno dichiarate all’inizio del programma
(celle diverse, nomi diversi).
Valore di una variabile = contenuto corrente della cella di
memoria associata alla variabile.
Walter Cazzola
Algoritmi, Dati e Programmi
39
Nozione di Costante
Per esprimere direttamente valori prefissati (cioè che
non devono essere modificati dal programma) si
utilizzano le costanti
Una costante è una rappresentazione simbolica di un
numero, stringa, ecc.
Ad esempio, 1, ‘ciao’, 3.14, ecc.
Il set di costanti disponibile dipende dal linguaggio di
programmazione.
Walter Cazzola
Algoritmi, Dati e Programmi
40
Espressioni
Le espressioni servono per rappresentare calcoli a livello
simbolico.
Un’espressione può coinvolgere nomi di variabili, costanti,
operatori aritmetico-logici, ecc.
Es:
3+4,
x+y-1 (dove x è una variabile),
x>0 and y>1
Walter Cazzola
Algoritmi, Dati e Programmi
41
Programma LP
La sintassi di un programma LP consiste di due blocchi.
Dichiarazione di variabili e costanti:
const pi = 3.14, nome = “Walter”;
var x: int, y: string, z: float;
Sono liste di dichiarazioni introdotte rispettivamente
dalla keyword const e var.
Sequenza di istruzioni racchiusa tra le parole chiave
begin … end e separate dal punto e virgola ‘;’
Walter Cazzola
Algoritmi, Dati e Programmi
42
Esecuzione di un Programma
Qual è significato (semantica) di un programma?
Trasformazione da Input iniziale a Output finale!
Un programma deve essere eseguito per poter calcolare
la trasformazione InputÎOutput.
L’esecuzione modifica lo stato del programma:
stato iniziale, corrente, e finale.
L’esecuzione dipende dalla semantica dei singoli costrutti.
Walter Cazzola
Algoritmi, Dati e Programmi
43
Lettura e Scrittura
Le operazioni di lettura e scrittura servono per ottenere
valori in input (es. tastiera) o fornire valori in output
(es. Video).
Assumiamo che input e output siano sequenze di valori:
– write(Variabile): aggiunge il valore corrente di Variabile
all’output;
– read(Variabile): toglie il primo valore della lista input e lo
assegna a Variabile.
Walter Cazzola
Algoritmi, Dati e Programmi
44
Assegnamento
Si utilizza per assegnare il valore corrente di
un’espressione ad una variabile. L’assegnamento cambia
il valore della variabile.
Variabile := Espressione;
se nello stato corrente Espressione si valuta in val allora
Variabile varrà val dopo l’esecuzione dell’assegnamento.
Es. x:=x+1
L’espressione x+1 va valutata nello stato corrente.
Il risultato dell’espressione è assegnato nuovamente ad x.
Walter Cazzola
Algoritmi, Dati e Programmi
45
Istruzione Condizionale
Sintassi:
if Condizione then Lista Istruzioni1
else Lista Istruzioni2
endif
Condizione = Espressione Booleana.
Se la condizione si valuta in vero si
esegue ramo then, altrimenti si esegue
vero
il ramo else
Lista Istruzioni1
Walter Cazzola
Algoritmi, Dati e Programmi
Condizione
falso
Lista Istruzioni2
46
Esempi
Lettura da tastiera e Leggere due numeri, sommarli Calcolare il massimo tra 2
scrittura su video:
valori letti in input:
e stampare il risultato:
var s: string
begin
read(s);
write(s);
end.
Walter Cazzola
var x,y,somma: int;
begin
read(x);
read(y);
somma:=x+y;
write(somma);
end.
Algoritmi, Dati e Programmi
var x,y: int;
begin
read(x);
read(y);
if x>y then
write(x)
else write(y);
endif
end.
47
Istruzione Ciclica
Sintassi:
while Condizione do
Lista Istruzioni
endw
Lista Istruzioni viene eseguita fintantochè
Condizione si valuta in vero.
Quando Condizione si valuta in falso si
Condizione
falso
vero
Lista Istruzioni
passa all’istruzione seguente nel
programma
Walter Cazzola
Algoritmi, Dati e Programmi
48
Esempio: Somma di K Numeri
Problema: leggere K, e quindi calcolare la somma di K valori
letti dall’input.
Devo memorizzare K, la somma, e i valori letti V1,V2,…,VK
– Poiche uso ogni Vi una sola volta, bastano 3 variabili: K, x ed S;
– x manterrà il valore Vi corrente, S la somma progressiva;
var K, x, S: int;
begin
read(K); S:=0;
while K>0 do
read(x);
S:=S+x; K:=K-1;
endw;
write(somma);
end.
Walter Cazzola
Algoritmi, Dati e Programmi
49
Esecuzione del while
Inizialmente: val(x),val(K)=indefiniti,val(somma)=0.
Leggo il valore 3: val(K)=3
Poiché val(K)>0, entro nel ciclo.
Leggo il primo valore in input V1 su cui fare la somma e
lo memorizzo in x.
Calcolo somma=somma+x, e decremento K.
Cioè dopo l’esecuzione delle istruzioni dentro il ciclo
val(x)=3, val(somma)=3, val(K)=2
Proseguo con il ciclo fino a che val(K)=0.
A tal punto esco dal ciclo e scrivo il valore finale di
somma
Walter Cazzola
Algoritmi, Dati e Programmi
50
Esempio: Calcolo MCD
Calcolare il massimo comun divisore tra due numeri interi
letti da input, utilizzando l’algoritmo di Euclide:
– mcd(m,n)=m=n se n=M
– mcd(m,n)=mcd(m-n,n) se m>n
– mcd(m,n)=mcd(m,n-m) se n>m
Walter Cazzola
Algoritmi, Dati e Programmi
51
Algoritmo di Euclide
Leggo m and n
(*) Fino a che m diverso da n,
– se m>n allora sottraggo n ad m
– se n>m sottraggo m ad n
– torno a (*)
Quando m=n stampo, ad es, n
Walter Cazzola
Algoritmi, Dati e Programmi
52
Es. Calcolo MCD
var m,n: int;
begin
read(m);
read(n);
while not(m=n) do
if m>n then m:=m-n
else n:=n-m;
endif
endw;
write(n);
(Nota: a questo punto n=m!)
end
Walter Cazzola
Algoritmi, Dati e Programmi
53
Strutture Dati Complesse
Oltre a variabili di tipo intero, stringa, ecc può essere
molto utile utilizzare dati strutturati (ad es. liste,
insiemi, ecc)
Molti linguaggi di programmazione forniscono vari tipi di
dato quali
– array,
– record,
– list
Nel linguaggio LP abbiamo solo array e record.
Walter Cazzola
Algoritmi, Dati e Programmi
54
Array
Un array rappresenta una sequenza di celle consecutive
contenenti dati omogenei (es. interi).
Una variabile V di tipo array denota la sequenza di celle
Per accedere direttamente alla cella i-esima si utilizza il
suo indice i come segue: V[i].
Sintassi dichiarazione:
– NomeVarArray: array 1..N of Tipo; (N costante)
Nelle espressioni, assegnamenti, ecc si utilizza poi
– NomeVarArray[Exp] dove Exp è un espressione che
si valuta in un valore da 1…N
Walter Cazzola
Algoritmi, Dati e Programmi
55
Esempio: Array
Leggere K=<10 valori e stamparli
in ordine inverso:
– Dobbiamo leggere V1,…,VK,
memorizzarli e poi stamparli in
ordine VK,…,V1.
– Usiamo un array A di N>K
posizioni per memorizzare i
dati in input.
– Dopo aver memorizzato i dati,
li scriviamo scorrendo l’array
dall’indice K all’indice 1.
Walter Cazzola
var A : array 1..10 of int;
i,K : int;
begin
read(K);
i := 1;
while i=<K do
read(A[i]);
i:=i+1;
endw;
i:=K;
while i>0 do
write(A[i]);
i:=i-1;
endw;
end.
Algoritmi, Dati e Programmi
56
Record
Tipo di dato per gestire dati strutturati di tipo
eterogeneo; ogni dato viene chiamato campo del
record.
Sintassi:
Variabile: record
Campo-1:Tipo1;
…
Campo-N:TipoN;
end
Per accedere ai campi di un record si utilizza:
Variabile.Campo-i (rappresenta l’i-esimo campo)
Walter Cazzola
Algoritmi, Dati e Programmi
57
Esempio di Record
Coordinate:
var Punto:record x,y:int end;
z:int;
Punto.x=3;
Punto.y=2;
z:=Punto.x*Punto.y;
Walter Cazzola
Algoritmi, Dati e Programmi
58
Compilatore e Loader
Un compilatore è un programma che traduce un
programma scritto in linguaggio ad alto livello in un
programma scritto in linguaggio macchina:
– Un compilatore produce quindi un programma
eseguibile (.exe in Windows)
Il loader è il programma che carica un programma in
linguaggio macchina in memoria principale (e quindi
mappa indirizzi logici in indirizzi fisici)
Walter Cazzola
Algoritmi, Dati e Programmi
59
Come Funziona la Compilazione
Un compilatore (che abbia anche la funzione di loader)
deve
– riconoscere la sintassi del linguaggio ad alto livello;
– associare uno spazio in memoria principare per
poter gestire le variabili dichiarate nel programma;
– tradurre i costrutti di alto livello in sequenze di
istruzioni in linguaggio macchina.
Walter Cazzola
Algoritmi, Dati e Programmi
60