- Saper progettare e implementare algoritmi in un linguaggio di programmazione di alto livello.
- Utilizzare in modo corretto le strutture di controllo iterativo in base alle specifiche del problema.
- Analizzare e risolvere problemi gestendo la validazione dell'input dell'utente.
- Documentare il codice e utilizzare ambienti di sviluppo integrati (IDE) per il debugging.
L'istruzione do-while è una struttura di controllo iterativa definita post-condizionale. A differenza del ciclo while, che verifica la condizione prima di eseguire il corpo del ciclo, il do-while garantisce che il blocco di istruzioni venga eseguito almeno una volta.
Usa il do…while quando il blocco deve essere eseguito almeno una volta, indipendentemente dalla condizione.Sintassi del ciclo do-while:
do {
// Blocco di istruzioni da eseguire
} while (condizione);
Osservate bene la sintassi: il punto e virgola ; dopo la parentesi tonda della condizione è obbligatorio. Se viene omesso, il compilatore restituirà un errore di sintassi.
Differenze principali tra while e do-while:| Caratteristica | Ciclo while (Pre-condizionale) | Ciclo do-while (Post-condizionale) |
|---|---|---|
| Controllo condizione | All'inizio (test in testa) | Alla fine (test in coda) |
| Esecuzioni minime | Zero (se la condizione è subito falsa) | Almeno una volta |
| Utilizzo tipico | Quando non si sa quante volte ripetere | Validazione input e Menu di scelta |
Esempi
Leggere una stringa non vuota
string nome;
do {
cout << "Inserisci il tuo nome: ";
getline(cin, nome);
} while (nome.empty());
Generare numeri finché non si raggiunge una condizione
int x;
do {
x = rand() % 10;
cout << "Numero generato: " << x << endl;
} while (x != 5);
Chiedere all’utente di continuare
Questo è l’uso più classico del do…while: ripetere un’operazione finché l’utente lo desidera. La domanda deve essere posta almeno una volta, quindi il controllo dopo il blocco è perfetto.
char risposta;
do {
cout << "Vuoi continuare? (s/n): ";
cin >> risposta;
} while (risposta == 's' || risposta == 'S');
La validazione dell'input
Immaginiamo di dover chiedere all'utente un voto scolastico, che deve essere compreso tra 2 e 10. Con il do-while, continuiamo a chiedere il voto finché l'utente inserisce un valore errato.
int voto;
do {
cout << "Inserisci un voto (2-10): ";
cin >> voto;
} while (voto < 2 || voto > 10);
// Il ciclo continua se il voto è FUORI dall'intervallo valido
Validare una scelta dal menu
int scelta;
do {
cout << "Menu:\n";
cout << "1. Gioca\n";
cout << "2. Impostazioni\n";
cout << "3. Esci\n";
cout << "Scegli un'opzione (1-3): ";
cin >> scelta;
if (scelta < 1 || scelta > 3) {
cout << "Scelta non valida, riprova.\n";
}
} while (scelta < 1 || scelta > 3);
LABORATORIO
Gestione Magazzino e Validazione
In questo laboratorio applicheremo il ciclo do-while per creare un sistema di inserimento dati sicuro e un menu interattivo.
- IDE Dev-C++
- Compilatore MinGW (integrato in Dev-C++)
- Conoscenza degli operatori logici (||, &&)
1 Validazione Quantità Magazzino
In un software gestionale, non è possibile caricare una quantità negativa di merce. Seguite questi passaggi per creare il programma in Dev-C++:
- Aprite Dev-C++ e create un nuovo file sorgente (Ctrl+N).
- Definite la variabile intera quantita.
- Inserite la struttura do { ... } while (...);.
- All'interno del do, inserite il messaggio di richiesta input.
- Nella condizione del while, scrivete la condizione che mantiene attivo il ciclo (ovvero quando il dato è sbagliato: quantita < 0).
#include <iostream>
using namespace std;
int main() {
int quantita;
// Inizio ciclo di validazione
do {
cout << "Inserisci la quantita di prodotti in arrivo (maggiore di 0): ";
cin >> quantita;
if (quantita < 0) {
cout << "Errore! La quantita non puo essere negativa." << endl;
}
} while (quantita < 0);
cout << "Dato correttamente registrato: " << quantita << " pezzi." << endl;
return 0;
}
2 Menu Iterativo per carisco / scarico merci
Dopo aver validato la quantità iniziale, dobbiamo permettere all'utente di gestire il magazzino attraverso un menu interattivo. Il programma deve continuare a mostrare le opzioni finché l'utente non decide di uscire.
Obiettivi della fase 2:- Utilizzare una variabile scelta per navigare nel menu.
- Implementare un ciclo do-while principale che racchiuda le operazioni di modifica.
- Gestire l'incremento (carico) e il decremento (scarico) della merce.
- Controllo di realtà: Non è possibile scaricare più pezzi di quanti ne siano effettivamente presenti in magazzino.
#include <iostream>
using namespace std;
int main() {
int quantita, scelta, variazione;
// 1. Validazione input iniziale (fatta nel punto precedente)
do {
cout << "Inserisci la giacenza iniziale di magazzino: ";
cin >> quantita;
} while (quantita < 0);
// 2. Inizio Ciclo Menu
do {
cout << "\n--- GESTIONE MAGAZZINO (Attuale: " << quantita << " pezzi) ---" << endl;
cout << "1. Carico merce (Aggiungi)" << endl;
cout << "2. Scarico merce (Togli)" << endl;
cout << "3. Esci dal programma" << endl;
cout << "Scelta: ";
cin >> scelta;
switch(scelta) {
case 1:
do {
cout << "Quanti pezzi vuoi aggiungere? ";
cin >> variazione;
} while (variazione <= 0);
quantita = quantita + variazione;
cout << "Carico effettuato con successo!" << endl;
break;
case 2:
do {
cout << "Quanti pezzi vuoi togliere? ";
cin >> variazione;
if (variazione > quantita) {
cout << "Errore! Non puoi togliere piu di " << quantita << " pezzi." << endl;
}
} while (variazione <= 0 || variazione > quantita);
quantita = quantita - variazione;
cout << "Scarico effettuato con successso!" << endl;
break;
case 3:
cout << "Chiusura del sistema in corso..." << endl;
break;
default:
cout << "Opzione non valida! Riprova." << endl;
}
} while (scelta != 3); // Il ciclo continua finche l'utente NON preme 3
cout << "Giacenza finale salvata: " << quantita << " pezzi." << endl;
return 0;
}
Durante l'esecuzione su Dev-C++, prestate attenzione a come abbiamo annidato i cicli:
| Ciclo Esterno | Gestisce la persistenza del programma. Finché non scegliamo "Esci", il software non termina. |
| Cicli Interni | Vengono usati come "filtri" per ogni singola operazione, impedendo di inserire numeri negativi o quantità superiori alla disponibilità. |
3 Esercizio in autonomia: Gestione Bancomat
Siete stati assunti per sviluppare il modulo software di una nuova carta prepagata per studenti. Il programma deve permettere di gestire il borsellino elettronico in modo sicuro, impedendo operazioni non consentite.
Il software deve iniziare richiedendo il caricamento iniziale della carta (che non può essere negativo). Successivamente, deve mostrare un menu interattivo che permetta di eseguire diverse operazioni finché l'utente non decide di uscire.
Voci del Menu da sviluppare:- Visualizza Saldo: Mostra l'importo attualmente disponibile sulla carta.
- Ricarica: Permette di aggiungere credito.
- Pagamento Acquisto: Permette di scalare l'importo di un acquisto.
4 Esercizio in autonomia: Gestione Serbatoio Smart Agricolo
Immaginate di dover programmare il software di controllo per un serbatoio smart dedicato all'irrigazione di una serra tecnologica. Il sistema deve monitorare il livello dell'acqua e permettere operazioni di riempimento e svuotamento in totale sicurezza.
- Inizializzazione: Il programma richiede la capacità massima del serbatoio (es. 500 litri) e il livello attuale dell'acqua. Entrambi i valori devono essere positivi e il livello attuale non può superare la capacità massima (usare un do-while per la validazione).
- Menu di Controllo: Deve essere mostrato un menu ciclico con le seguenti opzioni:
| Opzione | Descrizione e Vincoli |
|---|---|
| 1. Stato Serbatoio | Visualizza i litri attuali e lo spazio libero rimanente. |
| 2. Rifornimento | Permette di aggiungere acqua. Vincolo: Non si può aggiungere una quantità che faccia traboccare il serbatoio. Se accade, l'operazione va annullata o corretta. |
| 3. Irrigazione | Permette di prelevare acqua per le piante. Vincolo: Non si può prelevare più acqua di quella disponibile. |
| 4. Esci | Termina il monitoraggio. |
Suggerimento: Per rendere il programma più professionale, ad ogni operazione di rifornimento o irrigazione andata a buon fine, stampate a video il nuovo livello raggiunto.