Realizziamo un algoritmo per il calcolo del valore massimo fra tre numeri presi in input, ovvero il numero maggiore.
Per risolvere l’algoritmo utilizziamo dunque queste forme:
Ellisseper l’inizio e per la fine
Parallelogramma per inserire l’input, ovvero in questo caso i tre numeri A e B e C e per visualizzare in output il valore massimo fra i tre numeri.
Romboper le effettuare un test che può essere vero o falso.
Il Rettangolo in questo caso non serve perché non dobbiamo fare nessuna operazione.
Procedimento
Innanzitutto prendiamo in input i tre numeri: A, B e C. Dopo effettuiamo il test A>B cioè ci chiediamo A è maggiore di B?
Abbiamo allora due possibilità:
1. Se il test è veropossiamo tralasciare B e confrontare A con C.
Ci servirà dunque un altro rombo per effettuare il secondo test.
Inseriamo all’interno del rombo la condizione A>C.
Se A è maggiore di C ovviamente A è il maggiore, altrimenti il maggiore è C.
2. Se il test iniziale (A>B) è falsoallora vuol dire che A è minore di B, quindi sicuramente A non sarà il maggiore, pertanto confronto B con C, in questo modo: B>C.
Se Bè maggiore diC allora il maggiore è B, altrimenti il maggiore è C.
Ecco dunque il diagramma a blocchi che rappresenta l’algoritmo:
L’algoritmo si può risolvere anche in un altro modo. Ad esempio utilizzando gli operatori logici.
Esempio 2 – massimo fra tre numeri
In questa soluzione utilizziamo l’operatore && che sta per and, cioè la funzione logica E.
Poniamo come prima condizione che A sia maggiore di B e contemporaneamente che A sia maggiore di C. Dunque in questo modo: A>B && A>C.
Se tale condizione è vera chiaramente A è il maggiore.
Altrimenti se A>B && A>C è falsa, vuol dire che A non può essere il maggiore, perché chiaramente non è comunque maggiore di entrambi. Dunque possiamo escludere A dal prossimo confronto e valutare solo B e C.
Quindi controlliamo solo se B è maggiore di C e se tale condizione è vera il massimo sarà B, altrimenti il massimo sarà C.
Esempio 3 – massimo fra tre numeri
Propongo un’altra soluzione che utilizza una variabile MAX dove memorizziamo il primo valore preso in input A.
Dunque se B è maggiore di MAX sostituisco il valore, altrimenti non faccio nulla in quanto MAX è più grande.
Dopo controllo se C è maggiore di MAX e se vero sostituisco il valore, altrimenti come prima vuol dire che MAX è il maggiore.
Ecco la soluzione realizzata con Algobuild:
Chiaramente ci possono essere altre soluzioni. Dite pure la vostra.
Realizziamo un algoritmo per il calcolo del minore tra due numeri presi in input, ovvero il numero più piccolo.
Esempio 1
Per risolvere l’algoritmo serviranno dunque queste forme:
Ellisseper l’inizio e per la fine
Parallelogramma per inserire l’input, ovvero in questo caso i due numeri A e B e per visualizzare in output il minore tra i due numeri.
Romboper le effettuare un test che può essere vero o falso. In questo caso si chiede: A è minore di B? Se il test è vero il minore tra i due numeri è A, altrimenti il minore è B.
Il Rettangolo in questo caso non serve.
In figura sotto ho inserito il diagramma a blocchi che rappresenta l’algoritmo per il calcolo del minore tra due numeri presi in input, realizzato con i diagrammi a blocchi.
Ho utilizzato due output su ciascun ramo:
output: “il minore è” – le virgolette sono necessarie perché dobbiamo stampare una frase
output: A – le virgolette non sono necessarie perché dobbiamo stampare una variabile.
Esempio 2 – Minore tra due numeri
Possiamo perfezionare il problema e controllare se i due numeri presi in input sono uguali. Solo se questa condizione è falsa allora si passa a calcolare il minore tra i due.
Per risolvere l’algoritmo sono necessari due rombi.
I rombi, che corrispondono all’istruzione if (se), sono strutture che si possono annidare l’una all’interno dell’altra.
Dunque nel primo rombo si confrontano se i due numeri sono uguali e se vero si stampa il messaggio: “i numeri sono uguali”. Se invece la condizione è falsa si usa un secondo rombo per testare chi è più piccolo dell’altro come fatto sopra.
N.B. Si usa il doppio uguale per fare il confronto tra A e B. Ricordiamo che un solo uguale è l’operatore di assegnamento.
Ecco, in figura sotto, il diagramma a blocchi che rappresenta l’algoritmo per il calcolo del numero più piccolo tra due numeri presi in input, realizzato con Algobuild.
Realizziamo un semplice diagramma a blocchi che calcoli l’area del cerchio e la sua circonferenza conoscendo il raggio.
Per risolvere l’algoritmo serviranno queste forme:
Ellisseper l’inizio e per la fine.
Rettangolo per le operazioni, in questo caso per calcolare l’area e per inserire il valore della costante PiGreco.
Parallelogramma per inserire l’input, ovvero il raggioe per visualizzare l’output, cioè l’areae la circonferenza.
Ricordiamo che l’area del cerchio è il prodotto tra PiGreco e il quadrato del raggio, mentre la circonferenza è il prodotto tra PiGreco e il doppio del raggio.
PiGreco è un valore costante e nella risoluzione dell’algoritmo useremo il suo valore approssimato a 3,14.
N.B. La costante non va mai presa in input, in quanto non è un valore che si deve acquisire da tastiera, ma deve essere inserita come assegnamento, nel rettangolo.
Ecco dunque il diagramma a blocchi che calcola l’area del cerchio e la sua circonferenza, sviluppato con Algobuild.
Notate che nell’output non si devono mettere le virgolette, come ho già spiegato nel precedente articolo.
Realizziamo adesso un altro esempio.
Secondo esempio – Area del cerchio con i flow chart
Calcolare l’area del cerchio prendendo in input la circonferenza.
In questo caso devo utilizzare la seguente formula:
Area= C*C/(4*PiGreco)
Per risolvere l’algoritmo serviranno queste forme:
Ellisseper l’inizio e per la fine.
Rettangolo per le operazioni, in questo caso per calcolare l’area e per inserire il valore della costante PiGreco.
Parallelogramma per inserire l’input, ovvero lacirconferenza e per visualizzare l’output, cioè l’area del cerchio.
Ecco quindi il diagramma a blocchi che calcola l’area del cerchio, prendendo in input la circonferenza, sviluppato con i flow chart.
Il diagramma a blocchi è uno schema a blocchi utilizzato per rappresentare gli algoritmi.
Il diagramma a blocchi è definito anche diagramma di flusso o flow chart ed è una rappresentazione grafica che utilizza delle forme geometriche per descrivere gli algoritmi.
Definizione di algoritmo
Un algoritmo non è altro che una sequenza ordinata e finitadi passi semplici che consentono di portare a termine un compito, talvolta complesso.
Esempi di algoritmi ne troviamo tantissimi, anche nella vita di tutti i giorni. Ad esempio anche la semplice procedura che facciamo per fare una chiamata telefonica è composta da una sequenza ordinata e finita di passi e dunque si definisce algoritmo.
1 Accendere il telefono
2 Se il numero è già memorizzato in rubrica andare nella rubrica e selezionarlo
3 Altrimenti andare nel tastierino numerico e digitare il numero
4 Premere l’icona della cornetta per avviare la chiamata
Anche la procedura per preparare il caffè è un algoritmo e si può rappresentare con una sequenza ordinata e finita di passi.
E così tanti altri esempi.
Quindi, l’insieme dei passi che consentono di risolvere un problema prende nome di algoritmo.
Diagramma a blocchi o flow chart
Ci sono tanti modi per rappresentare un algoritmo, un metodo molto utilizzato è quello basato sui diagrammi a blocchi, conosciuti anche con il nome di flow chart (letteralmente diagrammi di flusso).
Sono dunque utilizzati dei blocchi, cioè delle forme geometriche e ciascuna di essa ha un significato ben preciso.
Le tipologie di blocchi convenzionalmente utilizzate sono:
Ellisse
L’ellisse è utilizzata semplicemente solo per indicare l’inizio e la fine di un diagramma a blocchi.
Quindi ciascun diagramma inizierà con il blocco inizio e terminerà, dopo aver risolto il compito assegnato, con il blocco fine.
Parallelogramma
Il parallelogramma è utilizzato per prendere dei dati in INPUTo per visualizzare dei dati in OUTPUT. Nel caso in cui deve prendere dei dati in input è consigliabile inserire una I in alto a sinistra, seguita dai due punti. Similmente per l’output, che si è soliti indicare con una O in alto a sinistra, sempre seguita dai due punti.
Rettangolo
Il rettangolo è utilizzato per eseguire dei calcoli, ovvero per elaborare dei dati. Ad esempio per calcolare la somma tra due numeri o l’area di un rettangolo o ancora la media fra tre numeri, ecc…
Rombo
Il rombo è utilizzato per le istruzioni condizionali, ovvero per porre una domanda. All’interno dunque viene fatto un test, per cui si valuta una condizione che può essere o vera o falsa, quindi si sceglie tra due strade diverse. Un esempio di semplice test potrebbe essere quello di vedere se un numero è positivo o negativo.
Il rombo viene spesso utilizzato anche per i cicli while e do-while.
I cicli sono delle strutture iterative che hanno lo scopo di ripetere più volte una o più istruzioni contenute al loro interno.
Quindi in base a ciascun problema si sceglierà quali e quanti forme utilizzare.
Prima di procedere con degli esempi pratici, diamo altre importanti definizioni.
Definizione di variabili e costanti
Le variabilisono aree di memoria Ram dove vengono memorizzati i dati e che possono essere cambiati durante l’esecuzione di un’applicazione.
Le costantiinvece contengono un valore non modificabile.
Per entrambe è opportuno dare dei nomi sensati, non troppo lunghi e non separati da spazi.
Esempi di diagramma a blocchi
Sviluppiamo alcuni semplici algoritmi.
Area del quadrato realizzata con un diagramma a blocchi
Prendere in input il lato di un quadrato, calcolare e visualizzare l’area.
Per risolvere l’algoritmo serviranno queste forme:
Ellisse per l’inizio e per la fine;
Rettangolo per le operazioni, in questo caso per calcolare l’area;
Parallelogrammaper inserire l’input, in questo caso il lato e per visualizzare l’output cioè l’area.
Noterete che il calcolo dell’area, ovvero il prodotto di lato x lato, è stato memorizzato in una variabile che ho chiamato area, un nome breve e significativo.
N.B. Nell’output abbiamo messo semplicemente la variabile area senza virgolette. C’è una grande differenza:
se nell’output metto area, senza utilizzare le virgolette, allora si visualizza la variabile che contiene il valore memorizzato;
se nell’output metto “area”, allora si stamperà la parola area e non il valore. In pratica con la dicitura “area” non ci stiamo riferendo ad una variabile.
Area del quadrato realizzata con un diagramma a blocchi – secondo esempio
Dato il perimetro calcolare e visualizzare l’area di un quadrato.
Per risolvere l’algoritmo serviranno queste forme:
Ellisseper l’inizio e per la fine;
Rettangoloper le operazioni, in questo caso per ricavare il lato;
Parallelogramma per inserire l’input (in questo caso il perimetro) e per visualizzare l’output cioè l’area.
Utilizziamo la variabile lato per memorizzare l’operazione perimetro/4.
Algoritmo con i diagramma a blocchi
Determinare e visualizzare se una persona è maggiorenne prendendo in input i suoi anni.
Per risolvere l’algoritmo serviranno queste forme:
Ellisseper l’inizio e per la fine;
Romboper effettuare un test che può essere vero o falso. In questo caso si chiede: anni è maggiore o uguale a 18? Quindi si avranno due possibili strade;
Parallelogramma per inserire l’input, ovvero gli anni e per visualizzare l’output;
In questo caso l’output cambierà in base alla condizione, se anni è maggiore o uguale a 18 allora si visualizzerà “sei maggiorenne”, altrimenti se tale condizione è falsa si visualizzerà “non sei maggiorenne”.
N.B. Notate l’uso delle virgolette. In questo caso sono necessarie in quanto non devo stampare una variabile ma una frase, una stringa.
Per realizzare gli algoritmi con i diagrammi a blocchi si può semplicemente utilizzare un foglio oppure un software gratuito come ad esempio Algobuild.
Continuiamo a proporvi alcuni esercizi sui flow chart. Ricordiamo che i flow chart sono un modo per rappresentare graficamente un algoritmo.
Grazie ai flow chart si riesce ad avere una visione d’insieme del procedimento da seguire, che può essere poi sviluppato in vari linguaggi di programmazione.
Per lo sviluppo del flow chart possiamo utilizzare un semplice foglio di carta o un programma. Trovo molto utile Algobuild in quanto consente di trovare facilmente il punto in cui si commettono errori. Inoltre genera in maniera automatica la pseudo-codifica dell’algoritmo.
Esercizi sui flow chart – sconto
Data in input la spesa totale in un negozio di abbigliamento, determinare l’importo da pagare sapendo che alla cassa viene applicato uno sconto del 30%.
Per risolvere l’algoritmo dobbiamo quindi prendere in input la spesa totale. Inoltre, per migliorare l’usabilità dell’algoritmo inseriamo il valore dello sconto in una costante, ad esempio di nome S. Infatti, sarà più semplice in un secondo momento andare a variare i dati di input che in automatico faranno cambiare i restanti dati.
Quindi nella costante S memorizzo 0.3. Dopo calcolo il totale da pagare utilizzando questa semplice formula:
totale=spesa-spesa*S.
Per lo sviluppo dell’algoritmo serviranno dunque queste forme:
Ellisseper l’inizio e per la fine.
Rettangolo per le operazioni, in questo caso per calcolare il totale da pagare e per assegnare alla costante S la percentuale di sconto da applicare.
Parallelogrammaper inserire l’input, ovvero la spesa e per visualizzare l’output, cioè il totale da pagare.
Ecco dunque la risoluzione dell’esercizio sui flow chart:
Ecco la pseudo-codifica generata da Algobuild:
PROG main
IN spesa
ASSIGN S=0.3
ASSIGN totale=spesa-spesa*S
OUT totale
END PROG
Per la risoluzione del seguente algoritmo potrei anche moltiplicare direttamente il prodotto per 0.7.
Quindi creiamo una variabile S dove memorizziamo 0.7 e poi applichiamo la formula:
totale=spesa*S.
Inoltre, dato che la variabile spesa non la riutilizzo posso usare sempre la stessa:
spesa=spesa*S.
Nella prossima lezione propongo altri esercizi sui flow chart.