Esercizi diagrammi di flusso

Esercizi diagrammi di flusso

Esercizi diagrammi di flusso – In questa lezione propongo alcuni esercizi sui diagrammi di flusso utilizzando l’istruzione di selezione, cioè l’istruzione se (if).

Esercizi diagrammi di flusso – Primo algoritmo

Il biglietto di ingresso ad un museo ha le seguenti tariffe. Per i bambini di età inferiore a 6 anni l’ingresso è gratuito (opzione 1), per gli studenti 8 euro (opzione 2), per i pensionati 10 euro (opzione 3), per tutti gli altri 15 euro (opzione 4). Creare un programma in cui l’utente inserisce un numero tra 1 e 4 e viene comunicato il prezzo relativo all’opzione scelta. Se il numero non è un’opzione valida viene mostrato un messaggio di errore (tipo il numero non corrisponde a nulla!).

Quindi in questo caso l’unico input da prendere è la variabile opzione che può avere il valore 1, 2, 3 oppure 4. Se si inserisce qualsiasi altro numero si visualizza un messaggio di errore.

Allora saranno necessari quattro if annidati in quanto dobbiamo considerare anche il caso in cui il numero non è tra 1 e 4.

Schematizziamo dunque la soluzione:

– se opzione vale 1 allora il biglietto è gratis.

– se opzione vale 2 allora il biglietto costa 8 euro.

– se opzione vale 3 allora il biglietto costa 10 euro.

– se opzione vale 4 allora il biglietto costa 12 euro.

– altrimenti si visualizza opzione non valida.

Per chi volesse consultarla, allego anche la pseudo-codifica:

PROG main
    IN op
    IF op==1
        OUT "Gratis"
    ELSE //if op==1
        IF op==2
            OUT "Paghi 8 euro"
        ELSE //if op==2
            IF op==3
                OUT "Paghi 10 euro"
            ELSE //if op==3
                IF op==4
                    OUT "Paghi 15 euro"
                ELSE //if op==4
                    OUT "Opzione non valida"
                END IF //op==4
            END IF //op==3
        END IF //op==2
    END IF //op==1
END PROG //main

Secondo algoritmo

Un insegnante decide di valutare il test di uno studente attribuendo un punteggio a ogni risposta esatta e assegnando un giudizio in base al punteggio totale ottenuto, secondo il seguente prospetto: da 0 a 30 insufficiente, da 31 a 60 sufficiente, da 61 a 90 buono e da 91 a 100 ottimo.
Dopo aver acquisito il punteggio ottenuto dallo studente nel test, si visualizzi in output il giudizio secondo le fasce di punteggio stabilite nella tabella sopra.

Quindi prendiamo in input la variabile p che sta per punteggio e controlliamo se:

– p è minore di 0 – Dato non valido

– p è minore o uguale a 30 – Insufficiente (N.B Facciamo senza a controllare se p è maggiore di 0 perché è scontato).

– p è minore o uguale a 60 – Sufficiente (N.B Facciamo senza a controllare se p è maggiore di 30 perché è scontato).

– p è minore o uguale a 90 – Buono (N.B Facciamo senza a controllare se p è maggiore di 60 perché è scontato).

– p è minore o uguale a 100 – Ottimo (N.B Facciamo senza a controllare se p è maggiore di 90 perché è scontato).

– altrimenti (se p è maggiore di 100) il dato non è valido.

Per risolvere l’algoritmo in questo modo sono necessari 5 if annidati.

Presento anche la pseudo – codifica per chi la volesse consultare:

PROG main
    IN p
    IF p<0
        OUT "dato non valido"
    ELSE //if p<0
        IF p<=30
            OUT "insufficiente"
        ELSE //if p<=30
            IF p<=60
                OUT "sufficiente"
            ELSE //if p<=60
                IF p<=90
                    OUT "buono"
                ELSE //if p<=90
                    IF p<=100
                        OUT "ottimo"
                    ELSE //if p<=100
                        OUT "Dato non valido"
                    END IF //p<=100
                END IF //p<=90
            END IF //p<=60
        END IF //p<=30
    END IF //p<0
END PROG //main

Più avanti svilupperemo tanti altri esercizi sui diagrammi di flusso.

Alcuni link utili

Indice tutorial diagrammi a blocchi

1 – Diagramma a blocchi

2 – Primi esercizi con i diagrammi di flusso (perimetro triangolo; area di un trapezio)

