Ecco alcuni esercizi che ti aiuteranno nell’apprendere meglio i cicli nei diagrammi di flusso.
Ciclo while
1. Scrivere un algoritmo, mediante i flow-chart, che calcoli il prodotto tra 5 numeri.
2. Scrivere un programma, usando i diagrammi di flusso, che registri le prime 3 entrate in un museo, indicando se la persona è minorenne o maggiorenne, e dicendolo in output ogni volta. Siccome non è possibile inserire stringhe, inserisci 1, se la persona è minorenne, e inserisci 2, se la persona è maggiorenne. Il programma deve contare il numero di minorenni e di maggiorenni entrati.
Ciclo while e do-while
3. Scrivere un algoritmo che calcoli la somma tra 2 numeri, per 5 volte. Uno dei due numeri deve essere positivo, e l’altro negativo (controllo dell’input). (Suggerimento: nella condizione, gioca un po’ con l’and e l’or (&& e ||) e con le parentesi). Visualizzare infine la somma totale.
4. Scrivi un algoritmo che prendendo un numero in input, visualizzi a schermo i suoi divisori. Esegui un controllo dell’input: il numero deve essere positivo. (Suggerimento: %);
Ciclo while, do-while e for
5. In una gara di cucina, Luca e Marco si sfidano davanti a 5 giudici. Ogni giudice dà un voto da 1 a 10 a entrambi i concorrenti. Scrivi un algoritmo, utilizzando i flow-chart, che determini il vincitore tra i due, considerando che il punteggio totale di una persona equivale alla somma dei punteggi dei 5 giudici. Prima si daranno i voti a Luca e poi a Marco. (Utilizza i cicli for)
6. Scrivere un algoritmo che trovi il massimo tra 5 numeri inseriti dall’utente. (Utilizza i cicli for)
Soluzioni
ESERCIZIO 1
Scrivere un algoritmo, mediante i flow-chart, che calcoli il prodotto tra 5 numeri.
Questo è uno degli esercizi più semplici da eseguire con i cicli. E’ molto simile a quello della somma, però ha una piccola particolarità.
Ecco la soluzione:

Come ben vedete, ho dovuto fare un inserimento fuori dal ciclo, e di conseguenza ho dovuto cambiare la condizione.
Perché questo? Perché per mettere l’inserimento e il calcolo del prodotto solo nel ciclo, sono costretto ad inizializzare la variabile. Ma se inizializzo la variabile a 0, il prodotto verrà sempre 0, dato che prende il valore precedente di prod per fare il calcolo, e siccome numero*0 è sempre uguale a 0, il prodotto non assumerà mai un valore diverso da 0.
Quindi, siccome ho dovuto fare un inserimento fuori dal ciclo, ho già svolto una volta l’istruzione, quindi nel ciclo rimane da fare altre 4 volte, ed i è inizializzato a 0.
ESERCIZIO 2
Scrivere un programma, usando i diagrammi di flusso, che registri le prime 3 entrate in un museo, indicando se la persona è minorenne o maggiorenne, e dicendolo in output ogni volta. Siccome non è possibile inserire stringhe, inserisci 1, se la persona è minorenne, e inserisci 2, se la persona è maggiorenne. Il programma deve contare il numero di minorenni e di maggiorenni entrati.
In questo caso abbiamo bisogno di 3 variabili contatore: una per il ciclo (numero di persone), una per il numero di minorenni e una per il numero di maggiorenni. Inoltre abbiamo bisogno di verificare ogni volta nel ciclo se la persona è minorenne o maggiorenne.
Soluzione:

