Processo di Soluzione di un Problema 2 interpretazione esecutore istruttore analisi descritta interpretata ELABORAZIONE DELL INFORMAZIONE descrizione attuazione Informatica per le Discipline Umanistiche 3 Soluzione di un Problema con un Calcolatore interpretazione calcolatore 4 Problemi e Algoritmi programmatore analisi programma algoritmo algoritmo esecuzione codifica in ling. di programmaz. Esecutore Azioni Elementari 5 6 istruzioni elementari che sa interpretare associate ad azioni elementari che sa compiere per risolvere problemi elementari (primitivi) input azione elementare interpretate in termini funzionali come entità che, prescindendo dalla loro struttura interna (black box), ricevo dati in ingresso (input) e produco risultati in uscita (output) output 1
Istruttore Procedura Effettiva 7 processo di di un = scomposizione progressiva del fi a trasformarlo in una successione di problemi elementari risolvibili con le istruzioni elementari dell esecutore 8 procedura effettiva per un esecutore = successione di azioni tale che: tutte le azioni so, per l esecutore, elementari eseguibili in un tempo finito eseguibili in modo deterministico (ottengo sempre, a parità di input, gli stessi risultati) è fissato l ordine di esecuzione delle azioni è esplicitamente specificato il modo in cui un azione utilizza i risultati delle azioni che la precedo 9 Soluzione Effettiva dati un P e un esecutore E, si definisce effettiva del P per l esecutore E una successione di istruzioni elementari tale che: E è in grado di interpretare le istruzioni nella successione e quindi di associare a ciascuna di esse l azione (o la successione di azioni) che deve compiere per eseguirla la successione di azioni risultante dall interpretazione delle istruzioni costituisca una procedura effettiva per E la successione di azioni risultante dall interpretazione delle istruzioni risolve P in generale, posso esistere diverse soluzioni effettive dello stesso per lo stesso esecutore 10 Esecutore Caratterizzato Formalmente condizioni necessarie per caratterizzare formalmente l esecutore caratterizzazione sintattica: il linguaggio che l esecutore è in grado di interpretare deve essere definito in modo completo e n ambiguo caratterizzazione pragmatica: l insieme delle azioni che l esecutore è in grado di compiere deve essere definito e tali azioni devo essere elementari per l esecutore caratterizzazione semantica: l insieme delle regole di associazione tra costrutti del linguaggio e azioni deve essere definito in modo completo e n ambiguo Algoritmo (defne) Sviluppo di un Programma 11 12 analisi informale algoritmo = effettiva per esecutore caratterizzato formalmente linguaggio di programmazione = linguaggio impiegato quando l esecutore è un calcolatore programma = algoritmo formulato in un linguaggio di programmazione CASE ambiente di sviluppo esecutore linguaggio alto liv. formalizzazione programmazione traduzione esecutore linguaggio esecuzione macchina (HW) formale: algoritmo programma (alto livello) programma (macchina) 2
Sviluppo di un Programma Ciclo di Vita del Software 13 analisi: identificazione del e di una, condotta da un uma formalizzazione: defne formale dell algoritmo, condotta da un uma che eventualmente si avvale di strumenti CASE (Computer-Aided Software Engineering) programmazione: scrittura del programma in un linguaggio di programmazione di alto livello, condotta da un uma che si avvale di strumenti SW di sviluppo (IDE = Integrated Development Environment) traduzione: scrittura di un programma equivalente in linguaggio macchina, condotta da SW appositi (compilatori, interpreti) 14 analisi e specifica dei requisiti: studiare il tenendo conto delle condizioni di utilizzo prospettate per il programma da realizzare progettazione: individuazione delle caratteristiche tecniche del programma implementazione: scrittura del programma test: verifica della corrispondenza tra le funzioni del programma realizzato e quelle previste rilascio (deployment): installazione del programma presso gli utenti manutenzione: modifiche al programma per eliminare malfunzionamenti, aggiungere funzionalità, adeguarlo a mutate esigenze degli utenti Ingegneria del Software Algoritmi Parametrici 15 16 produco un risultato che dipende da un insieme di dati di partenza descrivo la n di un singolo, ma di una intera classe di problemi strutturalmente equivalenti esempi: l algoritmo per la moltiplicazione di due numeri specifica come effettuare il prodotto di tutte le possibili coppie di numeri l algoritmo per la ricerca di un libro nello schedario della biblioteca vale per tutti i possibili libri le istruzioni dell algoritmo fan riferimento a variabili il cui valore cambia a seconda della situazione elaborativa in cui l esecutore si trova Variabile Uso delle Variabili 17 assegnamento di un valore me x lettura del valore contenitore per dati caratterizzato da: un me (identifica univocamente la variabile) un valore viene attribuito/modificato mediante un assegnamento può essere determinato mediante un operazione di lettura 18 espressioni: l esecutore usa il valore contenuto nelle variabili per calcolare il risultato dell espressione esempio: op1 + op2 op3 istruzioni di assegnamento: richiedo di introdurre nel contenitore identificato dal me della variabile il valore specificato dall espressione a destra dell assegnamento esempio: r 35 (assegna 35 alla variabile il cui me è r) esempio: circ 2 r pi (il risultato dell espressione 2 r pi viene calcolato utilizzando i valori contenuti nelle variabili r e pi e il risultato viene poi assegnato alla variabile circ) la stessa variabile può comparire in entrambi i lati dell istruzione di assegnamento esempio: k k+1 (il valore contenuto in k viene utilizzato per trovare il valore dell espressione k + 1 che viene memorizzato come nuovo valore di k) 3
Diagrammi di Flusso (Flow Chart) Algoritmo: Esempio (ricetta) 19 20 setaccia 50 g di farina metti la farina in casseruola con 50 cc di latte freddo azione taglialo a pezzi burro pezzo unico? aggiungi burro e 300 cc di latte accendi il fuoco operazione di input/output selezione (a 2 vie) sottoprogramma metti la casseruola sul fuoco bolle? mescola aggiungi ce moscata aggiungi 150 cc latte vuoi piccante? piccante? aggiungi pepe cuoci 20 minuti 21 Algoritmo: Esempio (confronto tra 2 numeri) 22 Algoritmo: Esempio (media tra n numeri) scrivi maggiore il primo leggi x leggi y d x - y d > 0? scrivi uguali d = 0? scrivi maggiore il secondo somma 0 contatore 0 leggi num num 0 somma somma + num contatore contatore + 1 leggi num media 0 contatore = 0 media somma / contatore scrivi media Algoritmo: Somma i Primi N Naturali Algoritmo: Somma i Primi N Naturali 23 24 leggi n somma n leggi n n > 1? somma n * (n + 1) / 2 n n - 1 scrivi somma scrivi somma somma somma + n 4
Algoritmi: Proprietà 25 defni informali: correttezza: un algoritmo è corretto se risolve il per cui è stato progettato complessità: è proporzionale al numero di istruzioni che devo essere eseguite per calcolare la efficienza: è inversamente proporzionale al tempo impiegato per calcolare la 26 Programmi Linguaggi di Programmazione Linguaggio Pascal: Esempio 27 ogni linguaggio di programmazione è caratterizzato da due componenti complementari: sintassi: insieme delle regole che specifica come comporre istruzioni ben formate semantica: specifica il significato di ogni istruzione ben formata (la successione delle azioni che vengo compiute allorché l istruzione viene eseguita) 28 PROCEDURE Media; VAR {dichiarazione di variabili} somma, contatore, num : integer; media : real; BEGIN somma := 0; contatore := 0; {si inizializza le variabili} Read(num); WHILE num <> 0 DO {si continua a leggere finchè si legge 0} BEGIN somma := somma + num; contatore := contatore + 1; Read(num); END IF contatore = 0 {n si può dividere per 0} THEN media := 0; ELSE media := somma / contatore; Write(media); END 29 Componenti di un Programma identificazione del programma linguaggio Pascal: il termine PROGRAM ed istruzioni racchiuse tra i termini BEGIN e END linguaggio C: il termine main ed istruzioni racchiuse fra parentesi graffe { } dichiarazione delle variabili utilizzate indicando me e tipo parte esecutiva detta anche corpo del programma le istruzioni presenti in questa parte so eseguite in successione: una volta eseguita un istruzione si passa alla successiva e co via fi ad arrivare all ultima istruzione del programma esisto particolari istruzioni di controllo che consento di modificare il flusso di esecuzione all inter del programma (strutture di controllo condizionali e iterative) 30 Istruzioni istruzioni di input/output acquisizione dei dati (ingresso); presentazione dei risultati (uscita). istruzioni aritmetico logiche: consento la manipolazione dei dati, realizza l elaborazione vera e propria assegnamento: una variabile riceve un valore che è il risultato ottenuto dalla valutazione di un espressione che può contenere costanti e variabili nelle espressioni so comprese le operazioni aritmetiche di base, alcune funzioni matematiche più complesse (logaritmi, esponenziali, radici, ), le operazioni di tipo logico (cioè quelle che fan riferimento a dati booleani) istruzioni di controllo: modifica il flusso di esecuzione delle istruzioni all inter di un programma selezione (semplice, a due vie o a più vie) cicli (a condizione iniziale, finale, iterativi) 5
Dati Array 31 ogni variabile è caratterizzata dal suo tipo tipi predefiniti: numeri, caratteri, booleani, altri tipi: stringhe, date, variabili strutturate: vettori (o array): insieme di n variabili dello steso tipo indirizzabili mediante un indice (es. v[1], v[2] v[n]) matrici (array multidimensionali) : insieme di variabili dello steso tipo indirizzabili mediante due o più indici (es. v[1,1], v[1,2] v[10,5] v[n,m]) record: strutture articolate in cui una sola variabile comprende più componenti di diverso tipo detti campi (es. studente.me, studente.cogme, studente. indirizzo ) 32 v[1] v[2] v[3] v[4] v[5] v[6] v[7] vettore v[1,1] v[1,2] v[1,3] v[1,4] v[1,5] v[1,6] matrice bidimensionale Record 33 34 Programmazione Imperativo-Procedurale me cogme età sesso indirizzo CAP città Programmazione Imperativa Metodo Top-Down 35 36 algoritmi + strutture di dati = programmi programmazione imperativa: un programma è una successione di istruzioni interpretate dall esecutore come comandi da svolgere top-down p 1 p 2 p 3 p 1.1 p 1.2 p 1.3 p 2.1 p 2.2 p 3.1 p 3.2 p 3.3 p 3.4 per risolvere un, lo si scompone progressivamente in sottoproblemi più facilmente gestibili 6
Programmazione Procedurale Sottoprogrammi Ricorsivi 37 se u stesso sotto si presenta più volte, lo si risolve con u stesso pezzo di programma (sottoprogramma, procedura) vantaggi della modularità: riutilizzo del SW (estensione delle funzionalità del linguaggio di programmazione) migliore coordinamento in ambienti di sviluppo con molti programmatori semplificazione del controllo di correttezza 38 un oggetto è ricorsivo se è definito in termini di se stesso (nella propria defne fa riferimento a se stesso) funzione ricorsiva: n! (fattoriale) defne: 0! = 1 1! = 1 n! = n (n 1)! esempio: 4! = 4 3! = 4 (3 2!) = 4 (3 (2 1!)) = 4 3 2 1 = 24 funzione ricorsiva: fib[n] (successione di Fibonacci) defne: fib[1] = 1 fib[2] = 1 fib[n] = fib[n 1] + fib[n 2] esempio: fib[7] = fib[6] + fib[5] = (fib[5] + fib[4]) + (fib[4] + fib[3]) = = 13 Torre di Hai (leggenda) Torre di Hai: Procedura Ricorsiva 39 40 in un tempio: 3 pali e 64 dischi d oro, di dimensioni decrescenti, infilati sul primo palo i sacerdoti devo spostare i dischi sul terzo palo secondo le regole: può essere spostato solo un disco alla volta un disco può essere appoggiato solo su un disco di dimensioni maggiori quando i sacerdoti finiran il lavoro ci sarà la del mondo (in realtà, muovendo un disco al secondo so necessari quasi 600 miliardi di anni) PROCEDURE Hai(n: integer; from, dest, by: char); BEGIN IF (n=1) THEN writeln('move the plate from ', from, ' to ', dest) ELSE BEGIN Hai(n-1, from, by, dest); Hai(1, from, dest, by); Hai(n-1, by, dest, from); END; END; 41 FINE 7