/* Carica i punteggi (da 1 a 10) di 2 prove effettuate da 3 concorrenti e determina la classifica sapendo che il punteggio totale di ogni concorrente e' dato dalla media aritmetica delle due prove. Si visualizzino con una tabella sia i risultati parziali che il punteggio finale di ogni concorrente. */ #include int main() { int num_concorrenti = 3; float prova1[num_concorrenti]; float prova2[num_concorrenti]; // Inserimento dei punteggi dei concorrenti. for (int i = 0; i < num_concorrenti; i++) { cout << endl << "Concorrente numero " << i+1 << endl; // Punteggio prima prova. do { cout << "Prima prova: "; cin >> prova1[i]; } while (prova1[i] < 1 || prova1[i] > 10); // Punteggio seconda prova. do { cout << "Seconda prova: "; cin >> prova2[i]; } while (prova2[i] < 1 || prova2[i] > 10); } // Calcolo della media per concorrente. float punteggio_finale[num_concorrenti]; for (int i = 0; i < num_concorrenti; i++) punteggio_finale[i] = (prova1[i] + prova2[i]) / 2; // Ordinamento (decrescente) degli array: `bubble sort' // (+ semplice come logica, - efficiente). // Si considerano gli elementi adiacenti: se sono gia' in ordine passo // alla coppia successiva, altrimenti li scambio. // L'array sara' ordinato, e verra' quindi cessata l'esecuzione delle // iterazioni, quando un intero ciclo interno (il `for') non compie // nessuno scambio di valori tra i due elementi adiacenti. // La variabile booleana `almeno_uno_scambio' segnalera' quando e' // stato compiuto almeno uno scambio. bool almeno_uno_scambio; // Poiche' alla fine del ciclo interno `for' l'elemento piu' piccolo // sara' senz'altro nell'ultima posizione, facciamo in modo che // il `for' successivo si fermi una posizione prima del precedente // (decrementando la variabile `num_concorrenti_dec'): // in questo modo si evitano confronti inutili. int num_concorrenti_dec = num_concorrenti; do { almeno_uno_scambio = false; for (int i = 0; i < num_concorrenti_dec - 1; i++) // Gli elementi adiacenti vengono confrontati ed eventualmente // si effettua lo scambio. if (punteggio_finale[i] < punteggio_finale[i+1]) { // `temp' e' una variabile di appoggio. float temp; temp = punteggio_finale[i]; punteggio_finale[i] = punteggio_finale[i+1]; punteggio_finale[i+1] = temp; temp = prova1[i]; prova1[i] = prova1[i+1]; prova1[i+1] = temp; temp = prova2[i]; prova2[i] = prova2[i+1]; prova2[i+1] = temp; almeno_uno_scambio = true; } num_concorrenti_dec--; } while (almeno_uno_scambio); // Stampa della tabella. cout << endl << endl << "\t \t \t *** CLASSIFICA ***" << endl << endl; for (int i = 0; i < num_concorrenti; i++) cout << "N. " << i+1 << ":\t" << prova1[i] << " " << prova2[i] << " ->\t " << punteggio_finale[i] << endl; return 0; }