3 – Altro semplice esercizio sui flow chart (calcolare uno sconto)

4 – Area del cerchio

5 – Precedente e successivo di un numero

6 – Introduzione agli algoritmi di selezione

7 – Minore tra due numeri

8 – Maggiore fra tre numeri

9 – Algoritmo di selezione sugli angoli

Flow chart array

Flow chart array

In questo articolo ‘flow chart array‘ svilupperemo un array utilizzando i diagrammi di flusso (detti anche diagrammi a blocchi).

Ecco dunque il problema da sviluppare con i flow chart:

Creare innanzitutto un array di 10 elementi. Dopo chiedere in input un numero da inserire e la posizione in cui si desidera inserirlo. Quindi inserire il numero nella posizione richiesta e in tutte le altre inserire il numero 1.


Flow chart array – risoluzione con i diagrammi di flusso

Innanzitutto inseriamo la costante N uguale a 10 che sono gli elementi totali dell’array.

Quindi chiediamo in input un numero n e la posizione pos in cui inserirlo e su cui facciamo un controllo dell’input con il ciclo do-while, in modo tale che la posizione sia compresa tra 0 e 9.

Dopo con un semplice ciclo for che utilizza un indice i da 0 a 9, inseriamo in tutte le posizioni 1 e solo dove l’indice i è uguale a pos inseriamo il numero richiesto in input.

Utilizzeremo dunque queste istruzioni:

a[i]=1 e solo se i=pos a[i]=n;

Infine per visualizzare tutti i numeri usiamo nuovamente il ciclo for (potevamo anche stamparli nel ciclo for precedente, ogni volta che venivano inseriti).

Ecco dunque il diagramma di flusso:

array flow chart
vettori Algobuild


Allego anche lo pseudocodice:

PROG main
    ASSIGN N=10
    OUT "Quale valore vuoi inserire?"
    IN n
    DO_WHILE //pos>=0 && pos>=N
        OUT "Quale posizione?"
        IN pos
    END DO_WHILE pos>=0 && pos>=N
    FOR i=0; i<N; i=i+1
        IF i==pos
            ASSIGN a[i]=n
        ELSE //if i==pos
            ASSIGN a[i]=1
        END IF //i==pos
    END FOR //i=0; i<N; i=i+1
    FOR i=0; i<N; i=i+1
        OUT a[i]
    END FOR //i=0; i<N; i=i+1
END PROG //main

Questo è solo un semplice esempio di realizzazione di algoritmi sugli array con i flow chart, nei prossimi tutorial proporrò tanti altri esercizi.

Alcuni link utili

Indice argomenti diagramma a blocchi

Numeri primi da 1 a 100

Array con algobuild

Divisori di un numero con algobuild

Algoritmi di selezione sugli angoli

Algoritmi di selezione

Triangoli con algobuild

Fibonacci con algobuild

Serie buffa con algobuild

Numeri amicabili con algobuild

Numeri perfetti con algobuild

Massimo fra tre numeri

Minore fra tre numeri

Gioco indovina numero con i diagrammi a blocchi

Media dei numeri in un array

Media dei numeri in un array

Realizziamo in questa lezione un semplice algoritmo che calcola la media dei numeri in un array.

L’algoritmo è di facile implementazione, richiede all’utente di inserire 10 numeri e al termine del programma comunicare in output la media.


Sviluppo diagramma di flusso per la media dei numeri in un array

Per realizzare questo algoritmo iterativo e con l’uso degli array servono quindi le seguenti forme:

Ellisse per l’inizio e per la fine;

Parallelogramma per inserire l’input, ovvero in questo caso i 10 numeri dell’array e per visualizzare in output messaggi o risultati come ad esempio la media.

Rettangolo per effettuare le operazioni e gli assegnamenti;

Esagono per realizzare il ciclo for, nel quale si usa una variabile in tre parti della stessa istruzione: inizializzazione, condizione, aggiornamento.
Dove con inizializzazione si intente un assegnamento come ad esempio: i = 0.
Invece la condizione è una espressione booleana come ad esempio: i <10.
Infine l’aggiornamento è un assegnamento per calcolare ad esempio il valore successivo come: i=i+1. (attenzione non possiamo scrivere i++ come siamo abituati a fare nei linguaggi di programmazione).

Quindi inseriamo la costante N uguale a 10, perchè 10 sono gli elementi che si vogliamo inserire nell’array.

