[C++]- Programma con array
Ciao a tutti
se è possibile vorrei qualche suggerimento in merito ad un programma che devo creare.
Devo fare un programma che in input abbia i voti di alcuni studenti e in output deve visualizzare la lettera corrispondente.
Per esempio: se il voto dello studente è compreso fra 0 e 50 allora a video devo visualizzare la lettera F e così via per gli altri voti.
Ho scritto un pò di pseudocodice per rendermi conto. In realtà avevo pensato di usare uno swicht - case, ma mi confondo perchè non riesco a "tradurre" in particolare, "voto compreso fra 0 e 50".
Qualche suggerimento che possa sbloccarmi?
grazie a chiunque mi illumini
se è possibile vorrei qualche suggerimento in merito ad un programma che devo creare.
Devo fare un programma che in input abbia i voti di alcuni studenti e in output deve visualizzare la lettera corrispondente.
Per esempio: se il voto dello studente è compreso fra 0 e 50 allora a video devo visualizzare la lettera F e così via per gli altri voti.
Ho scritto un pò di pseudocodice per rendermi conto. In realtà avevo pensato di usare uno swicht - case, ma mi confondo perchè non riesco a "tradurre" in particolare, "voto compreso fra 0 e 50".
Qualche suggerimento che possa sbloccarmi?
grazie a chiunque mi illumini

Risposte
Se gli intervalli contengono un numero così vasto di valori, ti sconsiglio di usare uno switch. Sarebbe infatti necessario scrivere uno switch lunghissimo con 50 case tutti uguali che restituiscono quella F. Qualcosa tipo:
Se ci sono 100 voti possibili dovresti scrivere 100 case. Due soluzioni molto migliori sono:
1. quella di usare dei semplici if
2. quella di usare un array che associa ad ogni voto la sua lettera. Se hai un totale di 100 voti e nei primi 51 devi stampare F, avrai allora un array di 100 elementi di tipo char in cui i primi 51 caratteri saranno uguali a F, e il successivo gruppo di voti immagino E e così via..
Personalmente preferisco il primo metodo a meno di necessità particolari (il secondo è per esempio preferibile se si vogliono evitare selezioni).
switch(voto) { case 0: case 1: // inserisci qua i case mancanti.. case 49: case 50: cout << "F\n"; break; case 51: // continua così per tutti gli altri possibili voti... }
Se ci sono 100 voti possibili dovresti scrivere 100 case. Due soluzioni molto migliori sono:
1. quella di usare dei semplici if
if (voto >= 0 && voto < 50) { cout << "F\n"; } else if (voto > 50 && // altri voti...
2. quella di usare un array che associa ad ogni voto la sua lettera. Se hai un totale di 100 voti e nei primi 51 devi stampare F, avrai allora un array di 100 elementi di tipo char in cui i primi 51 caratteri saranno uguali a F, e il successivo gruppo di voti immagino E e così via..
Personalmente preferisco il primo metodo a meno di necessità particolari (il secondo è per esempio preferibile se si vogliono evitare selezioni).
switch(voto/10) { case 0:case 1:case 2: case 3: case 4: case 5: cout <<"F\n"; break; .... }
ramy... 51 nel tuo codice è una 'F' anche se è maggiore di 50.
@ramy1989: Anche se è probabilmente possibile seguire una strada come la tua per ridurre il numero di casi nello switch, stai comunque cercando di mettere toppe ad un metodo che è di per se sbagliato. Lo switch non è stato pensato per questo tipo di usi e la sua implementazione si ridurrebbe in ogni caso a versioni inefficienti delle due che ho già elencato. Si tratta inoltre di un metodo poco flessibile (soprattutto il tuo) e modificare le classi diventa molto complicato. Le soluzioni normalmente preferibili sono quelle che ho elencato, con la principale alternativa rappresentata dall'uso di una qualche struttura dati ad albero.Il mio consiglio rimane quello di usare degli if.
Scusate se rispondo ora ma ho avuto problemi con il pc... grazie per le info vi farò sapere, avevo provato con l'if ma mi stampava sempre la F anche negli altri casi. Devo controllare cos'è che sbaglio 
Vi faccio sapere quanto prima, grazie mille a tutti per i suggerimenti

Vi faccio sapere quanto prima, grazie mille a tutti per i suggerimenti

Se ci mostri parte del tuo codice forse possiamo trovare questo errore e dirti cosa sbagli.