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. ACQUISISCI b ACQUISISCI h p = 2 * (b + h) 2. Acquisisci il valore della base b. 3. Acquisisci il valore dell altezza h. 4. Calcola il perimetro del rettangolo p = 2 * ( b + h). 5. Calcola l area del rettangolo a = b * h. 6. Stampa il valore del perimetro. 7. Stampa il valore dell area. 8. Fine. a = b * h STAMPA perimetro STAMPA area Strutture base dei diagrammi di flusso 3 3 4 Sequenza Blocco di selezione 4
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. Acquisisci m Acquisisci n 2. Acquisisci m. 3. Acquisisci n. 4. Se m > n allora max = m altrimenti max = n. 5. Stampa max. 6. Fine. m > n max = n max = m Stampa max 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. max = c b > c ACQUISISCI a,b,c a > b a > c max = b max = c max = a 2. Acquisisci i valori di a,b,c. 3. Se a > b allora prosegui al passo 6. 4. Se b > c allora max = a altrimenti max = c. 5. Salta al passo 7. 6. Se a > c allora max = b altrimenti max = c. 7. Stampa il valore massimo. 8. Fine. STAMPA max 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 ACQUISISCI a,b,c max = a b > max 2. Acquisisci i valori a,b,c. 3. Poni max = a. 4. Se b > max allora poni max = b. 5. Se c > max allora poni max = c. 6. Stampa il valore massimo. 7. Fine. max = b c > max max = c STAMPA max 7
Esempio 4 Descrivere utilizzando i diagrammi di flusso l algoritmo che determina se un numero intero è pari o dispari. ACQUISISCI n Calcola il resto della divisione n / 2 2. Acquisisci il numero intero n. 3. Calcola il resto della divisione n / 2. 4. Se il resto = 0 allora il numero è pari altrimenti è dispari. 5. Fine. resto = 0 Numero dispari Numero pari 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 Leggi Dati BEGIN END INPUT Dati Stampa Dati OUTPUT Dati Operazione 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 BEGIN 3 END 3 Blocco di selezione ad una via IF ( condizione ) THEN ENDIF Blocco di selezione a due vie IF ( condizione ) THEN ELSE ENDIF 10
Ciclo WHILE - DO WHILE ( condizione ) DO BEGIN END 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 UNTIL () Caratteristiche 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. 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