Informatica CdL Scienze e Tecniche Psicologiche a.a. 2018-2019 Diagrammi di flusso
Sommario Diagramma a blocchi Analisi strutturata Esercizi Informatica Andrea Frosini Informatica a.a. 06/07
Diagrammi a blocchi E’ un linguaggio formale di tipo grafico per rappresentare gli algoritmi Attraverso il diagramma a blocchi (o flow chart) si può indicare l’ordine di esecuzione delle istruzioni. Un particolare simbolo grafico detto blocco elementare è associato ad ogni tipo di istruzione elementare I blocchi sono collegati tra loro tramite frecce che indicano il susseguirsi delle istruzioni Informatica Andrea Frosini
Diagrammi a blocchi begin leggi x A C scrivi x end I blocchi elementari sono: begin leggi x A blocco iniziale blocco di lettura blocco di azione C scrivi x vero falso end blocco finale blocco di scrittura blocco di controllo Informatica Andrea Frosini
Diagrammi a blocchi Un diagramma a blocchi descrive un algoritmo se: ha un blocco iniziale e uno finale è costituito da un numero finito di blocchi azione e/o blocchi lettura/scrittura e/o blocchi di controllo ciascun blocco elementare soddisfa le seguenti condizioni di validità: ciascun blocco azione, lettura/scrittura ha una sola freccia entrante e una sola freccia uscente ciascun blocco di controllo ha una sola freccia entrante e due uscenti ciascuna freccia entra in un blocco o si innesta su una altra freccia ciascun blocco è raggiungibile dal blocco iniziale il blocco finale è raggiungibile da qualsiasi altro blocco Informatica Andrea Frosini
Esercizio Scrivere un algoritmo e rappresentarlo tramite un diagramma a blocchi per i seguenti problemi: attraversare la strada preparare la pasta calcolare l’area del triangolo determinare le radici di una eq. di 2° grado determinare la somma di due numeri Informatica Andrea Frosini
Analisi strutturata Analisi volta alla stesura di descrizioni di algoritmi tramite diagrammi a blocchi di tipo strutturato Un diagramma a blocchi strutturato è più comprensibile e modificabile In un diagramma strutturato non apparirà mai una istruzione di salto incondizionato Teorema di Bohm-Jacopini Ogni diagramma a blocchi non strutturato è sempre trasformabile in un diagramma a blocchi strutturato ad esso equivalente Due diagrammi sono equivalenti se partendo dagli stessi dati iniziali producono gli stessi risultati Informatica Andrea Frosini
Analisi strutturata Una descrizione è di tipo strutturato se i blocchi sono collegati tramite i seguenti schemi di flusso strutturato: schema di sequenza schema di selezione schema di iterazione Informatica Andrea Frosini
Analisi strutturata: schema di sequenza due o più schemi di flusso sono eseguiti in successione begin S1 Nota: lo schema di sequenza è strutturato se e solo se lo sono i blocchi S1 e S2 S2 end Informatica Andrea Frosini
Analisi strutturata: schema di selezione begin begin Schema di selezione: esiste un blocco di controllo che permette di scegliere quale schema di flusso debba essere eseguito tra due schemi, in funzione del valore di verità del controllo C C falso vero falso vero S1 S2 S1 end end Informatica Andrea Frosini
Analisi strutturata: schema di iterazione Schema di iterazione (ciclo o loop): modo conciso per descrivere azioni che devono essere ripetute begin begin S1 S1 C C vero falso falso vero end end Informatica Andrea Frosini
Analisi strutturata: schema di iterazione Nota: I due schemi non sono equivalenti: in un caso lo schema S1 è eseguito almeno una volta e nell’altro potrebbe non essere mai eseguito La condizione vero/falso per il controllo possono essere invertite: si parla di iterazione per vero quando S1 è eseguito finché la condizione su C è vera e iterazione per falso nell’altro caso Quando è necessario eseguire lo stesso insieme di operazioni per un numero specificato di volte si adotta un particolare schema di iterazione: inizia con una sequenza di azioni di assegnazione dette istruzioni di inizializzazione possiede sequenza di azioni (iterazione) che viene ripetuta per un numero specificato di volte Informatica Andrea Frosini
Analisi strutturata inizializzazione inizializzazione iterazione condizione di fine ciclo falso condizione di fine ciclo vero falso iterazione vero Informatica Andrea Frosini
Analisi strutturata Condizione di fine ciclo: viene controllata dopo l’esecuzione di ogni blocco di iterazione, può essere con controllo in coda al ciclo o in testa Un ciclo è detto enumerativo quando è noto a priori il numero di volte che deve essere eseguito Si usa un contatore di ciclo per controllarne l’esecuzione: si usa cioè una variabile che viene incrementata (o decrementata) fino a raggiungere un valore prefissato Informatica Andrea Frosini
Analisi strutturata Un ciclo è indefinito quando non è noto a priori il numero di volte che deve essere eseguito Questo accade quando la condizione di fine ciclo dipende dal valore di una o più variabili che o dipendono dall’interazione con l’esterno o vengono modificate all’interno dell’iterazione in modo complesso Informatica Andrea Frosini
Esercizi Svolti: 1. Ricerca di un elemento in un vettore 2. Determinare il massimo numero in un vettore 3. Media di un vettore 4. Fare il prodotto tra due numeri in ingresso utilizzando solo la somma 5. Stampa del resto della divisione intera tra due numeri (senza la funzione mod) Da svolgere: 6. Stampa dei multipli di un numero in ingresso minori di 100 7. Stampa della massima potenza minore di 100 di un numero in ingresso 8. Approssimazione intera, per eccesso, della radice quadrata di un numero in ingresso 9. Stampa il quoziente della divisione intera tra due numeri utilizzando solo la funzione differenza 10. Preso un numero x in input, se x<10 allora stampa “ciao” 5 volte, se x>20 allora stampa “evviva” x volte, altrimenti chiedi un numero y in input e stampa “salve” x-y volte, se x>y, y-x volte altrimenti. Informatica Andrea Frosini
Soluzione esercizio 1. Passo 1: per procedere alla soluzione dell’esercizio cerchiamo di avere ben chiaro il problema che dobbiamo affrontare. In special modo dobbiamo isolare: I dati in ingresso (variabili) che sono richiesti all’utente; I dati costanti che sono propri del problema; L’output richiesto per ciascun insieme di input. Per essere sicuri di aver compreso perfettamente il problema facciamo una serie di esempi calcolando alcuni output a partire da input diversi. Informatica Andrea Frosini
Soluzione esercizio 1. Passo 2: analizziamo il modo di risolvere il problema che abbiamo utilizzato durante gli esempi, chiarendo a noi stessi quali passi ci hanno portato ad una soluzione a partire dai dati in ingresso. SE I PASSI PER LA SOLUZIONE DEL PROBLEMA NON CI SONO ANCORA SUFFICIENTEMENTE CHIARI, TORNIAMO INDIETRO FACENDO ALTRI ESEMPI!!! Passo 3: Ciascun passo da noi trovato va infine tradotto in uno o più passi elementari, cioè passi che possono essere descritti tramite i blocchi a disposizione e gli schemi descritti in precedenza. Informatica Andrea Frosini
Soluzione esercizio 1: dettagli Relativamente all’esercizio 1 abbiamo: Passo 1: 1. Dati richiesti all’utente: a. Vettore (di numeri) all’interno del quale cercare il nostro elemento; b. Elemento (numero) che deve essere cercato. 2. Dati costanti del problema: a. Eventualmente la dimensione del vettore di ingresso, altrimenti nessuno Procediamo con un esempio: Input: Vettore=(2,5,43,72,0,26,2,4) Elemento = 26 Output: “Elemento trovato” Procedura: esamino il primo elemento del vettore, se è 26 dico “Elemento trovato”, altrimenti proseguo con il secondo elemento. Se il secondo elemento è 26 dico “Elemento trovato”, altrimenti passo al terzo elemento e così via fino alla fine degli elementi del vettore. Se l’elemento non è stato trovato dico “Elemento NON trovato” Informatica Andrea Frosini
Soluzione esercizio 1:dettagli Relativamente all’esercizio 1 abbiamo: Passo 2: Analisi e caratteristiche dell’algoritmo da noi descritto nella procedura di soluzione: 1. l’algoritmo presenta una parte nella quale si richiede di controllare tutti gli elementi del vettore. Questo immediatamente ci fa pensare alla presenza di un ciclo nel quale sarà necessaria una variabile che successivamente prenderà i valori delle posizioni del vettore, per tutta la sua lunghezza. 2. Tale ciclo dovrà terminare con esito positivo quando l’elemento è stato trovato, e con esito negativo quando la variabile di ciclo ha raggiunto la fine del vettore Passo 3: Avendo in mente le considerazioni fatte, si procede infine alla formalizzazione del diagramma di flusso come segue: Informatica Andrea Frosini
Soluzione esercizio 1: diagramma begin Passo 1, 1: dati in input dall’utente INPUT Vettore , Elemento i 0 dimensione Vettore K Passo 1, 1: costanti del problema i = K vero OUTPUT Elemento NON trovato i i+1 falso end Vettore [i] = Elemento falso vero OUTPUT Elemento trovato Informatica Andrea Frosini
Soluzione esercizio 1: diagramma Passo 2: ad ogni passo la variabile di ciclo i viene aumentata di 1 scorrendo gli elementi di Vettore begin Passo 2: la variabile di ciclo i arriverà fino alla fine di Vettore INPUT Vettore , Elemento i 0 dimensione Vettore K Passo 2: controllo se l’ i-esimo elemento del Vettore è quello cercato i = K vero OUTPUT Elemento NON trovato i i+1 falso end Vettore [i] = Elemento falso vero OUTPUT Elemento trovato Informatica Andrea Frosini
Soluzione esercizio 1: diagramma begin INPUT Vettore , Elemento i 0 i = dimensione Vettore vero OUTPUT Elemento NON trovato i i+1 falso end Vettore [i] = Elemento falso vero OUTPUT Elemento trovato Informatica Andrea Frosini
Soluzione esercizio 2: diagramma begin INPUT Vettore i 0 Max Vettore [ i ] i i+1 i = dimensione Vettore vero OUTPUT Max Max Vettore [ i ] falso Vettore [ i ] > Max end falso vero Informatica Andrea Frosini
Soluzione esercizio 3: diagramma begin INPUT Vettore i 0 Media 0 K dimensione Vettore i = K vero Media Media / K OUTPUT Media falso Media Media + Vettore [ i ] i i+1 end Informatica Andrea Frosini
Soluzione esercizio 4: diagramma begin INPUT X, Y i 0 Prod 0 i = Y vero OUTPUT Prod falso Prod Prod + X i i+1 end Informatica Andrea Frosini
Soluzione esercizio 5: diagramma begin Qui potrebbero essere eventualmente inseriti i controlli “Y diverso da 0” “X o Y negativi” INPUT X, Y X < Y vero OUTPUT X falso end X X - Y Informatica Andrea Frosini
Principali corrispondenze diagrammi di flusso – istruzioni VBA Blocco di azione: instanziare/aggiornare il valore di una variabile fare calcoli ecc… i <- 0 i <- i+1 V[4] <- 2*(3+5) i = 0; i = i+1; V[4]= 2*(3+5) Blocco di ingresso/uscita: prendere dati dall’esterno (l’utente li inserirà da tastiera) e memorizzarli in una variabile inviare in output a video una variabile o del testo x = inputbox (“Inserire x”) L’ingresso del vettore viene realizzato con un ciclo avente istruzione tipo Vett[i] = inputbox (“Elemento “ & i) IN x IN Vett OUT Vett[i] , x OUT “Ciao Pluto” msgbox Vett[i] & x msgbox “Ciao Pluto”
Principali corrispondenze diagrammi di flusso – istruzioni VBA Blocco di controllo: instanziare/aggiornare il valore di una variabile fare calcoli ecc… If V(i) = x*x then if i < 100 then msgbox “ciao” End if V[i] = x*x x = 8 +3 V V F F i < 100 x <- 5 OUT x F end end V OUT “ciao” If x = 8+3 then msgbox x else x = 5 End if
Principali corrispondenze diagrammi di flusso – istruzioni VBA Cicli: utilizzati tutte le volte che si deve ripetere più volte una stessa azione 1. Scorrere gli elementi di un vettore stampandoli i = k end i <- 0 k=dim Vett For i = 0 to k-1 msgbox “elemento ” & V(i) Next V F i <- i+1 OUT Vett[i] 2. Stampare i multipli di un numero in ingresso fino a 100 For i = 0 to 100/num msgbox i*num Next i*num < 100 IN num i <- 0 F V end i <- i+1 OUT i*num