Alla fine del capitolo sui "selection statements" (if, switch...) c'era questo esercizio apparentemente facile: "Scrivi un programma che legga 5 interi e li stampi in ordine ascendente".
La mia soluzione é questa:
/* Legge cinque numeri interi e li stampa in ordine ascendente */
#include <stdio.h>
int main(void)
{
int a, b, c, d, e;
int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0;
int primo, secondo, terzo, quarto, quinto;
printf("Inserisci cinque numeri interi (separati da uno spazio): ");
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
a >= b ? ++n1 : ++n2;
a >= c ? ++n1 : ++n3;
a >= d ? ++n1 : ++n4;
a >= e ? ++n1 : ++n5;
b >= c ? ++n2 : ++n3;
b >= d ? ++n2 : ++n4;
b >= e ? ++n2 : ++n5;
c >= d ? ++n3 : ++n4;
c >= e ? ++n3 : ++n5;
d >= e ? ++n4 : ++n5;
switch (n1) {
case 0: quinto = a; break;
case 1: quarto = a; break;
case 2: terzo = a; break;
case 3: secondo = a; break;
case 4: primo = a; break;
}
switch (n2) {
case 0: quinto = b; break;
case 1: quarto = b; break;
case 2: terzo = b; break;
case 3: secondo = b; break;
case 4: primo = b; break;
}
switch (n3) {
case 0: quinto = c; break;
case 1: quarto = c; break;
case 2: terzo = c; break;
case 3: secondo = c; break;
case 4: primo = c; break;
}
switch (n4) {
case 0: quinto = d; break;
case 1: quarto = d; break;
case 2: terzo = d; break;
case 3: secondo = d; break;
case 4: primo = d; break;
}
switch (n5) {
case 0: quinto = e; break;
case 1: quarto = e; break;
case 2: terzo = e; break;
case 3: secondo = e; break;
case 4: primo = e; break;
}
printf("%d %d %d %d %d", quinto, quarto, terzo, secondo, primo);
return 0;
}
Il mio codice funziona peró mi sembra esageratamente complicato per un problema cosí semplice: c'era per caso qualche altro metodo meno complicato che a me sfugge?