Problema esercizio in C Libretto universitario

Ener2
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
Rggb1
"Ener":
Ora chiedo a voi esperti del settore una mano!!!
:?:
Una mano per cosa?

Ener2
il codice è giusto???il compilatore non da errori ma il programma non svolge il suo lavoro......

apatriarca
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;
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.

Ener2
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???

apatriarca
Nella seguente parte del codice credo che ci sia una parentesi graffa sbagliata:
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.

Ener2
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

hamming_burst
"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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.