14/05/2009 istruttore 2 problema interpretazione analisi soluzione interpretata esecutore Istruzione di un Esecutore alla Soluzione di un Problema soluzione descritta ELABORAZIONE DELL’INFORMAZIONE Informatica per le Discipline Umanistiche analista attuazione descrizione soluzione Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Istruzione di un Calcolatore alla Soluzione di un Problema problema interpretazione analisi algoritmo calcolatore 3 soluzione 4 Problemi e Algoritmi program. programma algoritmo esecuzione codifica in ling. di programmaz. soluzione Informatica per le Discipline Umanistiche - Mauro Cadei Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Esecutore 14 maggio 2009 Azioni Elementari 5 6 istruzioni elementari che sa interpretare associate ad azioni elementari che sa compiere per risolvere problemi elementari (primitivi) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 input azione elementare output interpretate in termini funzionali come entità che, prescindendo dalla loro struttura interna (black box), ricevono dati in ingresso (input) e producono risultati in uscita (output) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 1 14/05/2009 Istruttore Procedura Effettiva 7 8 processo di soluzione di un problema = scomposizione progressiva del problema fino a trasformarlo in una successione di problemi elementari risolvibili con le istruzioni elementari dell’esecutore Informatica per le Discipline Umanistiche - Mauro Cadei elementari eseguibili in un tempo finito eseguibili in modo deterministico (ottengono 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 precedono Informatica per le Discipline Umanistiche - Mauro Cadei Soluzione Effettiva 14 maggio 2009 Esecutore Caratterizzato Formalmente 10 dati un problema P e un esecutore E, si definisce soluzione effettiva del problema P per l’esecutore E una successione di istruzioni elementari tale che: caratterizzazione sintattica: il linguaggio che l’esecutore è in grado di interpretare deve essere definito in modo completo e non ambiguo caratterizzazione pragmatica: l’insieme delle azioni che l’esecutore è in grado di compiere deve essere definito e tali azioni devono 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 non ambiguo in generale, possono esistere diverse soluzioni effettive dello stesso problema per lo stesso esecutore Informatica per le Discipline Umanistiche - Mauro Cadei condizioni necessarie per caratterizzare formalmente l’esecutore 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 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei Algoritmo (definizione) 14 maggio 2009 Sviluppo di un Programma 11 12 algoritmo = soluzione effettiva per esecutore caratterizzato formalmente linguaggio di programmazione = linguaggio impiegato quando l’esecutore è un calcolatore programma = algoritmo formulato in un linguaggio di programmazione CASE Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 ambiente di sviluppo problema esecutore linguaggio alto liv. tutte le azioni sono, per l’esecutore, 14 maggio 2009 9 procedura effettiva per un esecutore = successione di azioni tale che: analisi soluzione informale formalizzazione soluzione formale: algoritmo programmazione programma (alto livello) traduzione programma (macchina) esecutore linguaggio macchina (HW) esecuzione Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 2 14/05/2009 Sviluppo di un Programma 13 Ciclo di Vita del Software 14 analisi: identificazione del problema e di una soluzione, condotta da un umano formalizzazione: definizione formale dell’algoritmo, condotta da un umano 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 umano 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) Informatica per le Discipline Umanistiche - Mauro Cadei analisi e specifica dei requisiti: studiare il problema 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 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei Ingegneria del Software 14 maggio 2009 Algoritmi Parametrici 15 16 producono un risultato che dipende da un insieme di dati di partenza descrivono la soluzione non di un singolo problema, 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 Informatica per le Discipline Umanistiche - Mauro Cadei le istruzioni dell’algoritmo fanno riferimento a variabili il cui valore cambia a seconda della situazione elaborativa in cui l’esecutore si trova 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei Variabile 14 maggio 2009 Uso delle Variabili 17 18 assegnamento di un valore lettura del valore x contenitore per dati caratterizzato da: un nome (identifica univocamente la variabile) un valore viene attribuito/modificato mediante un assegnamento può essere determinato mediante un’operazione di lettura Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 esempio: op1 + op2 × op3 istruzioni di assegnamento: richiedono di introdurre nel contenitore identificato dal nome della variabile il valore specificato dall’espressione a destra dell’assegnamento nome espressioni: l’esecutore usa il valore contenuto nelle variabili per calcolare il risultato dell’espressione esempio: r ← 35 (assegna 35 alla variabile il cui nome è 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) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 3 14/05/2009 Diagrammi di Flusso (Flow Chart) 19 Algoritmo: Esempio (ricetta) 20 inizio setaccia 50 g di farina metti la farina in casseruola con 50 cc di latte freddo sì fine inizio taglialo a pezzi azione burro pezzo unico? no aggiungi burro e 300 cc di latte accendi il fuoco metti la casseruola sul fuoco sì no operazione di input/output sì bolle? no no sottoprogramma selezione (a 2 vie) sì vuoi piccante? mescola aggiungi noce moscata piccante? no aggiungi pepe sì aggiungi 150 cc latte cuoci 20 minuti Informatica per le Discipline Umanistiche - Mauro Cadei 21 fine Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Algoritmo: Esempio (confronto tra 2 numeri) 22 14 maggio 2009 Algoritmo: Esempio (media tra n numeri) inizio inizio somma ← 0 leggi x contatore ← 0 leggi y leggi num d←x-y sì d > 0? num ≠ 0 no sì scrivi “maggiore il primo” d = 0? sì no somma ← somma + num scrivi “maggiore il secondo” scrivi “uguali” no contatore ← contatore + 1 contatore = 0 sì no media ← 0 media ← somma / contatore leggi num scrivi media fine Informatica per le Discipline Umanistiche - Mauro Cadei fine Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Algoritmo: Somma i Primi N Naturali 23 14 maggio 2009 Algoritmo: Somma i Primi N Naturali 24 inizio inizio leggi n leggi n somma ← n sì n > 1? somma ← n * (n + 1) / 2 no n←n-1 scrivi somma somma ← somma + n fine Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 scrivi somma fine Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 4 14/05/2009 Algoritmi: Proprietà 25 26 definizioni informali: Programmi correttezza: un algoritmo è corretto se risolve il problema per cui è stato progettato complessità: è proporzionale al numero di istruzioni che devono essere eseguite per calcolare la soluzione efficienza: è inversamente proporzionale al tempo impiegato per calcolare la soluzione Informatica per le Discipline Umanistiche - Mauro Cadei Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Linguaggi di Programmazione 27 Linguaggio Pascal: Esempio 28 ogni linguaggio di programmazione è caratterizzato da due componenti complementari: PROCEDURE Media; VAR {dichiarazione di variabili} somma, contatore, num : integer; media : real; BEGIN somma := 0; contatore := 0; {si inizializzano 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 {non si può dividere per 0} THEN media := 0; ELSE media := somma / contatore; Write(media); END sintassi: insieme delle regole che specificano come comporre istruzioni ben formate semantica: specifica il significato di ogni istruzione ben formata (la successione delle azioni che vengono compiute allorché l’istruzione viene eseguita) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei Componenti di un Programma 29 identificazione del programma 14 maggio 2009 Istruzioni 30 14 maggio 2009 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 {…} le istruzioni presenti in questa parte sono eseguite in successione: una volta eseguita un’istruzione si passa alla successiva e così via fino ad arrivare all’ultima istruzione del programma esistono particolari istruzioni di controllo che consentono di modificare il flusso di esecuzione all’interno del programma (strutture di controllo condizionali e iterative) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 acquisizione dei dati (ingresso); presentazione dei risultati (uscita). istruzioni aritmetico–logiche: consentono la manipolazione dei dati, realizzano l’elaborazione vera e propria dichiarazione delle variabili utilizzate indicando nome e tipo parte esecutiva detta anche corpo del programma istruzioni di input/output assegnamento: una variabile riceve un valore che è il risultato ottenuto dalla valutazione di un’espressione che può contenere costanti e variabili nelle espressioni sono comprese le operazioni aritmetiche di base, alcune funzioni matematiche più complesse (logaritmi, esponenziali, radici, …), le operazioni di tipo logico (cioè quelle che fanno riferimento a dati booleani) istruzioni di controllo: modificano il flusso di esecuzione delle istruzioni all’interno di un programma selezione (semplice, a due vie o a più vie) cicli (a condizione iniziale, finale, iterativi) Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 5 14/05/2009 Dati Array 31 32 ogni variabile è caratterizzata dal suo tipo tipi predefiniti: numeri, caratteri, booleani, … altri tipi: stringhe, date, … v[1] v[2] variabili strutturate: v[3] v[4] v[5] v[6] v[7] vettore 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.nome, studente.cognome, studente. indirizzo …) Informatica per le Discipline Umanistiche - Mauro Cadei v[1,1] v[1,2] v[1,3] v[1,4] v[1,5] v[1,6] matrice bidimensionale 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 Record 33 34 nome cognome età sesso indirizzo Informatica per le Discipline Umanistiche - Mauro Cadei CAP Programmazione Imperativo-Procedurale città 14 maggio 2009 Informatica per le Discipline Umanistiche - Mauro Cadei Programmazione Imperativa 35 14 maggio 2009 Metodo Top-Down 36 algoritmi + strutture di dati = programmi programmazione imperativa: un programma è una successione di istruzioni interpretate dall’esecutore come comandi da svolgere Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 problema top-down p1 p 1.1 p 1.2 p2 p 1.3 p 2.1 p 2.2 p3 p 3.1 p 3.2 p 3.3 p 3.4 per risolvere un problema, lo si scompone progressivamente in sottoproblemi più facilmente gestibili Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 6 14/05/2009 Programmazione Procedurale 37 Sottoprogrammi Ricorsivi 38 se uno stesso sottoproblema si presenta più volte, lo si risolve con uno 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 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) definizione: 14 maggio 2009 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 Informatica per le Discipline Umanistiche - Mauro Cadei Torre di Hanoi (leggenda) 39 definizione: Informatica per le Discipline Umanistiche - Mauro Cadei un oggetto è ricorsivo se è definito in termini di se stesso (nella propria definizione fa riferimento a se stesso) funzione ricorsiva: n! (fattoriale) 14 maggio 2009 Torre di Hanoi: Procedura Ricorsiva 40 in un tempio: 3 pali e 64 dischi d’oro, di dimensioni decrescenti, infilati sul primo palo i sacerdoti devono 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 finiranno il lavoro ci sarà la fine del mondo (in realtà, muovendo un disco al secondo sono necessari quasi 600 miliardi di anni) Informatica per le Discipline Umanistiche - Mauro Cadei 41 14 maggio 2009 PROCEDURE Hanoi(n: integer; from, dest, by: char); BEGIN IF (n=1) THEN writeln('Move the plate from ', from, ' to ', dest) ELSE BEGIN Hanoi(n-1, from, by, dest); Hanoi(1, from, dest, by); Hanoi(n-1, by, dest, from); END; END; Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 FINE Informatica per le Discipline Umanistiche - Mauro Cadei 14 maggio 2009 7