Rappresentazione con i diagrammi di flusso (Flow - chart) Questo tipo di rappresentazione grafica degli algoritmi, sviluppato negli anni ’50, utilizza una serie di simboli grafici dal contenuto evocativo che richiamano visivamente le principali operazioni all’interno di un algoritmo. Un flow - chart si costruisce combinando in modo opportuno i simboli grafici disponibili, in modo tale da riprodurre fedelmente l’evoluzione dell’algoritmo in tutte le sue diramazioni e possibilità. Introduciamo i principali simboli che verranno utilizzati per la rappresentazione degli algoritmi medianti i diagrammi di flusso. Azioni Connessioni Iniziatore / Terminatore Flusso logico Operazione / Processo Ricongiunzione di percorsi Selezione Ingresso / Uscita Caratteristiche della rappresentazione con i diagrammi di flusso Vantaggi • Permette di realizzare diagrammi intuitivi e di facile lettura. Svantaggi • • Incapacità di sintetizzare algoritmi complessi; Rappresentazione non immediatamente trasferibile in un linguaggio di programmazione. 3 Esempio 1 Descrivere utilizzando i diagrammi di flusso l’algoritmo che dati in ingresso il valore della base e dell’altezza di un rettangolo ne calcoli il perimetro e l’area. INIZIO ACQUISISCI b ACQUISISCI h Descrizione in linguaggio naturale 1. 2. 3. 4. 5. 6. 7. 8. Inizio. Acquisisci il valore della base b. Acquisisci il valore dell’altezza h. Calcola il perimetro del rettangolo p = 2 * ( b + h). Calcola l’area del rettangolo a = b * h. Stampa il valore del perimetro. Stampa il valore dell’area. Fine. p = 2 * (b + h) a=b*h STAMPA perimetro STAMPA area FINE Strutture base dei diagrammi di flusso FALSO Azione 1 VERO Condizione Azione 2 Azione 1 Azione 3 Azione 3 Azione 2 Azione 4 Sequenza Blocco di selezione 4 Azione Azione Condizione VERO FALSO Condizione FALSO VERO Ciclo While – Do Ciclo Repeat - Until Esempio 2 Descrivere utilizzando i diagrammi di flusso l’algoritmo che determina il valore maggiore tra due numeri m e n. Descrizione in linguaggio naturale INIZIO 1. 2. 3. 4. 5. 6. Acquisisci m Acquisisci n FALSO Inizio. Acquisisci m. Acquisisci n. Se m > n allora max = m altrimenti max = n. Stampa max. Fine. VERO m>n max = n max = m Stampa max FINE 5 Il modo con cui questo esecutore risolve il problema è molto diverso da quello seguito dall’esecutore umano. Questo esempio mette in luce che la struttura e la sequenza di operazioni che descrivono l’algoritmo sono funzione dell’esecutore. In particolare vengono messe in evidenza: • • le operazioni elementari in grado di eseguire; comprensione dell’algoritmo. Esempio 3 Descrivere utilizzando i diagrammi di flusso l’algoritmo che determina il valore maggiore tra tre numeri a, b, c. INIZIO Descrizione in linguaggio naturale 1. 2. 3. 4. ACQUISISCI a,b,c FALSO VERO a>b FALSO VERO 5. 6. FALSO b>c max = c VERO a>c max = b max = c 7. 8. Inizio. Acquisisci i valori di a,b,c. Se a > b allora prosegui al passo 6. Se b > c allora max = a altrimenti max = c. Salta al passo 7. Se a > c allora max = b altrimenti max = c. Stampa il valore massimo. Fine. max = a STAMPA max FINE Osservazioni 1. Non è possibile mettere in collegamento i rami di due blocchi di selezione sebbene richiedono l’esecuzione della stessa operazione. 2. Per verificare che l’algoritmo funziona correttamente si devono fare delle simulazioni del suo funzionamento utilizzando dei valori di prova di cui si conoscano le soluzioni. 3. Se esistono due rami dei blocchi di selezione con la stessa azione, probabilmente l’algoritmo che abbiamo realizzato non è il più efficiente (migliore). 6 Soluzione migliore INIZIO Descrizione in linguaggio naturale 1. 2. 3. 4. 5. 6. 7. ACQUISISCI a,b,c max = a FALSO Inizio. Acquisisci i valori a,b,c. Poni max = a. Se b > max allora poni max = b. Se c > max allora poni max = c. Stampa il valore massimo. Fine. VERO b > max max = b FALSO VERO c > max max = c STAMPA max FINE 7 Esempio 4 Descrivere utilizzando i diagrammi di flusso l’algoritmo che determina se un numero intero è pari o dispari. INIZIO Descrizione in linguaggio naturale 1. 2. 3. 4. Inizio. Acquisisci il numero intero n. Calcola il resto della divisione n / 2. Se il resto = 0 allora il numero è pari altrimenti è dispari. 5. Fine. ACQUISISCI n Calcola il resto della divisione n / 2 FALSO VERO resto = 0 Numero dispari Numero pari FINE Caratteristiche di un algoritmo Affinché un insieme di operazioni costituisca un algoritmo deve soddisfare i requisiti seguenti: • il numero di operazioni svolte nella soluzione deve essere finito e inoltre ogni singola operazione deve essere eseguita in un intervallo di tempo determinato; • ogni operazione deve essere descritta in modo preciso e non ambiguo; • deve essere deterministico ovvero, a partire dagli stessi dati iniziali, l’insieme delle operazioni deve sempre produrre i medesimi risultati; • deve essere eseguibile, ovvero deve esistere un esecutore, automatico o manuale, in grado di effettuare le operazioni che definiscono l’algoritmo; • deve essere comprensibile al suo esecutore • deve essere generale e quindi in grado di risolvere non un singolo problema, ma tutti quelli di una determinata classe. 8 LINGUAGGIO DI PROGETTO E’ una tecnica alternativa ai metodi grafici che consiste nel rappresentare i passi del processo risolutivo di un problema per mezzo di un linguaggio informale, simile a quello che usiamo abitualmente. Il linguaggio di progetto è chiamato anche pseudolinguaggio o linguaggio per la progettazione dei programmi o PDL ( acronimo di Program Design Language) Definizione Pseudocodice Si definisce pseudocodice l’insieme di frasi, scritte con linguaggio di progetto, che rappresentano (codificano) le operazioni da compiere nella risoluzione del problema. Ogni operazione è rappresentata mediante una oppure più parole chiave (keyword) il cui significato richiama il tipo di operazione codificata. Le parole chiave sono in genere scritte in inglese, a causa della diffusione, a livello internazionale, di questa lingua nell’ambito delle discipline scientifiche e tecniche. Le frasi devono essere definite in modo da soddisfare i requisiti generali degli algoritmi e quindi non in modo ambiguo. Le tecniche di rappresentazione degli algoritmi devono permettere di comunicare il lavoro svolto e, per questo motivo, risulta essenziale l’impiego di parole chiave nella lingua inglese. Un PDL con parole chiave in inglese può essere comunicato a programmatori di tutto il mondo e rappresenta il modo comune utilizzato su testi e riviste internazionali, che consente al futuro programmatore anche l’autoaggiornamento. Il lavoro di traduzione in inglese, risparmiato nella fase di progettazione, dovrà in tutti i casi essere svolto nella fase di codifica, perché i linguaggi di programmazione moderni non hanno parole chiave in italiano. Traduzione dei simboli grafici dei flow – chart in linguaggio di progetto (PDL) ALGORITMO Nome Assegna un nome simbolico all’algoritmo INIZIO FINE Leggi Dati Stampa Dati Operazione BEGIN END INPUT Dati OUTPUT Dati Descrizione dell’operazione a parole o in forma simbolica. (* Commento *) Il testo compreso tra i simboli (* e *) sono ignorati dall’esecutore e possono essere utilizzati per introdurre dei commenti al codice al fine di aumentarne la leggibilità. 9 Strutture di controllo in PDL Sequenza Azione 1 BEGIN Azione 1 Azione 2 Azione 3 Azione 2 END Azione 3 Blocco di selezione ad una via VERO FALSO Condizione IF ( condizione ) THEN Azione 1 ENDIF Azione 1 Blocco di selezione a due vie FALSO VERO Condizione Azione 2 Azione 1 IF ( condizione ) THEN Azione 1 ELSE Azione 2 ENDIF 10 Ciclo WHILE - DO WHILE ( condizione ) DO BEGIN Azione END Azione Condizione VERO FALSO Caratteristiche • ciclo con verifica della condizione all’ingresso; • il corpo del ciclo viene eseguito se la condizione risulta verificata; • il corpo del ciclo non viene mai eseguito se la condizione risulta subito falsa. Ciclo REPEAT - UNTIL REPEAT Azione UNTIL (Condizione) Azione Caratteristiche Condizione FALSO • ciclo con verifica della condizione all’uscita; • il corpo del ciclo viene eseguito se la condizione risulta falsa; • il corpo del ciclo viene eseguito almeno una volta anche se la condizione risulta subito verificata. VERO Esercizio 1 Algoritmo di calcolo del perimetro e area di un rettangolo. ALGORITMO Rettangolo BEGIN INPUT base,altezza perimetro ← 2 * base + 2 * altezza area ← base * altezza OUTPUT perimetro, area END 11