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