Inizializziamo la media a zero.

Dopo con un ciclo for inseriamo tutti gli elementi nell’array e li sommiamo nella variabile media. Potrei anche utilizzare due variabili diverse: somma e media, ma dato che la somma non viene utilizzata ulteriormente all’interno del programma, utilizzo solo la variabile media.

Poi calcolo la media dividendo il risultato della somma di tutti gli elementi per N.

Infine stampo in output il risultato.

Ecco dunque il diagramma a blocchi completo che rappresenta l’algoritmo per il calcolo della media dei numeri in un array.

media con diagrammi di flusso

Alcuni link utili

Indice argomenti diagramma a blocchi

Numeri primi da 1 a 100

Triangoli con algobuild

Fibonacci con algobuild

Serie buffa con algobuild

Area del cerchio con Algobuild

Numeri amicabili con algobuild

Numeri perfetti con algobuild

Massimo fra tre numeri

Minore fra tre numeri

Minore tra due numeri

Diagramma a blocchi

Esercizio con le iterazioni

Esercizio con le iterazioni

Affronteremo in questa lezione un altro esercizio con le iterazioni.

Utilizzeremo sempre il ciclo while, ma a breve vi dimostrerò come utilizzare altre strutture iterative come ad esempio il for.

Inserire 10 numeri e sommare solo quelli compresi tra 50 e 100.

In questo caso dobbiamo inserire dei numeri ma sommare solo quelli che sono compresi nell’intervallo [50,100].

Esercizio con le iterazioni – Primo procedimento

Innanzitutto assegniamo a conta e somma il valore 0. Modificate la somma nella versione nuova di Algobuild inserendo somma=0.0.

Dopo impostiamo la condizione conta <10 e finché questa condizione è vera eseguiamo queste istruzioni:

Inseriamo il numero n.

Controlliamo se n soddisfa la condizione richiesta utilizzando gli operatori logici. Nel caso specifico l’operatore && (and) che rende vera l’espressione, solo se entrambe le condizioni sono vere.

Se la condizione è vera sommiamo il numero, altrimenti niente.

Incrementiamo il contatore di 1.

Al termine del ciclo visualizziamo in output la somma così ottenuta.

somma intervallo


Esercizio con le iterazioni – Secondo procedimento

Innanzitutto assegniamo ad N il valore 10, che decrementeremo ad ogni numero inserito.

Poi inizializziamo la variabile somma a 0: somma=0. In quanto l’elemento neutro della somma è 0.

Impostiamo la condizione del while: N>0, cioè finché N è positivo eseguiamo queste istruzioni:

Inseriamo in input il numero n;

Dopo, con l’if (la selezione) facciamo un test per vedere se il numero preso in input è maggiore o uguale a 50 e contemporaneamente minore o uguale a 100. Utilizzeremo dunque questa istruzione: n>=50 && n<=100, utilizzando l’operatore logico and (&&). Se il numero è compreso nell’intervallo allora lo aggiungiamo alla variabile somma: somma=somma+n

Poi decrementiamo N di uno.

Al termine dell’iterazione procederemo a visualizzare il risultato, cioè la somma dei numeri compresi nell’intervallo [50,100].

Ecco il diagramma a blocchi dell’esercizio con le iterazioni proposto in questa lezione.

somma intervallo di numeri algobuild

Chiaramente la soluzione proposta all’esercizio con le iterazioni è solo uno dei possibili procedimenti risolutivi.

Alcuni link utili

Indice argomenti diagrammi a blocchi

Numeri primi da 1 a 100

Array con algobuild

Divisori di un numero con Algobuild

Algoritmi di selezione sugli angoli

Algoritmi di selezione

Triangoli con Algobuild

Fibonacci con Algobuild

Serie buffa con Algobuild

Numeri amicabili con Algobuild

Numeri perfetti con Algobuild

Massimo fra tre numeri

Minore fra tre numeri

Tabellina del 2

Tabellina del 2

Realizziamo un semplice diagramma a blocchi che rappresenti l’algoritmo per il calcolo della tabellina del 2.

Questo tipo di algoritmo lo sviluppiamo in maniera iterativa, cioè utilizzando i cicli.

Ci serve una variabile conta che parte da 0 e arriva fino a 11. Quando arriva ad 11 infatti uscirà dal ciclo senza calcolare nulla.

