Problema esercizio in C Libretto universitario
L'esercizio richiedeva di verificare la frequenza dei voti presi nell'università.Per i voti ho usato la funzione rand() in modo tale da creare voti tra il 18 e il 31(31=30 e lode direttive del nostro professore) però sono sicuro che il mio problema è questa funzione.Ora chiedo a voi esperti del settore una mano!!!
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main() { int voto; int esame; int freq[14]={0}; int maxfreq; srand(time(NULL)); for (esame=0; esame<26; esame++) { voto=rand()%14+18; freq[voto]++; } printf("Voto\tFrequenza\n"); for (voto=18; voto<32; voto++) { printf("%d\t%d\n",voto,freq[voto]); } if( freq[voto]<freq[voto-1] ) { //freq[voto]=maxfreq; voto=maxfreq; } printf("MAX FREQ --> %d",maxfreq); printf("\n"); system("pause"); return 0; }
Risposte
"Ener":
Ora chiedo a voi esperti del settore una mano!!!

Una mano per cosa?
il codice è giusto???il compilatore non da errori ma il programma non svolge il suo lavoro......
Per prima cosa utilizza il tag code per inserire il codice in modo da renderlo più leggibile e di facile copiatura. Il modo migliore per ricevere una risposta utile è poi quello di fornire più informazioni possibili sul problema. Dal tuo primo post non eravamo per esempio in grado a priori di scartare un qualche errore di compilazione prima di copiarlo e compilarlo noi stessi. Dal tuo secondo post non siamo ancora in grado di fare ipotesi sul perché non svolga correttamente il suo lavoro senza metterci a fare delle prove con il tuo programma e quindi utilizzare parecchio tempo. Non siamo neanche in grado di stabilire se il problema è nel programma o nelle tue aspettative riguardo al programma (immagini debba restituire un risultato invece di un altro corretto).
Tornando però ora al tuo programma, noto subito un primo errore;
voto è compreso tra \(18\) e \(18 + 13 = 31\), mentre freq è un array di 14 valori (i cui indici validi vanno quindi da \(0\) a \(13\)). Le possibili soluzioni sono:
1. Allocare un array freq più grande contenente 32 valori;
2. Accedere all'array freq sottraendo 18 a voto.
Hai commesso questo errore ogni volta che hai utilizzato freq.
Tornando però ora al tuo programma, noto subito un primo errore;
freq[voto]
voto è compreso tra \(18\) e \(18 + 13 = 31\), mentre freq è un array di 14 valori (i cui indici validi vanno quindi da \(0\) a \(13\)). Le possibili soluzioni sono:
1. Allocare un array freq più grande contenente 32 valori;
2. Accedere all'array freq sottraendo 18 a voto.
Hai commesso questo errore ogni volta che hai utilizzato freq.
ok scusate per il tag code la prossima volta lo farò...
Per il resto ho risolto nel calcolo random dei voti allocando freq fino a 32 però ora il problema è che la frequenza non viene calcolata....Dove ho sbagliato???
Per il resto ho risolto nel calcolo random dei voti allocando freq fino a 32 però ora il problema è che la frequenza non viene calcolata....Dove ho sbagliato???
Nella seguente parte del codice credo che ci sia una parentesi graffa sbagliata:
Immagino che la selezione dovesse essere eseguita all'interno del ciclo e non all'esterno.
for (voto=18; voto<32; voto++) { printf("%d\t%d\n",voto,freq[voto]); } if( freq[voto]<freq[voto-1] ) { //freq[voto]=maxfreq; voto=maxfreq; }
Immagino che la selezione dovesse essere eseguita all'interno del ciclo e non all'esterno.
Non funziona lo stesso anche cambiando le parentesi.....ho chiesto anche ad altri miei amici e tutti mi hanno consigliato i puntatori ma purtroppo non il prof. non vuole
"Ener":
Non funziona lo stesso anche cambiando le parentesi.....ho chiesto anche ad altri miei amici e tutti mi hanno consigliato i puntatori ma purtroppo non il prof. non vuole
maxfreq
non è mai inizializzato.
se hai fatto modifiche ti consiglio di ricopiare di nuovo il codice.