530 likes | 795 Views
ANNUNCI. MODULO C E LABORATORI INIZIATI MODULO B: SOLO PIU’ LEZIONI IL LUNEDI’ 26 MARZO: 10-12, 14-16, MA NON 18-20 (B2 e B3 UNIFICATI). RICEVIMENTO (MASSIMO POESIO). Ricevimento: Lunedi’ 16-18, via Sighele 7. INFORMATICA UMANISTICA B.
E N D
ANNUNCI • MODULO C E LABORATORI INIZIATI • MODULO B: SOLO PIU’ LEZIONI IL LUNEDI’ • 26 MARZO: 10-12, 14-16, MA NON 18-20 (B2 e B3 UNIFICATI)
RICEVIMENTO (MASSIMO POESIO) • Ricevimento: Lunedi’ 16-18, via Sighele 7
INFORMATICA UMANISTICA B 7: ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE
PROGRAMMI • Un computer e’ una macchina per eseguire PROGRAMMI • Un programma e’ un ALGORITMO per risolvere un certo PROBLEMA scritto secondo le regole di un LINGUAGGIO DI PROGRAMMAZIONE
ALGORITMO • Un PROGRAMMA e’ un ALGORITMO posto in forma comprensibile al computer • Definizione informale di ALGORITMO: una sequenza FINITA di passi DISCRETI e NON AMBIGUI che porta alla soluzione di un problema • Questa definizione si puo’ applicare al di fuori dell’Informatica: nella matematica (da cui ha origine) ma anche nella cucina
UN QUASI-ALGORITMO: LA RICETTA PER LA BAGNA CAUDA • Cuocere gli spicchi di aglio, coperti con il latte, fino a quando non diventino teneri. • Tritare l'aglio • Unirlo all'olio, alle acciughe tagliate molto finemente • Cuocere a fiamma moderata e mescolare fino a far ridurre il contenuto in un composto omogeneo. • Dopo circa venti minuti aggiungere qualche fiocco di burro • Servire in tavola con le verdure.
PERCHE’ QUASI-ALGORITMO? • Numero di passi e’ finito • Ma molti passi sono ambigui: • ‘teneri’? • `fiamma moderata’?
IL TERMINE ALGORITMO • Il nome ALGORITMO deriva dal nome del matematico persiano Muhammad ibn Mūsa 'l-Khwārizmī che attorno all’825 scrisse un trattato chiamatoKitāb al-djabr wa 'l-muqābala (Libro sulla ricomposizione e sulla riduzione) • AL-KHWARIZMI ALGORISMO ALGORITMO • (ALGEBRA deriva da AL-DJABR)
MCD: UN ALGORITMO ELEMENTARE • A scuola si impara un algoritmo molto semplice per calcolare MCD: la SCOMPOSIZIONE IN FATTORI PRIMI • 42 = 2 x 3 x 7 • 56 = 2 x 2 x 2 x 7 • Algoritmo MCD(M, N): • Scomponi M ed N in fattori primi • Estrai i componenti comuni • Questo metodo si’ puo’ solo applicare per numeri piccoli (la scomposizione in fattori primi e’ molto costosa)
MCD: L’ALGORITMO DI EUCLIDE • MCD(M,N): • RIPETI finche’ M N • SE M > N, M M –N; • ALTRIMENTI, N N – M; • RITORNA al passo 1; • OUTPUT M
ESEMPIO • MCD(42,56): • M(42) N(56); • N (56) > M (42) • N 14 • M(42) N(14); • M (42) > N (14); • M 28 • M(28) N(14) • M(28) > N (14); • M 14 • OUTPUT: 14
ALCUNE CONSIDERAZIONI:PROBLEMI ED ALGORITMI • Ci sono sempre molti algoritmi per risolvere un problema • Parte dell’arte della programmazione e’ trovare gli algoritmi piu’ efficienti
ALGORITMI E FUNZIONI • In termini matematici, un algoritmo puo’ essere visto come una FUNZIONE che produce un certo OUTPUT dato un certo INPUT • Per esempio, MCD(42,56) = 14 • Due algoritmi si dicono EQUIVALENTI se producono lo stesso output dato lo stesso input. • Fattori primi e Euclide sono EQUIVALENTI (ma non egualmente efficienti!!)
ALGORITMI PIU’ COMUNI IN INFORMATICA • Algoritmi MATEMATICI • Per fare calcoli anche molto complessi (per esempio, integrali, la scoperta di numeri primi) • Algoritmi di ORDINAMENTO • 45 2 17 28 101 2 17 28 45 101 • Algoritmi di RICERCA • Algoritmi per il TRATTAMENTO DELLE STRINGHE • COMPILATORI • Algoritmi di COMPRESSIONE
LINGUAGGI DI PROGRAMMAZIONE • Un linguaggio di programmazione permette di esprimere certi tipi di istruzioni in modo che possano venire poi convertite in istruzioni macchina • Un linguaggio di programmazione e’ caratterizzato da • SINTASSI (come vengono scritte le istruzioni) • SEMANTICA (come devono venire interpretate)
CONSIDERAZIONI, II: INGREDIENTI ESSENZIALI DI UN LINGUAGGIO DI PROGRAMMAZIONE • MCD(M,N): • RIPETI finche’ M N • SE M > N, M M –N; • ALTRIMENTI, N N – M; • RITORNA al passo 1; • OUTPUT M
DIAGRAMMI DI FLUSSO • Una rappresentazione grafica usata per descrivere in modo piu’ preciso i passi di un algoritmo senza usare una sintassi specifica • Un diagramma e’ composto da una serie di BLOCCHI uniti da archi
COUNT 0 COUNT COUNT + 1 BLOCCHI: ISTRUZIONI ELEMENTARI
ESEMPIO: AREA DEL RETTANGOLO • Calcolo dell’area di un rettangolo • AREA: • Leggi da input l’altezza H • Leggi da input la base B • Calcola l’area A • Produci in output il risultato
LE VARIABILI • Molti algoritmi richiedono un qualche modo per immagazzinare i risultati di certi calcoli. • Per esempio, nell’algoritmo per MCD, M e N • Quasi tutti i linguaggi di programmazione permettono di usare delle VARIABILI per questo scopo. Una variabile puo’ essere pensata come un nome per una zona di memoria.
ESEMPIO: SCAMBIO DI VALORI • Leggi il valore della prima variabile X • Leggi il valore della seconda variabile Y • Salva il valore di X in una variable Aux per ricordarlo • Assegna ad X il valore di Y • Assegna a Y il valore di Aux
CONDIZIONALI • Un’altro degli ingredienti fondamentali di un linguaggio di programmazione e’ la possibilita’ di scegliere di eseguire istruzioni diverse a seconda dei risultati di un TEST
ESEMPIO: PARI O DISPARI • Leggi N • Dividi N per 2 • Se Resto = 0 scrivi: N e’ pari • Altrimenti scrivi: N e’ dispari
RIPETIZIONI • L’ultimo componente fondamentale di un linguaggio di programmazione e’ la possibilita’ di ripetere le stesse azioni un gran numero di volte
START M = N? M > N? OUTPUT:M M M - N N N - M STOP ALGORITMO DI EUCLIDE T F T F
REMINDER: LA MACCHINA DI TURING E L’IPOTESI DI CHURCH • Quando avevamo introdotto la macchina di Turing, si era menzionata l’ipotesi di Church: • La macchina di Turing’ e’ una macchina UNIVERSALE • Nel senso che ogni programma eseguibile puo’ essere scritto sotto forma di istruzioni per la macchina di Turing • Questa ipotesi si basa sul fatto che la macchina di Turing puo’ esprimere tutti i costrutti fondamentali appena discussi
LINGUAGGI DI PROGRAMMAZIONE • Il calcolatore comprende istruzioni in LINGUAGGIO MACCHINA • 0011 001 010 • Una prima astrazione dal linguaggio macchina sono i cosiddetti ASSEMBLER che esprimono le istruzioni macchina in formato simbolico • ADD R1 R2 • Una seconda astrazione sono i linguaggi di programmazione AD ALTO LIVELLO che astraggono dalle istruzioni macchina • X X + Y
ALGORITMO DI EUCLIDE IN UN TIPICO LINGUAGGIO AD ALTO LIVELLO function MCD(M,N) while M ≠ N if M > N then M M - N else N N - M return M
COMPILATORE • E’ un programma che trasforma un programma espresso in linguaggio ad alto livello (PROGRAMMA SORGENTE) in linguaggio macchina (PROGRAMMA OGGETTO) • In Windows: crea file .exe • Linguaggi tipicamente compilati: C, C++, Fortran, Pascal
INTERPRETI • Un interprete e’ un programma che interpreta le istruzioni di un programma ad alto livello DIRETTAMENTE, senza tradurle in linguaggio macchina • Tipici linguaggi interpretati: Java, Lisp, Perl, Python
UN ESEMPIO DI LINGUAGGIO DI PROGRAMMAZIONE • VISUAL BASIC e’ il linguaggio di programmazione usato per sviluppare applicazioni in ambienti Microsoft Windows • E’ un linguaggio • Di alto livello • Interpretato • Visuale
DIFFERENZE TRA LINGUAGGI AD ALTO LIVELLO GREP in PERL:while (<STDIN>) { if (/Poesio/) { print $_;} }
DIFFERENZE TRA LINGUAGGI AD ALTO LIVELLO ….import java.util.regex.*;public class Grep { …. // Pattern used to parse lines private static Pattern linePattern = Pattern.compile(".*\r?\n"); // The input pattern that we're looking for private static Pattern pattern; // Compile the pattern from the command line private static void compile(String pat) { try { pattern = Pattern.compile(pat); } catch (PatternSyntaxException x) { System.err.println(x.getMessage()); System.exit(1); } } // Use the linePattern to break the given CharBuffer into lines, applying // the input pattern to each line to see if we have a match private static void grep(File f, CharBuffer cb) { Matcher lm = linePattern.matcher(cb); // Line matcher Matcher pm = null; // Pattern matcher int lines = 0; while (lm.find()) { lines++; CharSequence cs = lm.group(); // The current line if (pm == null) pm = pattern.matcher(cs); else pm.reset(cs); if (pm.find()) System.out.print(f + ":" + lines + ":" + cs); if (lm.end() == cb.limit()) break; } }
XSL • XSL (eXtensible Stylesheet Language): un linguaggio che permette di specificare come visualizzare un documento formattato in XML • Uso tipico: convertire XML in HTML
COSTRUTTI CONDIZIONALI IN XSL <poem author="jm" year="1667"> <verse>Seest thou yon dreary Plain, forlorn and wild,</verse> <verse>The seat of desolation, void of light,</verse> <verse>Save what the glimmering of these livid flames</verse> <verse>Casts pale and dreadful?</verse> </poem> <xsl:template match="poem"> <xsl:if test="@author='jm'"> 1. The poem's author is jm. </xsl:if>