La variabile conta di volta in volta la moltiplichiamo per 2 e successivamente la incrementata di 1.

Quindi si avrà:

Primo passo:

numero=conta*2=0*2=0
conta=conta+1=0+1=1

Secondo passo:

numero=conta*2=1*2=2
conta=conta+1=1+1=2

Terzo passo:

numero=conta*2=2*2=4
conta=conta+1=2+1=3

e così via fino ad arrivare a 20.


Tabellina del 2 – primo procedimento

Sviluppiamo dunque una prima soluzione seguendo i passaggi spiegati nell’esempio precedente. Utilizziamo cioè la variabile conta che di volta in volta verrà moltiplicata per due.

Ad ogni iterazione stampiamo il numero così ottenuto.

Dopo incrementiamo la variabile conta di 1.

Ripetiamo il tutto fino ad ottenere il numero 20, ovvero 10*2.

Ecco il diagramma a blocchi, sviluppato con Algobuild, che determina l’algoritmo della tabellina del 2. L’algoritmo utilizza le strutture iterative.

tabellina

Tabellina del 2 – secondo procedimento

Proponiamo un’altra soluzione che non utilizza la variabile contatore:

In questo caso inizializziamo il numero a zero ed impostiamo l’uscita dal ciclo quando il numero raggiungerà 20 (2*10).

All’interno del ciclo incrementeremo il numero di 2 ogni volta.

Ecco dunque il diagramma a blocchi che rappresenta la seconda soluzione all’algoritmo per la tabellina del 2.

algoritmo tabellina

Questi sono solo dei semplici esempi di come realizzare un algoritmo che visualizzi la tabellina del 2.

Alcuni link utili

Indice argomenti diagramma a blocchi

Numeri primi da 1 a 100

Array con algobuild

Divisori di un numero con algobuild

Algoritmi di selezione sugli angoli

Algoritmi di selezione

Triangoli con algobuild

Fibonacci con algobuild

Serie buffa con algobuild

Numeri amicabili con algobuild

Numeri perfetti con algobuild

Massimo fra tre numeri

Minore fra tre numeri

Successivi di un numero

Successivi di un numero

In questa lezione implementeremo un algoritmo per il calcolo dei successivi di un numero.

Realizziamo un semplice diagramma a blocchi che rappresenti l’algoritmo per il calcolo dei 3 numeri successivi ad un numero preso in input.

Abbiamo già sviluppato questo algoritmo con la struttura sequenziale in questo articolo: precedente e successivo di un numero.

Adesso lo proponiamo con le strutture iterative, utilizzando i cicli.


Successivi di un numero – primo procedimento

Sviluppiamo una prima soluzione utilizzando il contatore i che si incrementa per ogni numero successivo calcolato.

Inizializziamo la variabile i a zero e inseriamo nel while il test: i<3. All’interno del ciclo calcoliamo i successivi e facciamo incrementare i di 1 per ogni successivo calcolato. Stampiamo i numeri così calcolati.

Quando i diventa 3 si esce fuori dal ciclo e si va nel ramo del falso. In questo caso non dobbiamo inserire nessun output nel ramo del falso.

Ecco dunque il diagramma a blocchi completo:

successivi diagramma a blocchi

Successivi di un numero – primo procedimento

Una seconda soluzione la otteniamo non utilizzando il contatore ma utilizzando una costante c a cui assegniamo il valore di n+3.

Quindi finché n non raggiungerà c continueremo a calcolare il successivo.

Ecco dunque il diagramma a blocchi completo:

successivi

Le forme che abbiamo utilizzato sono:

Ellisse per l’inizio e per la fine.

Rettangolo per le operazioni, in questo caso per il calcolo di c e dei successivi.

Rombo per il ciclo, in cui inseriamo la condizione n<c;

Parallelogramma per inserire l’input, ovvero il numero n e per visualizzare l’output, cioè i tre numeri successivi.

In questa lezione abbiamo sviluppato un semplice algoritmo per il calcolo dei successivi di un numero.

Alcuni link utili

Indice argomenti diagramma a blocchi

Numeri primi da 1 a 100

Array con Algobuild

Divisori di un numero con Algobuild

Algoritmi di selezione sugli angoli

Algoritmi di selezione

Triangoli con Algobuild

Fibonacci con Algobuild

Serie buffa con Algobuild

Numeri amicabili con Algobuild

Numeri perfetti con Algobuild