Elementi di programmazione Lezione n. 2bis Programma Descrizione di un algoritmo effettuata tramite un linguaggio artificiale detto linguaggio di programmazione dove l’esecutore è un dispositivo tecnologico come un elaboratore elettronico ottenuto tramite un procedimento di traduzione (algoritmico) effettuato da programmi traduttori classificabili in compilatori e interpreti Il linguaggio di programmazione è dato da dati e istruzioni organizzate in strutture di controllo Corso di Informatica Giuridica 2 1 Rappresentazione logica degli algoritmi pseudocodifica (esempio precedente) professionale diagramma a blocchi utile a scopi dimostrativi indica un flusso di istruzioni ovvero la sequenza dei passi da eseguire basato su simboli grafici ogni simbolo corrisponde a un costrutto verbi di ”esecuzione” (effetto osservabile) condizioni iterazioni le due modalità sono semanticamente equivalenti Corso di Informatica Giuridica 3 Pseudocodice Al posto dei diagrammi a blocchi si possono usare altre tecniche Una di queste è detta pseudocodice Descrive l’algoritmo con il linguaggio naturale semplificato al fine di togliere le ambiguità La descrizione mediante la pseudocodifica si suddivide in due parti: • dichiarazione delle variabili • dichiarazione delle azioni Corso di Informatica Giuridica 4 2 Pseudocodice - esempio Inizio Inizializza MAX a 0 Inizializza N1 a 0 Leggi N1 Finché N1 != 999 Se N1 > MAX allora Assegna N1 a MAX Leggi N1 Stampa MAX Fine Corso di Informatica Giuridica 5 I diagrammi a blocchi – (1/6) la diagrammazione a blocchi o flow chart è un metodo per rappresentare l’algoritmo in modo sintetico e preciso un diagramma a blocchi indica un flusso di istruzioni ovvero la sequenza dei passi da eseguire è basato su simboli grafici ogni simbolo corrisponde ad un preciso costrutto o insieme di istruzioni Corso di Informatica Giuridica 6 3 I diagrammi a blocchi - (2/6) Un diagramma a blocchi è un insieme di blocchi elementari costituito sempre dalle seguenti parti: blocco di inizio blocco di fine numero finito di blocchi di lettura/scrittura o di azione numero finito di blocchi di controllo (opzionale) 7 Corso di Informatica Giuridica I diagrammi a blocchi - (3/6) Rappresenta il flusso (l'ordine) del diagramma Istruzioni di inizio e di fine inizio Corso di Informatica Giuridica fine 8 4 I diagrammi a blocchi - (4/6) istruzione operativa (effettiva) Rappresenta una elaborazione Esempi: calcola archivia 9 Corso di Informatica Giuridica I diagrammi a blocchi - (5/6) simbolo di decisione vero Corso di Informatica Giuridica condizione falso 10 5 I diagrammi a blocchi - (6/6) Simbolo di input/output Rappresenta un'operazione di input/output. Esempi: scrivi leggi Corso di Informatica Giuridica 11 Esempio in diagrammi a blocchi 1. 2. 3. 4. 5. 6. Introdurre una moneta da un euro Inserire il bicchierino nell’apposito spazio Premere il bottone al di sopra della scritta “caffè” Se esce il caffè, attendere il segnale sonoro e quindi ritirare il bicchiere Altrimenti premere il bottone al di sopra della scritta “restituzione” e ritirare la moneta. Ricominciare da 1 Corso di Informatica Giuridica 12 6 Start Introdurre una moneta da 1 euro Inserire il bicchierino nell’apposito spazio. Premere il bottone al di sopra della scritta “caffè” No Esce il caffe’ Premere il pulsante restituzione Ritirare la moneta Si’ Attendere il segnale sonoro e ritirare il bicchiere Fine 13 Corso di Informatica Giuridica Dati: costanti e variabili Un dato può essere: costante - un dato che assume un valore all’inizio dell’algoritmo e lo mantiene per tutta l’esecuzione di questo importo x 1936,27 rate di conversione variabile - è una coppia <nome, valore> valore nome Corso di Informatica Giuridica 14 7 Variabili Il valore delle variabili deve appartenere a una categoria che solitamente sono: numeri interi - 60 numeri reali - 220,56 sequenze di caratteri - Mario Rossi valori booleani - vero, falso I valori una volta che appartengono ad una categoria di dati devono rispettare le regole della categoria Esempio i numeri si possono moltiplicare fra loro i caratteri no Corso di Informatica Giuridica 15 Istruzioni – (1/2) Istruzioni operative Istruzioni di controllo istruzioni che eseguono azioni che producono risultati anche parziali moltiplica, conta, trasforma, etc. istruzioni che guidano l’andamento dell’esecuzione se piove allora resto a casa Istruzioni di salto istruzioni che spostano il punto di esecuzione da una parte all’altra dell’algoritmo salto condizionato, salto incondizionato Corso di Informatica Giuridica 16 8 Istruzioni - (2/2) Istruzioni di inizio e di fine sono le istruzione di apertura e di chiusura dell’algoritmo Istruzioni di ingresso e di uscita sono le istruzioni che consentono l’acquisizione dei dati (ingresso) e l’emissione dei risultati (uscita) lettura del codice, inserimento della carta, stampa del fogliettino, emissione dei soldi 17 Corso di Informatica Giuridica La formalizzazione dell’algoritmo Esempio 1: calcolo dell’area di un rettangolo Linguaggio pseudocodifica Diagramma a blocchi INIZIO Dati di input: b,h INIZIO 1 Lettura b,h 2. Area=b*h 3. Stampa Area FINE Corso di Informatica Giuridica Lettura b,h Area=b*h Stampa Area FINE 18 9 Implementazione del programma La scelta opportuna del linguaggio ad alto livello in cui implementare l’algoritmo dipende anch’esso dall’ambito del problema. Esempi di linguaggi ad alto livello: C (programmazione di sistemi) FORTRAN (Programmazione scientifica) COBOL (Applicazioni commerciali) LISP (Applicazioni di intelligenza artificiale) PROLOG (Applicazioni di intelligenza artificiale) ….. Corso di Informatica Giuridica 19 Test e verifica Il software deve soddisfare a tutte le richieste di output, cioe’ deve restituire tutti i parametri richiesti Le richieste di output devono essere coerenti con le richieste di input (cioe’ il risultato deve essere corretto) La correttezza del risultato deve essere verificata per una ampia gamma di dati di input, anche in condizioni limite Debugging (togliere gli errori) e Testing (correttezza funzionale) Corso di Informatica Giuridica 20 10 Documentazione e mantenimento del programma Seguire linee guida nello sviluppo del software. Allegare al software documentazione scritta sulle scelte metodologiche e di implementazione effettuate. Mantenere aggiornata tale documentazione ogni volta che viene fatta una modifica, tenendo traccia dei cambiamenti effettuati. 21 Corso di Informatica Giuridica Esempio: conversione miglia-chilometri Diagramma a blocchi Algoritmo 1.Inizio 2.Leggi miglia 3. Km=miglia*1.609 4. Scrivi km 5. Fine inizio Leggi miglia km=miglia*1.609 scrivi km fine Corso di Informatica Giuridica 22 11 PROBLEMA: Calcolare l’area di un rettangolo Algoritmo Dati di input: b,h INIZIO 1 Lettura b,h 2. Area=b*h 3. Stampa Area FINE Programma in linguaggio C /* Il programma calcola l'area di un triangolo */ #include <stdio.h> int main(void) { float b,h,area; printf("introduci base e altezza \n "); scanf("%f%f",&b,&h); area=b*h; printf("area = %f",area); } Corso di Informatica Giuridica 23 Istruzioni di condizione e decisione Condizione è una espressione che si verifica o vera o falsa ogni tipo di dati ha i suoi operatori di confronto Corso di Informatica Giuridica 24 12 Le condizioni Operatori di confronto dei numeri: uguale = X==3 maggiore > X>3 maggiore uguale => X>=3 minore < X<3 minore uguale <= X<=3 diverso <> X<>3 Operatori di confronto dei caratteri: uguale = = “monica”==Y diverso <> “monica” <>Y Corso di Informatica Giuridica 25 Gli operatori booleani - I Operatori booleani: and “canta” e “danza” ossia la condizione è vera quando il soggetto canta e danza contemporaneamente or “canta” o “danza” - in modo alternativo ossia sono valide le seguenti situazioni: “canta e non danza”, oppure “danza e non canta”, oppure “canta e danza” not non “canta” – negazione xor “canta” o “danza” - in modo esclusivo ovvero sono valide le seguenti situazioni “canta e non danza” oppure “danza e non canta” Corso di Informatica Giuridica 26 13 Gli operatori booleani - II A B VERO FALSO VERO FALSO VERO VERO FALSO FALSO A AND B VERO FALSO FALSO FALSO A OR B VERO VERO VERO FALSO NOT A FALSO VERO FALSO VERO Corso di Informatica Giuridica A XOR B FALSO VERO VERO FALSO 27 Scomposizione in sotto-algoritmi: sviluppo top-down Spesso per semplificare il flusso procedurale si rappresentano insieme di istruzioni in un solo blocco concettualmente omogeneo Successivamente si scompone il blocco in istruzioni sempre più “fini” Si procede dal generale al particolare Questo metodo di analizzare i problemi partendo da macro-blocchi per poi arrivare alle istruzioni più dettagliate è detto top-down Corso di Informatica Giuridica 28 14 Esempio - bancomat scomposizione dell’azione 3 3. Scelta dell’operazione da eseguire 3.1 visualizzazione dei possibili menu 3.2 scelta del menu 3.3 visualizzazione delle operazioni possibili nel menu scelto 3.4 scelta dell’operazione Corso di Informatica Giuridica 29 Sviluppo strutturato degli algoritmi e Ingegneria del software Lezione n. 5 15 Programmazione strutturata e metodo top-down Problema : prendere un caffè alla macchinetta automatica Corso di Informatica Giuridica 31 Analisi top-down Introduzione dati Esecuzione caffè Gestione dell’errore Richiesta di continuazione Fine Corso di Informatica Giuridica 32 16 Start Introduzione dati Blocco1 Preparazione del caffè Blocco2 Gestione dell’errore Blocco3 si Vuoi ricominciare? no Corso di Informatica Giuridica Fine 33 Start blocco1 Introdurre una moneta da un euro Inserire il bicchierino nell’apposito spazio Premere il bottone “caffè” Fine blocco1 Corso di Informatica Giuridica 34 17 Start blocco2 Sensore=“spento” falso C’è acqua vero vero Sensore=“acceso” C’è caffè Sensore=“acceso” Misura una dose di acqua Scalda l’acqua Aggiungi una dose di caffè Fine blocco2 Corso di Informatica Giuridica 35 Start blocco3 falso Versa il caffé Ritira il caffé Sensore =“acceso” vero Premi il bottone “Restituzione” Ritira moneta Ripara il guasto Corso di Informatica Giuridica Fine blocco3 36 18 Istruzioni di controllo: i salti Istruzione di salto (jump, goto): prescrive che l’ulteriore elaborazione continui a partire da un certo punto trasferisce il controllo al punto indicato Corso di Informatica Giuridica 37 Salti incondizionati e condizionati Salto incondizionato 1. X = 0; 2. X = X+1; 3. Goto 50 Soluzione: Salto condizionato 1. X = 0; 2. X = X+1; 3. If X < 10 go to 2 Corso di Informatica Giuridica 38 19 Salto incondizionato X=0 X = X+1 Istruzione numero 50 39 Corso di Informatica Giuridica Salto condizionato X=0 X = X+1 X < 100 Corso di Informatica Giuridica 40 20 Programmazione strutturata la programmazione strutturata è quel procedimento che permette di ottenere algoritmi facilmente documentabili e comprensibili si basa su tre costrutti: Sequenza Selezione Ripetizione : tre tipi di ciclo condizione in testa (while), condizione in coda (repeat), ripetizione enumerativa (for) regole base: i salti sono rigorosamente proibiti esiste una sola fine di tutto il programma le selezioni si chiudono sempre Corso di Informatica Giuridica 41 La sequenza Le istruzioni si susseguono rispetto ad un ordine e vengono eseguite nella sequenza indicata {<S1>; <S2>; … <Sn>} Corso di Informatica Giuridica 42 21 La sequenza inizio S1 S2 …... Sn fine Corso di Informatica Giuridica 43 La selezione If (<condizione>) { BLOCCO <S1>….. <Sn> } Se la “condizione” è vera allora vengono eseguite l’istruzioni del blocco Se la “condizione” e’ falsa, allora il blocco non viene eseguito Corso di Informatica Giuridica 44 22 La selezione con alternativa If (<condizione>) then { <blocco1> } else { <blocco2> } Se la condizione è vera allora viene eseguito il blocco1 altrimenti il blocco2 45 Corso di Informatica Giuridica La selezione inizio falso vero condizione A fine Corso di Informatica Giuridica 46 23 La ripetizione con condizione in testa (while) While (<condizione>) do { <blocco> } il blocco viene ripetuto finché la condizione risulta vera quando l’espressione risulta falsa la ripetizione cessa e si passa all’istruzione successiva 47 Corso di Informatica Giuridica Ripetizione con condizione in testa (while) inizio vero condizione B falso A fine Corso di Informatica Giuridica 48 24 La ripetizione con condizione in coda (repeat) Repeat { <blocco> } Until (<condizione>) il blocco viene ripetuto finché la condizione risulta falsa quando l’espressione risulta vera la ripetizione cessa e si passa all’istruzione successiva 49 Corso di Informatica Giuridica Ripetizione in coda (repeal) inizio A B falso vero condizione Corso di Informatica Giuridica fine 50 25 La ripetizione enumerativa (for) for (<espressione iniziale>, <condizione>, <aggiornameto espressione>) { <blocco> } il blocco viene ripetuto finché la condizione risulta vera la formula di aggiornamento modifica i valori di confronto nell’espressione fino a quando la condizione non diviene vera 51 Corso di Informatica Giuridica La ripetizione enumerativa (for) i=1 For i= 1 a 100 Blocco A Blocco B aggiornamento di i=i+1 Fine Corso di Informatica Giuridica 52 26 Esempio di for X=1 For X= 1 a 100 Stampa X X=X+1 Fine Cosa produce questo algoritmo ? Corso di Informatica Giuridica 53 Potenza della programmazione strutturata Le tre strutture presentate consentono di esprimere qualsiasi algoritmo Teorema di Bohm-Jacopini: “Ogni diagramma a blocchi non strutturato è sempre trasformabile in un diagramma a blocchi strutturato equivalente...” (...con l’eventuale aggiunta di una variabile) Corso di Informatica Giuridica 54 27 Il metodo top-down Metodo top-down: scomposizione progressiva del problema e delle azioni (istruzioni) che lo risolvono Favorisce la divisione del lavoro: Analisi: definizione della struttura generale del programma, dei moduli principali che lo compongono, e delle operazioni astratte svolte da ciascuno di essi, le cosiddette “specifiche” Programmazione: realizzazione dei programmi che svolgono le singole operazioni individuate nella fase di analisi Corso di Informatica Giuridica 55 Un esempio il problema: calcola il voto medio ottenuto dagli studenti del corso la descrizione dell’algoritmo non è in un linguaggio di programmazione ma è una astrazione espressa linguaggio naturale (pseudocodice) Corso di Informatica Giuridica 56 28 Primo raffinamento Calcola il voto medio ottenuto dagli studenti del corso Inizializza e acquisisci le variabili Inserisci, somma e calcola i voti Calcola e stampa la media 57 Corso di Informatica Giuridica Secondo raffinamento – Inizializza le variabili Inizializza il totale a 0 Inizializza il contatore voti a 0 – Inserisci, somma e calcola i voti Leggi il primo voto Finché l’utente non ha inserito la sentinella, ripeti Aggiungi il voto al totale parziale Aggiungi 1 al contatore voti Leggi il prossimo voto Corso di Informatica Giuridica 58 29 Secondo raffinamento (continua) - Calcola e visualizza la media Calcola la media dividendo il totale per il contatore voti Visualizza la media Corso di Informatica Giuridica 59 30