ESERCIZIO 3
Scrivere un algoritmo che calcoli la somma tra 2 numeri, per 5 volte. Uno dei due numeri deve essere positivo, e l’altro negativo (controllo dell’input). (Suggerimento: nella condizione, gioca un po’ con l’and e l’or (&& e ||) e con le parentesi). Visualizzare infine la somma totale.
Qui il problema non sta nel fare la somma, con un classico ciclo while. La difficoltà per chi ha appena iniziato è la condizione.
Dobbiamo verificare se uno dei due numeri è positivo, e l’altro negativo.
Dovremmo usare un or (||) e due and (&&). La condizione sarà dunque:
(numero1<0 && numero2<0) || (numero1>0 && numero2>0).
Capiamo meglio. Siccome i numeri sono 2, le possibilità diverse sono 4:
- numero1 è positivo, numero2 è positivo
- numero1 è positivo, numero2 è negativo
- numero1 è negativo, numero2 è positivo
- numero1 è negativo, numero2 è negativo
Siccome la prima e l’ultima condizione sono quelle sbagliate, e il ciclo do-while lavora per condizione vera, allora il ciclo lavorerà (e quindi richiederà i due numeri) quando entrambi hanno lo stesso segno, ovvero quando sono entrambi positivi o entrambi negativi.
Ecco la soluzione finale:

ESERCIZIO 4
Scrivi un algoritmo che prendendo un numero in input, visualizzi a schermo i suoi divisori. Esegui un controllo dell’input: il numero deve essere positivo. (Suggerimento: %).
Attenzione alla consegna! Il numero deve essere positivo, quindi non può essere uguale a 0!
Come faccio a far capire al programma che un numero è un divisore di un altro numero? Con l’operatore % (mod). Se il resto della divisione tra un numero e un altro numero è uguale a 0, allora il numero più piccolo sarà uno dei divisori del numero più grande.
Capiamo meglio con un esempio: il numero 4.
Ovviamente il secondo numero deve incrementarsi ogni volta per capire se è divisore o no. Un’altra cosa fondamentale è inizializzare il counter a 1 e non a 0. Infatti non si può dividere per zero.
- 4%1==0? SI, allora 1 è uno dei divisori del 4, dato che tutti i numero sono divisibili per 1.
- 4%2==0? SI, allora 2 è uno dei divisori del 4.
- 4%3==0? NO, allora 3 NON è uno dei divisori del 4.
- 4%4==0? SI, allora 4 è uno dei divisori del 4, dato che tutti i numeri sono divisibile per se stessi.
Ecco quindi la soluzione:

ESERCIZIO 5
In una gara di cucina, Luca e Marco si sfidano davanti a 5 giudici. Ogni giudice dà un voto da 1 a 10 a entrambi i concorrenti. Scrivi un algoritmo, utilizzando i flow-chart, che determini il vincitore tra i due, considerando che il punteggio totale di una persona equivale alla somma dei punteggi dei 5 giudici. Prima si daranno i voti a Luca e poi a Marco. I voti sono inseriti dall’utente.
In questo caso abbiamo più opzioni: potremmo fare un unico ciclo, in cui c’è un contatore, che quando supera il numero 5 fa partire il contatore dei voti di Marco, con un IF.
Potremmo anche usare 2 cicli diversi, che è la soluzione che proporrò.

Come vedi ho controllato ogni volta il voto con un do-while.
Ricorda che tra le due condizioni (voto<1, voto>10) ci va un or (||) e non un and (&&), perché il voto deve essere o minore di 1, o maggiore di 10, per eseguire il ciclo. Con un and la condizione dovrebbe considerare numeri contemporaneamente minori di 1 e maggiori di 10, cosa che è impossibile.
ESERCIZIO 6
Scrivere un algoritmo che trovi il massimo tra 5 numeri inseriti dall’utente.
Questo esercizio è molto più semplice di quello di prima.
Funzionamento: il primo numero inserito è per forza il maggiore tra tutti, dato che è l’unico inserito, al momento. Lo si salva quindi in una variabile.
Ogni volta che si inserisce un numero lo si deve confrontare con il maggiore. Se il nuovo numero è maggiore del numero massimo, lo si salva nella variabile, al posto di quello vecchio. L’ultimo numero che si trova nella variabile del numero massimo è il maggiore.
Ecco la soluzione:

Siccome devo immediatamente salvare il numero con massimo, prima devo effettuare un inserimento fuori dal ciclo, e poi dentro il ciclo. Di conseguenza, il numero di cicli da effettuare sono 4 e non 5, dato che devo inserire il numero iniziale da salvare + altri 4 numeri.
Bene! Ora è il momento di imparare un tecnica che ti servirà anche in futuro. Dopo, troverai come ultimo argomento altri esercizi, senza soluzione, che puoi fare per allenarti maggiormente.