2. 1 GLI ALGORITMI 2
1 Gli algoritmi
Il termine algoritmo deriva dal nome del matematico persiano Abu Ja’far Mo-
hammed ibn Mâsâ al- Khowârizmî, vissuto nel IX secolo d.C., che si ritiene
essere uno dei primi autori ad aver fatto riferimento esplicitamente a questo
concetto, nel libro Al-giabr wa’l mu kabala (Libro sulla ricomposizione e sulla
riduzione), dal quale tra l’altro prende anche le origini la parola algebra.
Per spiegare cosa è un algoritmo, partiamo da un esempio.
Esempio 1 Supponiamo di voler istruire un ’esecutore’ (macchina o persona)
che sa fare moltiplicazioni e divisioni, affinché possa calcolare l’area di un trian-
golo del quale vengono fornite la misura della base b e dell’altezza h. Le istru-
zioni che dobbiamo dare all’esecutore, per renderlo capace di calcolare l’area del
triangolo, potrebbero essere le seguenti:
INIZIO
1. acquisisci b e h;
2. moltiplica b per h;
3. dividi il prodotto per 2;
4. comunica il risultato ottenuto.
FINE
Questo sequenza di istruzioni costituisce un algoritmo.
1.1 Definire il termine algoritmo
Siamo ora in grado di dare una definizione intuitiva (cioè, non rigorosa) di:
Algoritmo Per algoritmo si intende una successione finita di passi con-
tenenti le istruzioni che specificano le operazioni da compiere per risolvere una
classe di problemi.
L’algoritmo dunque deve godere delle seguenti proprietà:
1. finitezza, cioè costituito da un numero finito di passi, o istruzioni;
2. univocità, non deve essere ambiguo;
3. realizzabilità le istruzioni devono essere eseguibili materialmente.
Nella maggior parte dei testi scolastici, viene data una quarta proprietà degli
algoritmi:
4. un algoritmo, per essere tale, deve terminare in un numero finito di passi.
3. 1 GLI ALGORITMI 3
Da notare la differenza tra la proprietà 1 (il numero di istruzioni deve essere
finito) e la proprietà 4 (l’algoritmo deve terminare). Come vedremo presto, un
algoritmo può prevedere le ripetizione (iterazione) di un gruppo di istruzioni
più volte. Ecco perché un algoritmo, pur costituito da un numero finito di istru-
zioni, potrebbe non terminare: un certo gruppo di istruzioni potrebbe essere
eseguito indefinitamente, portando alla non terminazione dell’algoritmo stesso.
La quarta non dovrebbe essere considerata una proprietà caratteristica degli
algoritmi. Le motivazioni di ciò esulano dagli scopi e di questo testo, e possono
essere affrontate solo in corsi di matematica superiore. Qui possiamo solo af-
fermare che tale motivazione è analoga a quella che induce, in matematica, ad
ampliare gli insiemi numerici (da N a Z, a Q, a R... a C) affinché essi risultino
chiusi rispetto a determinate operazioni (Cf. [3, pag. 5] per maggiori dettagli).
1.2 Descrivere in forma algoritmica la procedura risoluti-
va di semplici problemi.
Il nostro primo algoritmo è molto semplice. È costituito da alcune istruzioni
che vanno eseguite in sequenza. Non sempre sarà così. A volte sarà necessario
eseguire alcune istruzioni, oppure altre, a seconda del verificarsi o meno di una
determinata condizione. Parleremo in questo caso di struttura di selezione
(si seleziona quale istruzione, o gruppo di istruzioni eseguire, in base al verifi-
carsi della condizione).
Proviamo a descrivere i passi necessari per stabilire se un numero a è divisi-
bile per un altro numero b. Il nostro algoritmo potrebbe essere il seguente:
INIZIO
1. acquisisci a e b;
2. esegui la divisione a : b e indica con r il resto di tale divisione;
3. se r = 0
• allora comunica che a è divisibile per b
• altrimenti comunica che a non è divisibile per b
FINE
Questo è il nostro secondo algoritmo.
4. 1 GLI ALGORITMI 4
1.3 Rappresentare algoritmi mediante diagrammi
Per rappresentare gli algoritmi, a volte si usano dei diagrammi, detti diagrammi
a blocchi (o anche diagrammi di flusso o flow chart). Ne vediamo ora qualche
esempio, partendo proprio dall’algoritmo per il calcolo dell’area del triangolo.
Algoritmo per il calcolo dell’area di un triangolo
Significato dei principali blocchi
Inizio e
fine
input e
output
operazioni
di calcolo
test
5. 1 GLI ALGORITMI 5
Determinare se un numero a è divisibile per un numero b
Algoritmo di Euclide per il calcolo del MCD
Le due strutture di controllo viste fino ad ora (sequenza e selezione) non bastano
ancora per permetterci di scrivere algoritmi non banali. Abbiamo bisogno anche
di poter ripetere più volte uno stesso gruppo di istruzioni. Parleremo allora di
una terza struttura di controllo, l’iterazione. Un esempio di algoritmo che
utilizza l’iterazione è l’algoritmo di Euclide per il calcolo del MCD fra due
numeri a e b naturali positivi.
6. 1 GLI ALGORITMI 6
INIZIO
acquisisci a e b
r <- resto(a:b)
SI comunica:
r=0? b è il risultato
NO
a <- b
FINE
b <- r
r<-resto(a:b)
Lo studente è inviatato a provare l’algoritmo di Euclide, assegnando ad a e b
valori naturali positivi, e compilando tabelle sull’esempio di quelle riporate di
seguito (cerchiato in rosso il risultato prodotto dall’algoritmo).
seconda prova: a = 5; b = 20
prima prova: a = 15; b = 3
a b r
a b r
valori iniziali 5 20 5
valori iniziali 15 3
○ 0
prima iterazione 20 5
○ 0
terza prova: a = 12; b = 20 prova tu: a = 25; b = 7
a b r a b r
valori iniziali 12 20 12 valori iniziali 25 7
prima iterazione 20 12 8 prima iterazione
seconda iterazione 12 8 4 seconda iterazione
terza iterazione 8 4
○ 0 terza iterazione
7. 2 RAPPRESENTAZIONE DEI DATI 7
Prova anche con le seguenti coppie di valori: (a = 12, b = 105); (a = 42, b = 45).
2 Rappresentazione dei dati
Vedremo ora come le informazioni (programmi, dati) sono rappresentati all’in-
terno di un elaboratore elettronico.
2.1 Effettuare correlazioni fra i sistemi di numerazione de-
cimale e binario, convertire dei dati numeri dall’uno
all’altro sistema.
I computer utilizzano un alfabeto composto da due soli simboli: le cifre 0 e 1.
Tutte le informazioni memorizzate all’interno di un elaboratore elettronico sono
codificate esclusivamente mediante questi due simboli. Da qui deriva il termine
di sistema binario. Allo stesso modo il sistema decimale che tutti conosciamo
si chiama così poiché vengono utilizzate dieci simboli o cifre (da 0 a 9). Dal-
la matematica sappiamo che il sistema di numerazione decimale è posizionale.
Questo significa che le cifre di un numero assumono un valore diverso a seconda
della posizione in cui si trovano. Ogni numero in base 10 può essere scritto in
forma polinomiale:
Esempio 2 763 = 3 · 100 + 6 · 101 + 7 · 102 187 = 7 · 100 + 8 · 101 + 1 · 102
Anche il sistema di numerazione binario (in base 2) è posizionale:
Esempio 3 (10110)2 = 0 · 20 + 1 · 21 + 1 · 22 + 0 · 23 + 1 · 24 = 22
La scrittura polinomiale di un numero in binario ci dà l’algoritmo per la con-
versione di un numero da base 2 a base 10.
Esempio 4 (11011)2 = 1 · 20 + 1 · 21 + 0 · 22 + 1 · 23 + 1 · 24 = (27)10
Per la conversione inversa (da base 10 a base 2) si utilizza, invece, il metodo
delle divisioni successive per la base (nel nostro caso, quindi per 2) Si divide il
numero decimale per 2, e si fa lo stesso per il quoziente ottenuto, fino a quando
il quoziente stesso vale zero. I resti ottenuti dalla sequenza delle divisioni, presi
dall’ultimo al primo, costituiscono la rappresentazione del numero in base 2.
27 2
1 13 2
1 6 2
0 3 2
1 1 2
1 0
8. 2 RAPPRESENTAZIONE DEI DATI 8
2.2 Rappresentare i caratteri in forma binaria. Definire
le nozioni di bit e di byte.
In informatica la singola cifra binaria, di valore 0 o 1, viene chiamata bit (bina-
ry digit). Il bit rappresenta l’unità di misura fondamentale in un computer ma
raramente viene utilizzato da solo. In genere si utilizza una serie di otto cifre
binarie (otto bit) che viene chiamata byte. Con un byte è possibile rappre-
sentare un massimo di 256(28). Il byte rappresenta generalmente un carattere
(lettera, numero o simbolo che sia). Ma come è possibile rappresentare un testo
usando solo degli 0 e degli 1? Lo strumento per risolvere il problema c’è, e si
chiama codifica binaria dei caratteri. Vediamo meglio di cosa si tratta. Quando
scriviamo un testo, non facciamo altro che mettere uno dietro l’altro una serie di
simboli, normalmente chiamati caratteri. In ogni lingua vi sono diversi caratte-
ri: le lettere dell’alfabeto, i segni di interpunzione e infine le cifre. Ovviamente
lo 0 e l’1 da soli non basterebbero a rappresentare tutti i simboli necessari per
scrivere. Ma associando ad ogni carattere una sequenza di cifre binarie, ecco
che le possibilità di rappresentare caratteri aumenta. La sequenza di bit accen-
nata è appunto il Byte prima descritto. Potremmo allora, per esempio, fare una
tabella di associazioni di questo tipo:
00000001 corrisponde ad a
00000010 corrisponde a b
00000011 corrisponde a c
00000100 corrisponde a d
..... ..... ....
e così via. Bene, per lavorare su dei testi tutti i computer ricorrono a una
tabella di associazioni di questo tipo, che viene chiamata tavola dei caratteri.
La tavola più usata è basata proprio su otto cifre binarie, otto bit. Le possibili
combinazioni di ’0’ e ’1’ nelle otto cellette a nostra disposizione come già detto
sono 256. Con un solo Byte potremo allora rappresentare fino a 256 caratteri
diversi.
2.2.1 ASCII standard ed esteso
Ovviamente, per evitare una vera e propria babele, è necessario accordarci ed
utilizzare la stessa tabella dei caratteri, i, per evitare che una testo scritto sul
mio computer di casa si trasformi in una sequenza di segni indecifrabili sul com-
puter a scuola. Tale problema fu risolto da Robert W. Bemer, nel 1965, che ideò
e propose uno schema di codifica internazionale dei caratteri in informatica, ov-
vero il processo o il criterio in base al quale lettere, cifre, simboli grafici e codici
di controllo vengono tradotti in combinazioni numeriche binarie leggibili da un
computer (il concetto della tavola dei caratteri prima espresso). Tale codifica
fu chiamata ASCII (American Standard Code for Information Interchange) ov-
vero Codice Standard Americano per lo Scambio di Informazioni e comprende
un set di 256 combinazioni, divise in due sottogruppi di 128 ciascuno, detti ri-
spettivamente standard ed esteso. Il set ASCII standard usa 7 bit per codice e
9. 2 RAPPRESENTAZIONE DEI DATI 9
può rappresentare 128 caratteri, numerati da 0 a 127; l’ASCII esteso usa anche
l’ottavo bit e può rappresentare ulteriori 128 caratteri, numerati da 128 a 255.
Nel set ASCII standard, i primi 32 codici sono assegnati a caratteri di controllo
della comunicazione o della stampante e vengono usati nella trasmissione dati
tra computer o tra computer e stampante. I restanti 96 codici sono assegnati
ai segni d’interpunzione, alle cifre da 0 a 9 e alle lettere dell’alfabeto latino,
maiuscole e minuscole. I codici del set ASCII esteso, dal 128 al 255, consentono
di utilizzare l’ottavo bit di ogni carattere per identificare ulteriori 128 caratteri
speciali, come le lettere accentate o i caratteri grafici e anche per permettere
alle diverse entità linguistiche di inserire le proprie particolarità. Mentre il set
ASCII standard (i primi 7 bit) è universale sia per il software sia per l’hard-
ware dei computer, i caratteri dell’ASCII esteso non costituiscono uno standard
universalmente riconosciuto e quindi possono essere interpretati correttamente
solo da programmi, computer e stampanti progettati specificatamente per quel
set. Le attribuzioni dei primi 128 valori sono stabilite da un codice valido per
tutti i computer, mentre i successivi 128 sono lasciati alla definizione del singolo
sistema operativo.
2.2.2 UNICODE
La codifca ASCII (anche quella, peraltro non standard, ad 8 bit) attualmente
non è sufficiente a rappresentare tutti i caratteri di tutte le lingue del mondo.
L’ottavo bit, introdotto proprio per rappresentare un maggior numero di carat-
teri, non costituisce, come già detto, uno standard, e lingue differenti associano
lo stesso codice a caratteri differenti.
Per risolvere questi problemi, è stata ideata una nuova codifica: la codifica
unicode, che rappresenta ogni carattere come un numero di 2 byte (quindi 16
bit). In questo modo è possibile rappresentere fino a 216 = 65536 caratteri
differenti. Ogni gruppo di 2 byte rappresenta un unico carattere usato in almeno
uno dei linguaggi del mondo. Caratteri che sono usati in molteplici linguaggi
hanno lo stesso codice numerico. C’è esattamente 1 numero per carattere ed
esattamente un carattere per numero. I dati unicode non sono quindi mai
ambigui.
2.3 Descrivere le caratteristiche di una immagine digitale.
Un’immagine, come ogni altra informazione, è rappresentata all’interno di un
calcolatore com una sequenza di bit. Per fare questo l’immagine viene decom-
posta in punti (pixel). Il pixel (picture element) è la più piccola unità che un
computer può visualizzare su un montor; un insieme di pixel organizzati in una
griglia sullo schermo forma tutto ciò che è visualizzato sullo schermo: caratteri,
grafici, immagini.
Digitalizzare un’immagine significa quidi trasformala in un reticolo di pixel. Cia-
scun pixel porta con sé una quantità prefissata di informazioni, che dipende dal
numero di bit associati ad ogni pixel. Se per esempio ad ogni pixel è associato
un solo bit, ogni pixel può assumere due soli colori differenti (bianco/nero); se
10. 3 LINGUAGGI 10
un pixel ha associati 4 bit sulla scala dei grigi, si possono visualizzare 16 (24 )
tipi di grigio; con 8 bit si possono visualizzare 256 (28 ) colori differenti. I file
che contengono immagini tendono a diventare molto grandi; esistono pertanto
vari formati di compressione per limitarne le dimensioni.
I principali formati dei file di immagine sono:
• BMP (bitmap): formato che definisce la posizione e il colore di ciascun
pixel.
• TIFF (Tag Image File Format) è un formato comune nello scambio di
immagini bitmap tra programmi diversi; per esempio i file acquisiti con lo
scanner sono spesso in questo formato.
• GIF (Graphic Interchange Format) è il formato compresso, molto usa-
to per le immagini grafiche in internet. Esistono anche le GIF animate,
costituite da brevi sequenze di immagini GIF.
• JPEG (Joint Photographic Experts Group), formato basato su algoritmi
di compressione che devono conciliare l’esigenza di un’alta qualità dell’im-
magine con la minima dimensione del file, molto usato nel web soprattutto
per le foto.
• PNG (Portable Network Graphics) altro formato di compressione di im-
magini, destinato a sostituire il GIF in quanto presenta miglioramenti ed
un grado di compressione maggiore.
• Infine esistono formati di grafica vettoriale: in questi casi il file non con-
tiene l’immagine, ma le istruzioni per ricostruirla. Un notevole vantaggio
sta nel fatto che è possibile modificare le dimensioni dell’immagine senza
perderne le qualità, come invece accade con gli altri formati. Tra i formati
di grafica vettoriale menzioniamo:
– SVG è un formato aperto, le cui specifiche sono cioè pubbliche.
– WMF (Windows Meta File); formato di grafica vettoriale proprie-
tario.
3 Linguaggi
3.1 Cenni di logica
In Informatica capita spesso di dover ricorrere ai principi della logica degli enun-
ciati, detta anche algebra booleana dal nome del matematico inglese George
Boole. Gli oggetti della logica sono gli enunciati.
Definizione 1 Si chiama enunciato una proposizione che può essere soltanto
vera o falsa.
11. 3 LINGUAGGI 11
Alcuni enunciati possono essere composti, ossia formati a sottoenunciati colle-
gati tra loro da connettivi logici. Il valore di verità di un enunciato compo-
sto è completamente definito dai valori di verità dei suoi sottoenunciati e dal
connettivo logico che li unisce. I connettivi fondamentali sono AND, OR, NOT.
3.1.1 Congiunzione (AND)
Due enunciati p e q possono essere collegati dal connettivo “e” (∧, AND), in
modo da formare un enunciato composto, che risulta vero solo quando sono veri
entrambi i sottoenunciati p e q, come risulta dalla seguente tavola di verità:
p q p AND q
F F F
F V F
V F F
V V V
3.1.2 Disgiunzione (OR)
Due enunciati p e q possono essere collegati dal connettivo “o” (∨, OR), in modo
da formare un enunciato composto, che risulta vero quando è vero almeno uno
dei due sottoenunciati p e q, come risulta dalla seguente tavola di verità:
p q p OR q
F F F
F V V
V F V
V V V
3.1.3 Negazione (NOT)
Dato un enunciato p è possibile formare un altro enunciato che si indica con
NOT p, detto negazione di p, che risulta vero se p e falso, e falso se p è vero:
p NOT p
F V
V F
12. 3 LINGUAGGI 12
3.2 Linguaggi naturali e linguaggi formali
La comunicazione (tra uomo e uomo, tra uomo e macchina) avviene attraver-
so formalismi che prendono il nome di linguaggi. Possiamo fare una prima
classificazione dei linguaggi analizzando la figura seguente:
Linguaggi
Artificiali
Naturali
(formali)
ad alto a basso
livello livello
I linguaggi naturali (italiano, inglese, francese, cinese...) sono quelli che gli
uomini utilizzano per comunicare tra di loro. Sono dotati di notevole ricchez-
za espressiva, possono però dare adito ad ambiguità, imprecisioni o difficoltà
di interpretazioni. Come esempio portiamo una riedizione della classica frase:
La professoressa Gay dice Giovanni non capisce niente. Tale frase ha due si-
gnificati molto diversi, a seconda dell’intonazione di voce, delle pause o della
punteggiatura che si usa. Infatti La professoressa Gay - dice Giovanni - non
capisce niente è molto differente, in quanto a significato, a La professoressa Gay
dice: “Giovanni non capisce niente”.
I linguaggi artificiali (o formali, o simbolici) invece sono stati creati dal-
l’uomo secondo regole ben definite prive di eccezioni ed ambiguità e sono dedicati
a scopi precisi e circoscritti.
Per la comunicazione tra uomo e macchina si usano linguaggi formali detti lin-
guaggi di programmazione. Tra questi possiamo distinguere i linguaggi ad
alto livello, o linguaggi procedurali, (Pascal, C++, Java, VisualBasic...) e i lin-
guaggi a basso livello (linguaggio macchina e linguaggio assembler).
Il linguaggio macchina è l’unico ad essere compreso da un computer. In esso
operazioni e dati sono espressi in binario, sono dunque sequenza di bit. Le ope-
razioni sono molto semplici (somma, moltiplicazione, confronto di operandi...).
Risulta evidente la difficoltà a programmare utilizzando un tale strumento.
Il linguaggio assembler costituisce un passo avanti (verso l’uomo). Le stesse
semplici istruzioni del linguaggio macchina sono indicate da codici mnemmoni-
ci, anziché da sequenze di bit (ad esempio addl per somma, mull o imull per
moltiplica, cmpl per compara...); anche gli operandi sono espressi in modo sim-
bolico. Il linguaggio assembler, pur nella sua vicinanza al linguaggio macchina,
non è direttamente comprensibile dall’elaboratore, e deve pertanto essere tra-
dotto in linguaggio macchina da uno specifico programma detto assemblatore.
I linguaggi ad alto livello invece sono più vicini al linguaggio naturale, dal quale
13. 3 LINGUAGGI 13
(in genere dall’inglese) prendono in ’prestito’ alcune parole. Le istruzioni so-
no più complesse, ed ognuna di esse può richiedere l’esecuzione di un numero
abbastanza elevato di istruzioni macchina. I linguaggi ad alto livello sono più
semplici da utilizzare per noi, però non sono direttamente comprensibili dall’e-
laboratore. È necessaria pertanto una fase di traduzione del programma, svolta
da particolari sw (compilatori o interpreti).
Per capire meglio la differenza fra linguaggi ad alto livello e a basso livello,
riportiamo di seguito il listato di un semplice programma (quello del calcolo
dell’area di un triangolo) nel linguaggio c++, in linguaggio assembler, e (una
parte del)lo stesso programma in linguaggio macchina.
listato del programma in C++
#include <iostream>
using namespace std;
int main()
{
int b,h;
float area;
cout << "Inserisci base e altezza " ;
cin >> b >> h;
area=b*h/2;
cout <<"l’area è " << area << endl;
}
14. 3 LINGUAGGI 14
listato del programma in Assembler
main:
.LFB957:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq $16, %rsp
movl $.LC0, %esi
movl $_ZSt4cout, %edi
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
leaq -4(%rbp), %rax
movq %rax, %rsi
movl $_ZSt3cin, %edi
call _ZNSirsERi
movl -4(%rbp), %eax
imull -8(%rbp), %eax
movl %eax, %edx
shrl $31, %edx
leal (%rdx,%rax), %eax
sarl %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -12(%rbp)
movl $.LC1, %esi
movl $_ZSt4cout, %edi
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
movss -12(%rbp), %xmm0
movq %rax, %rdi
call _ZNSolsEf
movl $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, %esi
movq %rax, %rdi
call _ZNSolsEPFRSoS_E
movl $0, %eax
leave
ret
.cfi_endproc
Risulta evidente come sia maggiormante comprensibile il programma scritto
in linguaggio ad alto livello (nel nostro caso C++) rispetto al programma in
linguaggio Assembler.
15. 3 LINGUAGGI 15
Per completezza riportiamo anche una parte dello stesso programma in
linguaggio macchina:
3.2.1 Fasi di creazione del software
Le fasi necessarie per la creazione di un programma sono le seguenti:
• Analisi del problema
• progettazione dell’algoritmo
• traduzione dell’algoritmo in un linguaggio procedurale: si ottiene il pro-
gramma (o codice) sorgente
• traduzione del sorgente attraverso il compilatore: si ottiene il programma
oggetto
• collegamento (link) del programma oggetto con le librerie: si ottiene il
programma eseguibile.
16. 3 LINGUAGGI 16
Il compilatore è in grado di rilevare gli errori formali (lessicali e sintattici) del
programma, ma non gli errori logici (bug) dovuti ad un algoritmo errato, che
possono essere scoperti solo con l’esecuzione del programma; così dobbiamo
aggiungere ai passaggi elencati il seguente:
• test del programma
3.3 Pseudolinguaggio
Per rappresentare gli algoritmi, oltre ai diagrammi a blocchi che abbiamo già
visto, (e che, oltre all’innegabile vantaggio di rappresentare in forma grafica
l’algoritmo, hanno anche grosse pecche) esistono altri formalismi, detti pseudo-
linguaggi. Sono linguaggi che, grazie soprattutto ad una sintassi non partico-
larmente rigida, costituiscono una via di mezzo tra il linguaggio naturale e i
linguaggi di programmazione. Gli pseudo-linguaggi hanno delle parole chiave;
noi possiamo assumere di utilizzare le seguenti:
• INIZIO(<nome algoritmo>), FINE(<nome algoritmo>) per delimitare l’al-
goritmo
• ACQUISISCI e COMUNICA per le operazioni di ingresso ed uscita
• <-, per effettuare calcoli e assegnare valori alle variabili
• SE... ALLORA... ALTRIMENTI... FINESE per la struttura di selezione
• MENTRE... FINEMENTRE per la struttura iterativa (ciclo)
• RIPETI .... FINCHÈ per un’altra forma della struttura iterativa.
17. 3 LINGUAGGI 17
Di seguito vengono affiancate le strutture di controllo dello pseudo-linguaggio
ora introdotto, con i corrispettivi diagrammi a blocchi, a cui lo studente è già
abituato:
Sequenza di istruzioni
<istruzione 1>
<istruzione 1>
<istruzione 2> <istruzione 2>
:
<istruzione n> :
<istruzione n>
Struttura alternativa
F V
SE <cond> <cond>
ALLORA
<istruzione v1>
: <istruzione f1> <istruzione v1>
<istruzione vn>
ALTRIMENTI : :
<istruzione f1>
: <istruzione fn> <istruzione vn>
<istruzione fm>
FINESE
18. 3 LINGUAGGI 18
La struttura alternativa può anche avere la seguente forma:
Struttura alternativa
F
<cond>
SE <cond> V
ALLORA
<istruzione v1> <istruzione v1>
: :
<istruzione vn> :
FINESE
<istruzione vn>
Struttura iterativa MENTRE
F
<cond>
MENTRE <cond>
<istruzione 1> V
:
<istruzione n> <istruzione 1>
FINEMENTRE
:
<istruzione n>
19. 3 LINGUAGGI 19
Struttura iterativa RIPETI
<istruzione 1>
RIPETI :
<istruzione 1>
: <istruzione n>
<istruzione n>
FINCHÈ <cond>
V
<cond>
F
Lo studente è invitato a descrivere le differenze tra le due strutture iterative
(MENTRE e RIPETI).
Possiamo ora cimentarci nella traduzione dei tre algoritmi precedentemente visti
nel nostro pseudo-linguaggio. L’algoritmo del calcolo dell’area di un triangolo
diventa:
INIZIO (Area Triangolo)
ACQUISISCI b, h
a <- (b * h) /2
COMUNICA a
FINE (Area Triangolo)
L’algoritmo che stabilisce se un numero a è divisibile per un numero b sarà:
INIZIO(Divisibile)
ACQUISISCI a,b
r <- resto(a,b);
SE r = 0
ALLORA
COMUNICA "a è divisibile per b"
ALTRIMENTI
COMUNICA "a non è divisibile per b"
FINESE
FINE(Divisibile)
Da notare il rientro (indentazione) che favorisce la comprensione della strut-
tura logica dell’algoritmo.
20. 3 LINGUAGGI 20
Vediamo infine l’algoritmo di Euclide per il calcolo del Massimo Comun
Divisore fra due numeri:
INIZIO(Massimo Comun Divisore)
ACQUISISCI a,b
r <- resto(a,b);
MENTRE r <> 0
a <- b
b <- r
r <- resto (a,b)
FINEMENTRE
COMUNICA "il risultato è " b
FINE(Massimo Comun Divisore)
Il simbolo ’<>’ è usato in informatica al posto di ’=’.
21. RIFERIMENTI BIBLIOGRAFICI 21
Riferimenti bibliografici
[1] Mariella Grisà, Fabiana Guerra. ECDL Open Source. McGraw-Hill, 2008.
[2] A. Lorenzi, M. Govoni. Manuale Atlas per la patente europea del computer.
Atlas, 2009.
[3] Aiello, Albano, Attardi, Montanari. Teoria della computabilità, logica, teoria
dei linguaggi formali. ETS 1979.
[4] Pino Tropeano. ECDL - Appunti Modulo 1 Release 2009.
——————————–