SlideShare a Scribd company logo
1 of 21
Download to read offline
ECDL - Modulo 1
                           Fondamenti
                                  Angela Gay
                               25 gennaio 2010


Indice
1 Gli algoritmi                                                                                                2
  1.1 Definire il termine algoritmo . . . . . . . . . . . . . . . . . . . . .                                   2
  1.2 Descrivere in forma algoritmica la procedura risolutiva di semplici
       problemi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                  3
  1.3 Rappresentare algoritmi mediante diagrammi . . . . . . . . . . .                                          4

2 Rappresentazione dei dati                                                                                    7
  2.1 Effettuare correlazioni fra i sistemi di numerazione decimale e
      binario, convertire dei dati numeri dall’uno all’altro sistema. . . .                                     7
  2.2 Rappresentare i caratteri in forma binaria. Definire le nozioni di
      bit e di byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                  8
      2.2.1 ASCII standard ed esteso . . . . . . . . . . . . . . . . . .                                        8
      2.2.2 UNICODE . . . . . . . . . . . . . . . . . . . . . . . . . .                                         9
  2.3 Descrivere le caratteristiche di una immagine digitale. . . . . . .                                       9

3 Linguaggi                                                                                                    10
  3.1 Cenni di logica . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
      3.1.1 Congiunzione (AND) . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
      3.1.2 Disgiunzione (OR) . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
      3.1.3 Negazione (NOT) . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  3.2 Linguaggi naturali e linguaggi formali       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
      3.2.1 Fasi di creazione del software .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  3.3 Pseudolinguaggio . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16

Bibliografia                                                                                                    21




                                        1
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.
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.
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
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.
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
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
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
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
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.
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
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
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;

  }
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.
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.
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.
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
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>
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.
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 ’=’.
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.

   ——————————–

More Related Content

What's hot

03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 
Matlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMatlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMajong DevJfu
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmimattuzzi
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Umano vs Computer: un esempio pratico
Umano vs Computer: un esempio praticoUmano vs Computer: un esempio pratico
Umano vs Computer: un esempio praticoFrancesco Sblendorio
 
Lezione 2 alberi e differenze finite
Lezione 2   alberi e differenze finiteLezione 2   alberi e differenze finite
Lezione 2 alberi e differenze finiteGiovanni Della Lunga
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingdanielenicassio
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?mattuzzi
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012STELITANO
 

What's hot (19)

03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Matlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMatlab: Introduzione e comandi base
Matlab: Introduzione e comandi base
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmi
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Flow chart
Flow chartFlow chart
Flow chart
 
Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Umano vs Computer: un esempio pratico
Umano vs Computer: un esempio praticoUmano vs Computer: un esempio pratico
Umano vs Computer: un esempio pratico
 
Lezione 2 alberi e differenze finite
Lezione 2   alberi e differenze finiteLezione 2   alberi e differenze finite
Lezione 2 alberi e differenze finite
 
Metodi numerici
Metodi numericiMetodi numerici
Metodi numerici
 
R sim rank
R sim rank  R sim rank
R sim rank
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decoding
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012
 

Similar to Ecdl modulo 1 -Fondamenti

BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...Francesco Andreuzzi
 
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...Francesco Andreuzzi
 
Relazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: PercolazioneRelazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: PercolazioneRiccardo Melioli
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Relazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoRelazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoDavide Sito
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamentoMarco Liverani
 
Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabprofman
 
Modellazione tramite geometria frattale
Modellazione tramite geometria frattaleModellazione tramite geometria frattale
Modellazione tramite geometria frattaleMassimiliano Leone
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Simone Cumar
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningAndrea Ciccotta
 
Modulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictModulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictAndreina Concas
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...KevinMarzio
 
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding   elaboratoAlgoritmo probabilistico di tipo montecarlo per il list decoding   elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding elaboratodanielenicassio
 

Similar to Ecdl modulo 1 -Fondamenti (20)

BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
 
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
BisPy: un pacchetto Python per il calcolo della massima bisimulazione di graf...
 
Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Relazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: PercolazioneRelazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: Percolazione
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Relazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoRelazione_CPD2_DavideSito
Relazione_CPD2_DavideSito
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamento
 
Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlab
 
Reti Logic
Reti LogicReti Logic
Reti Logic
 
Invarianza di un politopo
Invarianza di un politopoInvarianza di un politopo
Invarianza di un politopo
 
Modellazione tramite geometria frattale
Modellazione tramite geometria frattaleModellazione tramite geometria frattale
Modellazione tramite geometria frattale
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
 
Modulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictModulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ict
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012
 
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...
Graph partitioning: implementazione dell'algoritmo spettrale e confronto con ...
 
1 Programmazione
1   Programmazione1   Programmazione
1 Programmazione
 
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding   elaboratoAlgoritmo probabilistico di tipo montecarlo per il list decoding   elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
 

Recently uploaded

Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxfedericodellacosta2
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Nicola Rabbi
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfPierLuigi Albini
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataGianluigi Cogo
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 

Recently uploaded (8)

Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptx
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdf
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open Data
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 

Ecdl modulo 1 -Fondamenti

  • 1. ECDL - Modulo 1 Fondamenti Angela Gay 25 gennaio 2010 Indice 1 Gli algoritmi 2 1.1 Definire il termine algoritmo . . . . . . . . . . . . . . . . . . . . . 2 1.2 Descrivere in forma algoritmica la procedura risolutiva di semplici problemi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Rappresentare algoritmi mediante diagrammi . . . . . . . . . . . 4 2 Rappresentazione dei dati 7 2.1 Effettuare correlazioni fra i sistemi di numerazione decimale e binario, convertire dei dati numeri dall’uno all’altro sistema. . . . 7 2.2 Rappresentare i caratteri in forma binaria. Definire le nozioni di bit e di byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 ASCII standard ed esteso . . . . . . . . . . . . . . . . . . 8 2.2.2 UNICODE . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Descrivere le caratteristiche di una immagine digitale. . . . . . . 9 3 Linguaggi 10 3.1 Cenni di logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1.1 Congiunzione (AND) . . . . . . . . . . . . . . . . . . . . . 11 3.1.2 Disgiunzione (OR) . . . . . . . . . . . . . . . . . . . . . . 11 3.1.3 Negazione (NOT) . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Linguaggi naturali e linguaggi formali . . . . . . . . . . . . . . . 12 3.2.1 Fasi di creazione del software . . . . . . . . . . . . . . . . 15 3.3 Pseudolinguaggio . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Bibliografia 21 1
  • 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. ——————————–