Attenzione! I programmatori inesperti tendono a introdurre numerosi salti privi di regole (“spaghetti programming”)
Blocchi di base
Regole
- uno ed un solo blocco START- uno ed un solo blocco STOP
- tutti gli archi devono avere origine e fine in un blocco
Diagrammi di flusso strutturati
- Un diagramma di flusso è detto strutturato se contiene solo un insieme predefinito di strutture:- sequenze
- decisioni
- IF-THEN-ELSE
- IF-THEN
- IF-THEN-ELSE
- cicli
- WHILE
- DO-WHILE
- WHILE
L’analisi analisi strutturata strutturata favorisce, la descrizione di algoritmi facilmente documentabili
e comprensibili
Teorema di Böhm – Jacopini
Qualunque diagramma di flusso è sempre trasformabile in un diagramma di flusso strutturato equivalente a quello dato.Sequenza
- Una sequenza è composta da una o più bocchi azione// inizio blocco sequenza Istruzione1; Istruzione2; // fine blocco
IF-THEN
- È presente solo la condizione vera- I due rami vero e falso si devono ricongiungere
// inizio blocco IF-THEN if(condizione) { Struttura1; } // fine blocco
IF-THEN-ELSE
- È presente sia la condizione vera che la condizione falsa- Condizione vera e falsa si devono ricongiungere
// inizio blocco IF-THEN if(condizione) { Struttura1; } else { Struttura2; } // fine blocco
IF-THEN-ELSE nidificati
- Si ottengono nidificando dei blocchi IF-THEN-ELSE// inizio blocco IF-THEN-ELSE nidificati if(condizione1) { Struttura1; } else { if(condizione2) { Struttura2; } else { if(condizione3) { Struttura3; } else { Struttura4; } } } // fine blocco
IF-ELIF--ELSE / SWITCH-CASE
- Non sono strutture fondamentali - Si possono ottenere con dei blocchi IF-THEN-ELSE nidificati# esempio in bash #inizio blocco if-elif-else-fi if [ condizione1 ]
then Struttura-1;
elif [ condizione2 ]
then Struttura-2; elif [ condizione3 ]
then Struttura-3; else Struttura-4; fi #fine blocco
// inizio blocco SWITCH-CASE // inizio blocco IF-ELIF-ELSE if(condizione1) { Struttura-1; } else if(condizione2) { Struttura-2; } else if(condizione3) { Struttura-3; } else { Struttura-4; } // fine blocco
// inizio blocco SWITCH-CASE switch(numero) { case 0: Struttura-1; break; case 1: Struttura-2; break; case 2: Struttura-3; break; default: Struttura-4; break; } // fine blocco
IF-ELSE
- Non è consentito, perchè non è necessario- Basta invertire la condizione e quindi usare un blocco IF-THEN
// Blocco IF-ELSE if(condizione) { ; // Nessuna istruzione } else { Struttura1; } // invertendo la condizione diventa if(!condizione) { Struttura1; }
WHILE-DO
- la parte ciclica viene eseguita quando la condizione è vera- un ciclo WHILE-DO può essere eseguito zero o più volte
- viene eseguito zero volte quando la condizione è subito falsa
Nei linguaggi C, Javascript, ...
// Blocco WHILE while(condizione) { Struttura; }
In Bash
#!/bin/bash
i=0
while [ $i -lt 10 ]; do
echo $i
i=$(( $i + 1))
done
echo “Done counting”
DO-WHILE
- un ciclo DO_WHILE viene sempre eseguito almeno una volta- la parte ciclica viene eseguita quando la condizione è vera
// Blocco DO-WHILE do { Struttura; } while(condizione);
FOR
- Non è una struttura fondamentale- La struttura iterativa FOR si ottiene utilizzando un ciclo WHILE-DO
// inizio blocco for for(int i=1; i<10; i++) { Struttura; }
//Ciclo for usando il while int i=1; while(i<10) { Struttura; i++; }
Verifica che il grafo sia strutturato
1. etichettare ogni blocco 2. sostituire ad ogni insieme strutturato un blocco avente come etichetta l’unione delle etichette dei blocchi che lo costituiscono 3. se al passo 2 si è fatta almeno una sostituzione, ripetere il passo 2 4. se alla fine si ottiene un diagramma lineare (una sequenza), allora il diagramma originale è strutturatoEsempio di diagramma non strutturato
Riferimenti
- http://it.wikipedia.org/wiki/Programmazione_strutturata- http://security.polito.it/~lioy/12bhd/programmare.pdf
- http://disi.unitn.it/~agiordani/mat/2-flowchart.pdf
Link
- https://www.draw.io/
Prima pubblicazione 8 mar 2015
Link
- https://www.draw.io/
Prima pubblicazione 8 mar 2015
Ciao Billy, molto interessante!
RispondiElimina