Algoritmi e Linguaggi - Ingegneria elettrica ed elettronica

Università degli Studi di Cagliari
Dipartimento di Ingegneria Elettrica ed Elettronica
ALGORITMI E LINGUAGGI
Sommario
Ø
Ø
Ø
Definizione informale di algoritmo
Definizione informale di linguaggio
Definizione di interprete e traduttore
Giuliano Armano
2
Algoritmo: Etimologia
Ø
Algoritmo
n
Ø
Parola entrata in uso negli anni ‘50 per sostituire la parola
algorismo, che designava il processo di calcolare con i
numeri arabi
Etimologia
n
n
Creduta nel medioevo (ma tuttora sospettata da molti
studenti): dal greco algiros (doloroso) + arithmos (numero)
Quella vera: dal nome dell’autore di un testo di algebra (825
d.C.) Abu Ja’far Mohammed ibn Mûsâ al-Khowârizmî
Giuliano Armano
3
Algoritmi: Concetti Informali
Ø
Ø
Ø
Un algoritmo è la descrizione di una procedura
computazionale che trasforma un insieme di dati
di ingresso in un insieme di dati di uscita, al
fine di risolvere un problema.
Un algoritmo viene descritto da una sequenza
finita di passi che hanno l’effetto di trasformare
l’ingresso nell’uscita desiderata.
Un algoritmo deve terminare su ogni istanza del
problema (la sequenza di passi computazionali
per giungere alla soluzione dev'essere finita)
Giuliano Armano
4
Algoritmo: Concetti Informali
Ø
Esempi di “algoritmo” nella vita quotidiana:
n
n
n
Ø
Istruzioni di montaggio di un mobile
Calcolo del massimo comune divisore fra più numeri naturali
Prelevamento di denaro a un terminale Bancomat
L’algoritmo deve essere comprensibile al suo
esecutore
n
Se un libretto di istruzioni fosse disponibile solo in inglese
non sarebbe compreso da chi conosce solo l’italiano.
Giuliano Armano
5
Algoritmi e programmi
Ø
Nel campo dell’informatica, possiamo definire i
calcolatori elettronici come esecutori di
algoritmi.
Ø
Gli algoritmi vengono descritti tramite
programmi, cioè sequenze di istruzioni in un
opportuno linguaggio comprensibile al
calcolatore.
Ø
Compito dell’esperto informatico (tra gli altri):
n
Produrre algoritmi e codificarli in programmi
Giuliano Armano
6
Correttezza ed Efficienza degli
Algoritmi
Ø
Un’istanza di un problema è un particolare valore
ammissibile assunto dai dati in ingresso
Ø
Un algoritmo è corretto se perviene alla soluzione
Ø
(=produce l’uscita desiderata) su ogni istanza
del problema
Un algoritmo è efficiente se perviene alla
soluzione nel modo più veloce e/o usando la
minor quantità di risorse
Giuliano Armano
7
Esempio: Utilizzo di un Lettore
Portatile di CD Musicali
Ø
Si vuole ascoltare il brano n. 13
n
n
n
n
n
n
Se siamo a casa, colleghiamo l’alimentatore ad una presa elettrica
Se non è disponibile la presa, verifica batterie. Se manca qualche
batteria o è scarica, inserimento o sostituzione batterie
Accensione lettore CD
Se il display indica ‘No disk’ inserire il CD musicale desiderato
Premere ripetutamente forward finché nel display non compare 13
Indossare le cuffie e premere play
ESERCIZIO: analizzare criticamente l’algoritmo sopra e mettere in
evidenza le eventuali inconsistenze
Giuliano Armano
8
Esempio: Gestione di una Biblioteca
Ø
Una piccola biblioteca che contenga scaffali in
cui sono disposti dei libri
n
Ø
Ad ogni libro è associata una scheda
n
n
n
n
n
Ø
Posizione dei libri invariabile negli scaffali
Cognome e nome autori (nell’ordine in cui compaiono nel
libro)
Titolo
Data di pubblicazione
Numero dello scaffale
Numero d’ordine della posizione nello scaffale
Le schede sono conservate in ordine alfabetico
rispetto al cognome del primo autore
Giuliano Armano
9
Esempio: Gestione di una Biblioteca
Ø
Semplice algoritmo per accedere ad un libro
n
n
n
n
Cercare la scheda nello schedario
Segnare su un foglietto scaffale e posizione del libro
Cercare lo scaffale indicato
Cercare il libro sullo scaffale. Se è presente, si compila il
modulo di prestito con data e nome del richiedente
Giuliano Armano
10
Esempio: Gestione di una Biblioteca
Ø
Tecnica di ricerca nello schedario
n
n
n
Si esamina la prima scheda
Se il nome e il titolo coincidono con quelli cercati, la ricerca
termina con successo, altrimenti si passa alla scheda
successiva
Si continua con le altre le schede finché non si è trovato il
libro cercato o tutte le schede sono state esaminate
Con questa tecnica di ricerca si deve esaminare mediamente la metà
delle schede (nel caso migliore una, la prima, e nel caso peggiore
tutte). Il tempo di ricerca è quindi lineare rispetto al numero delle
schede.
Giuliano Armano
11
Esempio: Gestione di una Biblioteca
Ø
Un algoritmo di ricerca più efficiente (ricordando
che le schede sono in ordine alfabetico)
n
n
Si esamina la scheda centrale dello schedario
Se il nome e il titolo coincidono con quelli cercati, la ricerca
termina con successo, altrimenti:
n
n
Se la scheda cercata segue in ordine alfabetico quella presa in
esame e ci sono ancora schede da esaminare, la ricerca
continua nella seconda metà dello schedario;
Altrimenti, se ci sono ancora schede da esaminare, la ricerca
continua nella prima metà dello schedario
Con questa tecnica di ricerca si deve esaminare un numero di schede
proporzionale al logaritmo in base 2 del numero delle schede.
Giuliano Armano
12
Linguaggi per la Programmazione di
Algoritmi
Ø
Ø
Ø
Nell’idea informale di algoritmo esiste il concetto
implicito di esecuzione di “istruzioni”
Queste istruzioni devono essere espresse in
modo preciso e non ambiguo
L'assenza di ambiguità è necessaria poichè un
elaboratore non è in grado, tipicamente, di
rimuovere le ambiguità come invece riescono a
fare gli umani
Giuliano Armano
13
Linguaggi di Programmazione
Ø
Ø
Agli albori dell’informatica il linguaggio di
programmazione coincideva con il linguaggio
della macchina, cioè con l’insieme di comandi
che la macchina era in grado di eseguire
A partire dalla seconda metà degli anni ‘50 il
linguaggio di programmazione si “alzò di livello”
sino ad arrivare ai linguaggi –cosiddetti– di alto
livello:
n
n
Più adatti a codificare algoritmi
Più vicini al linguaggio naturale
Giuliano Armano
14
Macchine Virtuali e Linguaggi
Ø
Quando si esegue un programma scritto in un
linguaggio di alto livello tutto va come se ci
fosse una macchina virtuale che è in grado di
eseguire quel tipo di istruzioni
Giuliano Armano
15
Macchine Virtuali e Linguaggi
Ø
Per poter eseguire istruzioni di linguaggi di alto
livello sulla macchina fisica sottostante esistono
due possibilità:
n
n
Interpretazione, cioè si utilizza un programma chiamato
interprete in grado di eseguire direttamente le istruzioni di
alto livello
Traduzione, cioè la sequenza di istruzioni di alto livello
viene prima tradotta, utilizzando un programma chiamato
compilatore, in una corrispondente sequenza di istruzioni
della macchina fisica
Giuliano Armano
16
Linguaggi di Alto Livello
Ø
Primo linguaggio di programmazione di alto
livello: FORTRAN (FORmula TRANslator), per
calcolo numerico
Ø
Di poco posteriore il COBOL (COmmon Business
Oriented Language), orientato alle applicazioni
gestionali e all’elaborazione dati
NB questi linguaggi, anche se datati, sono ancora molto diffusi
(calcolo scientifico e “legacy systems”)
Giuliano Armano
17
Linguaggi di Alto Livello
Ø
Linguaggi imperativi sequenziali:
n
Ø
Linguaggi orientati agli oggetti:
n
Ø
Prolog
Linguaggi funzionali:
n
Ø
SmallTalk, C++, Java, Objective-C, Python, CLOS
Linguaggi logici:
n
Ø
ALGOL 60 (capostipite), Fortran, Basic, Pascal, PL/1, C, Ada
Lisp (nativo)
Linguaggi per gestione basi di dati:
n
SQL
Giuliano Armano
18
Ambienti di programmazione
Ø
Strumenti per facilitare lo sviluppo di
programmi:
n
n
n
n
n
Editor
Compilatore
Interprete
Linker
Debugger
Giuliano Armano
19
Ambienti di programmazione
Ø
Editor
n
Ø
Compilatore
n
Ø
serve per scrivere il programma sorgente, cioè il testo che
contiene le istruzioni nel linguaggio prescelto
traduce un programma sorgente in programma oggetto,
cioè in un programma con un formato molto vicino a quello
del linguaggio macchina. Se vi sono errori nella stesura
viene avvisato il programmatore e il programma oggetto
non viene generato.
Interprete
n
per alcuni linguaggi (ad esempio Basic) non si usa il
compilatore, ma un interprete che esegue direttamente il
codice sorgente
Giuliano Armano
20
Ambienti di Programmazione
Ø
Linker
n
Ø
collega insieme vari programmi oggetto che fanno parte di
un unico programma suddiviso in moduli coordinati fra loro,
generando il programma eseguibile.
Debugger
n
consente di eseguire il programma passo passo verificando
l’esecuzione delle istruzioni del programma sorgente e
individuando eventuali errori
Giuliano Armano
21
Ambienti di Programmazione
Ø
Gli ambienti di programmazione forniscono in
genere anche un insieme di funzioni di libreria,
cioè di algoritmi comuni a molti programmi (es.
ordinamento di un vettore di numeri)
Giuliano Armano
22