Esercizio cervellotico sui selection statements

di il
3 risposte

Esercizio cervellotico sui selection statements

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?

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte