[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 come cout e cin
  • using namespace std; evita di dover scrivere std:: 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 while continua finché almeno una delle condizioni è vera:
    • a == b: il primo numero è uguale al secondo
    • a == c: il primo numero è uguale al terzo
    • b == 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:

  1. Primo confronto (a vs b): Se a > b, li scambia
  2. Secondo confronto (b vs c): Se b > c, li scambia
  3. Terzo confronto (a vs b): Controllo finale per assicurarsi che a ≤ 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: "