Riempire array con controllo
ciao a tutti sto cercando di fare un programmino in C che legge 5 numeri inseriti da tastiera e li mette in un array.
dopo questo vorrei calcolare la media dei valori e la loro frequenza.
ho cominciato la prima parte con un ciclo for e ad ogni ciclo prelevo i numeri con scanf immettendoli nell'array.
pero gia qui mi blocco!
come posso mettere un controllo in modo che i numeri inseriti debbano essere compresi in un range tipo 1-10?
avevo pensato ad un if ma non so come implementarlo, mi aiutate gentilmente?
dopo questo vorrei calcolare la media dei valori e la loro frequenza.
ho cominciato la prima parte con un ciclo for e ad ogni ciclo prelevo i numeri con scanf immettendoli nell'array.
pero gia qui mi blocco!
come posso mettere un controllo in modo che i numeri inseriti debbano essere compresi in un range tipo 1-10?
avevo pensato ad un if ma non so come implementarlo, mi aiutate gentilmente?
Risposte
Nel caso in cui il numero non sia nel range che deve fare il codice? Richiedere nuovemente il numero, oppure inserire un numero di default?
Un do-while farebbe al caso tuo. 
EDIT:Scusa Vict85, non avevo visto la tua risposta.

EDIT:Scusa Vict85, non avevo visto la tua risposta.
Nel caso non sia nel range chiedere di reinserire il numero avvisando l utente
Si può fare con un do-while oppure con un for.
Con il for per esempio verrebbe qualcosa di questo tipo:
con il do-while lo lascio a te.
La versione con il do-while fa due operazioni in meno quando non entri del range ma lo scanf sovrasta ampiamente le performance quindi sono insignificanti.
Con il for per esempio verrebbe qualcosa di questo tipo:
for(int i = 0; i != 5; ++i) { int t; scanf("%d", &t); if( 0 < t && t < 10) a[i] = t; else { puts("Numero non valido ..."); --i; } }
con il do-while lo lascio a te.
La versione con il do-while fa due operazioni in meno quando non entri del range ma lo scanf sovrasta ampiamente le performance quindi sono insignificanti.
con il do while sono ancora in fase di studio e sto provando qualcosa su questo tipo di codice:
do
{
scanf("%d", &temp);
for (j = 0; j < SIZE1; j++)
array1[j] = temp;
} while((temp <= 10) && (temp >= 1));
non riesco a capire per ora il motivo per cui non va
do
{
scanf("%d", &temp);
for (j = 0; j < SIZE1; j++)
array1[j] = temp;
} while((temp <= 10) && (temp >= 1));
non riesco a capire per ora il motivo per cui non va
ecco 
do
{
scanf("%d", &temp);
if ((temp <= 10 ) && (temp >= 1))
array1[j] = temp;
else
{
printf("inserisci un voto valido");
return 1;
}
j++;
} while(j < SIZE1);
ovviamente sono agli inizi, questo codice funziona ma accetto critiche e consigli
buona giornata

do
{
scanf("%d", &temp);
if ((temp <= 10 ) && (temp >= 1))
array1[j] = temp;
else
{
printf("inserisci un voto valido");
return 1;
}
j++;
} while(j < SIZE1);
ovviamente sono agli inizi, questo codice funziona ma accetto critiche e consigli

buona giornata
SUL PRIMO CODICE: Sinceramente non capisco come tu possa pensare che quel codice faccia quello che richiede l'esercizio. Insomma: legge un valore intero e lo scrive in ogni elemento di un array lungo SIZE1, se questo elemento è nel range richiesto ripete il procedimento sovrascrivendo ogni elemento dell'array altrimenti esce.
SUL SECONDO: il codice è quasi corretto. Dovresti comunque usare il tag
Le correzioni:
SUL SECONDO: il codice è quasi corretto. Dovresti comunque usare il tag
[code][/code]
Le correzioni:
do { scanf("%d", &temp); if ((temp <= 10 ) && (temp >= 1)) { array1[j] = temp; j++; } else printf("inserisci un voto valido\n"); } while(j < SIZE1);
Grazie vict per l'aiuto ma non capisco la correzione, cioè io voglio che lui deve accettare solo valori nel range 1-10 con gli estremi compresi e non solo 1. Per il resto ho capito grazie
ho un'ulteriore richiesta legata sempre a questo piccolo esercizio:
adesso ho creato un nuovo array "frequenze" di 10 elementi che vorrei usare per immagazzinare gli incrementi dei vari voti, quindi stampare alla fine del programmino la frequenza dei vari voti.
ecco per fare questo ho usato uno switch case, nel mio caso ho 10 case quindi tutto sommato non tanto ripetitivo, ma nel caso avessi avuto centinaia di case era un problema.
la mia domanda e' avrei potuto incrementare l'array frequenze senza usare uno switch case?
forse con una funzione esterna?
grazie
adesso ho creato un nuovo array "frequenze" di 10 elementi che vorrei usare per immagazzinare gli incrementi dei vari voti, quindi stampare alla fine del programmino la frequenza dei vari voti.
ecco per fare questo ho usato uno switch case, nel mio caso ho 10 case quindi tutto sommato non tanto ripetitivo, ma nel caso avessi avuto centinaia di case era un problema.
la mia domanda e' avrei potuto incrementare l'array frequenze senza usare uno switch case?
forse con una funzione esterna?
grazie