[SOL] Esercizio n. 10 Selettive (10_selettive)
Spiegazione del Programma di Ordinamento
Questo programma in C++ ha lo scopo di ordinare tre numeri in ordine crescente utilizzando una tecnica chiamata "bubble sort semplificato".
Struttura del Programma
#include <iostream>
using namespace std;
int main() {
int a, b, c;
Inclusione delle Librerie e Dichiarazione Variabili
#include <iostream>permette di utilizzare le funzioni di input/output comecoutecinusing namespace std;evita di dover scriverestd::prima di ogni comando- Vengono dichiarate tre variabili intere:
a,b,c
Fase 1: Acquisizione dei Dati
cout << "Inserire tre numeri diversi tra loro: ";
cin >> a >> b >> c;
Il programma chiede all'utente di inserire tre numeri e li memorizza nelle variabili.
Fase 2: Controllo della Validità
while (a == b || a == c || b == c) {
cout << "I numeri devono essere diversi tra loro. Riprova: ";
cin >> a >> b >> c;
}
Come Funziona il Controllo
- Il ciclo
whilecontinua finché almeno una delle condizioni è vera:a == b: il primo numero è uguale al secondoa == c: il primo numero è uguale al terzob == c: il secondo numero è uguale al terzo
- L'operatore
||significa "OR logico" - Se i numeri non sono tutti diversi, il programma chiede di reinserirli
Fase 3: Algoritmo di Ordinamento
int temp;
if (a > b) {
temp = a;
a = b;
b = temp;
}
if (b > c) {
temp = b;
b = c;
c = temp;
}
if (a > b) {
temp = a;
a = b;
b = temp;
}
Come Funziona lo Scambio (Swap)
L'algoritmo utilizza una variabile temporanea temp per scambiare i valori:
- Primo confronto (
avsb): Sea > b, li scambia - Secondo confronto (
bvsc): Seb > c, li scambia - Terzo confronto (
avsb): Controllo finale per assicurarsi chea ≤ b
Esempio Pratico
Se inserisco i numeri: 7, 3, 5
- Passo 1:
a=7, b=3→7 > 3→ Scambio →a=3, b=7, c=5 - Passo 2:
b=7, c=5→7 > 5→ Scambio →a=3, b=5, c=7 - Passo 3:
a=3, b=5→3 < 5→ Nessuno scambio
Risultato finale: a=3, b=5, c=7 (ordine crescente)
Caratteristiche dell'Algoritmo
Punti di Forza
- Semplice da comprendere e implementare
- Funziona sempre con tre numeri
- Numero fisso di confronti (sempre 3)
Limitazioni
- Specifico per tre elementi (non scalabile)
- Non ottimale per un numero maggiore di elementi
- Codice ripetitivo che potrebbe essere semplificato
Questo approccio è ideale per imparare i concetti base dell'ordinamento e dello scambio di variabili!
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cout << "Inserire tre numeri diversi tra loro: ";
cin >> a >> b >> c;
// Controllo che i numeri siano effettivamente diversi
while (a == b || a == c || b == c) {
cout << "I numeri devono essere diversi tra loro. Riprova: ";
cin >> a >> b >> c;
}
// Ordinamento tramite confronti e scambi (swap)
int temp;
if (a > b) {
temp = a;
a = b;
b = temp;
}
if (b > c) {
temp = b;
b = c;
c = temp;
}
if (a > b) {
temp = a;
a = b;
b = temp;
}
// Output del risultato in ordine crescente
cout << "Numeri in ordine crescente: "