ESERCIZIO IN C - MATRICE

di il
23 risposte

ESERCIZIO IN C - MATRICE

Salve. Sto riscontrando svariati problemi riguardanti la media di ogni singolo studente e la media totale di ogni prova di tutti i studenti. Non capisco come risolverli.

/*Una classe composta da 32 studenti ha sostenuto durante l’anno 5 compiti in 
classe. Scrivere un programma che calcoli la media dei voti ottenuti dagli 
studenti*/

#include<stdio.h>
#include <stdlib.h>
#define RIG 40
#define COL 10

int main() {
    float M[RIG][COL];
    int R,C,i,j,somma_studente[RIG],somma_compiti[COL];
    float media_studente[RIG],media_compiti[COL];
            
    printf("Inserire il numero di studenti che hanno sostenuto le prove: ");
    scanf("%d",&R);
    
    printf("Inserire il numero di compiti svolti durante l'anno: ");
    scanf("%d",&C);
    
    /*Costruzione della matrice*/
    for(i=0;i<R;i++){
        printf("Immettere le valutazioni per il seguente studente %d\n",i+1);
        for(j=0;j<C;j++) {
            printf("Quali sono le valutazioni per il seguente studente %d? ",i+1);
            scanf("%f",M[j]);
        }
    }
    
    /*Calcolare media di ogni studente*/
    for(i=0;i<R;i++) somma_studente[i]=0;
    for(j=0;j<C;j++) somma_compiti[j]=0;
    
    for(i=0;i<R;i++) {
        somma_studente[i]=somma_studente[i]+M[i][j];
        for(j=0;j<C;j++) {
            somma_compiti[j]=somma_compiti[j]+M[i][j];
        }
    }
    
    /*Stampo le medie di ogni studente*/
    for(i=0;i<R;i++) media_studente[i]=0;
    
    for(i=0;i<R;i++) {
                media_studente[i]=somma_studente[i]/C;
            printf("La media del seguente studente %d e': %2.2f",i+1,media_studente[i]);
    }
    
    media_compiti[j]=0;
    
    media_compiti[j]=somma_compiti[j]/R;
    printf("La media totale dei compiti svolti dagli studenti durante l'anno e': %2.2f",media_compiti[j]);


    return 0;
    }

23 Risposte

  • Re: ESERCIZIO IN C - MATRICE

    Come dice Weierstrass sotto, senza tag code [</>] il tuo codice non è corretamente visualizzato
  • Re: ESERCIZIO IN C - MATRICE

    @Rubik

    È perché non ha usato il tag code ( pulsante < / > ) e la [ i ] viene interpretata come corsivo
  • Re: ESERCIZIO IN C - MATRICE

    Weierstrass ha scritto:


    @Rubik

    È perché non ha usato il tag code ( pulsante < / > ) e la [ i ] viene interpretata come corsivo
    ah, controllo se ci sono altre ambiguità legate al tag code.
  • Re: ESERCIZIO IN C - MATRICE

    Per favore usa il pulsante CODE per scrivere il codice e spiega quali sono i problemi (non compila? Non fa quello che deve fare?)
  • Re: ESERCIZIO IN C - MATRICE

    Rubik ha scritto:


    Weierstrass ha scritto:


    @Rubik

    È perché non ha usato il tag code ( pulsante < / > ) e la [ i ] viene interpretata come corsivo
    ah, controllo se ci sono altre ambiguità legate al tag code.
    Piuttosto che fare questo lavoro, attendi che vengano inseriti i tag code. Capisco la tua voglia di rispondere, scrivere codice, risolvere ma così si fa solo confusione...
  • Re: ESERCIZIO IN C - MATRICE

    oregon ha scritto:


    Piuttosto che fare questo lavoro, attendi che vengano inseriti i tag code. Capisco la tua voglia di rispondere, scrivere codice, risolvere ma così si fa solo confusione...
    Ho modificato il mio post.

    MarcoTopone ha scritto:


    Salve. Sto riscontrando svariati problemi riguardanti la media di ogni singolo studente e la media totale di ogni prova di tutti i studenti. Non capisco come risolverli.
    @MarcoTopone
    Il primo grande errore che fai, non azzeri i vettori e le variabili e non facendolo al primo utilizzo conterranno un valore a caso che dipende dal contenuto della memoria. Se il primo uso è un'assegnazione non fa nulla, ma se al primo uso fai
    somma_studente[i]=somma_studente[i]+M[i][j];
    equivale a: ValoreAcaso = ValoreAcaso + ValoreNoto

    secondo errore se dichiari: float M[RIG][COL];
    poi con
    scanf("%d",&M[i][j]);
    immetti un intero in un float, che in C significa lucciole per lanterne.

    Terzo errore, nei cicli devi porre attenzione a dove inizia e finisce un for, altrimenti esegui conteggi errati, o non li esegui.
    Quarto, per il calcolo somma_compiti e media_compiti non ti occorrono i vettori, visto che mano mano conterranno la somma maturata nel ciclo di conteggio, che è un solo valore che si incrementa.

    Quinto, le medie degli studenti sono molte e per stamparle vanno in un ciclo, la media totale dei voti è una, non va in un ciclo.

    Dare un nome significativo alle variabili, aiuta nella comprensione del codice.

    Con queste indicazioni prova a correggere il codice.
  • Re: ESERCIZIO IN C - MATRICE

    Ringrazio tutti per i consigli dati
  • Re: ESERCIZIO IN C - MATRICE

    Ho corretto sostituendo con il nuovo codice ma senza alcun risultato... Sono disperato
  • Re: ESERCIZIO IN C - MATRICE

    Magari mostra questo nuovo codice...
  • Re: ESERCIZIO IN C - MATRICE

    L'ho caricato sostituendolo con il precedente
  • Re: ESERCIZIO IN C - MATRICE

    Non dovresti farlo perché così non si capisce nulla leggendo il thread dall'inizio...
    Comunque come prima cosa vedo

    scanf("%f",M[j]);

    Ma M non dovrebbe essere una matrice?
  • Re: ESERCIZIO IN C - MATRICE

    Di seguito il tuo codice con le indicazioni per le correzioni, se non capisci qualche indicazione chiedi.
    Ripeto il codice non è corretto, ci sono solo le indicazioni per farlo.
    
    /*Una classe composta da 32 studenti ha sostenuto durante l’anno 5 compiti in
    classe. Scrivere un programma che calcoli la media dei voti ottenuti dagli
    studenti*/
    
    #include<stdio.h>
    #include <stdlib.h>
    #define RIG 40
    #define COL 10
    
    int main() {
        float M[RIG][COL]; // inizializza e azzera
        int R,C,i,j,somma_studente[RIG],somma_compiti[COL]; // somma_studente[RIG],somma_compiti[COL]; dichiarali float e azzerali
        float media_studente[RIG],media_compiti[COL];
    
        printf("Inserire il numero di studenti che hanno sostenuto le prove: ");
        scanf("%d",&R);
    
        printf("Inserire il numero di compiti svolti durante l'anno: ");
        scanf("%d",&C);
    
        /*Costruzione della matrice*/
        for(i=0;i<R;i++){
            printf("Immettere le valutazioni per il seguente studente %d\n",i+1);
            for(j=0;j<C;j++) {
                printf("Quali sono le valutazioni per il seguente studente %d? ",i+1);
                scanf("%f",M[j]); // manca una dimensione e il riferimento all'indirizzo della memoria &
            }
        }
    
        /*Calcolare media di ogni studente*/
        for(i=0;i<R;i++) somma_studente[i]=0; // non serve se hai inizializzato e azzerato in fase di dichiarazione
        for(j=0;j<C;j++) somma_compiti[j]=0; // non serve se hai inizializzato e azzerato in fase di dichiarazione
    
        // non puoi nidificare le due ricerche
    
        // fai un ciclo per per calcolare la media di ogni studente
    
        // fai un ciclo per calcolare la media di ogni compito (for invertiti)
    
        // stampa i risultati degli studenti
    
        // stampa i risultati dei compiti
    
        // potresti anche stampare la media di tutti i voti dell'anno.
    
    
        for(i=0;i<R;i++) {
            somma_studente[i]=somma_studente[i]+M[i][j];
            for(j=0;j<C;j++) {
                somma_compiti[j]=somma_compiti[j]+M[i][j];
            }
        }
    
        /*Stampo le medie di ogni studente*/
        for(i=0;i<R;i++) media_studente[i]=0;
    
        for(i=0;i<R;i++) {
                    media_studente[i]=somma_studente[i]/C;
                printf("La media del seguente studente %d e': %2.2f",i+1,media_studente[i]);
        }
    
        media_compiti[j]=0;
    
        media_compiti[j]=somma_compiti[j]/R;
        printf("La media totale dei compiti svolti dagli studenti durante l'anno e': %2.2f",media_compiti[j]);
    
    
        return 0;
        }
    
    
    questo è l'output del programma funzionante:
    
    Inserire il numero degli studenti: 3
    Inserire il numero dei compiti svolti durante l'anno: 4
    
    |--> Immettere le valutazioni per lo studente 01
    | Valutazione del compito A per lo studente 01? 5
    | Valutazione del compito B per lo studente 01? 6
    | Valutazione del compito C per lo studente 01? 7
    | Valutazione del compito D per lo studente 01? 8
    
    |--> Immettere le valutazioni per lo studente 02
    | Valutazione del compito A per lo studente 02? 8
    | Valutazione del compito B per lo studente 02? 7
    | Valutazione del compito C per lo studente 02? 6
    | Valutazione del compito D per lo studente 02? 9
    
    |--> Immettere le valutazioni per lo studente 03
    | Valutazione del compito A per lo studente 03? 6
    | Valutazione del compito B per lo studente 03? 7
    | Valutazione del compito C per lo studente 03? 7
    | Valutazione del compito D per lo studente 03? 8
    
            ****  RISULTATO PER STUDENTE  ****
           La media dello studente 01 e': 6.50
           La media dello studente 02 e': 7.50
           La media dello studente 03 e': 7.00
    
            ****  RISULTATO PER COMPITO   ****
           La media del compito A e': 6.33
           La media del compito B e': 6.67
           La media del compito C e': 6.67
           La media del compito D e': 8.33
    
    La media totale dei compiti svolti dagli studenti durante l'anno e': 7.00
    
    Process returned 0 (0x0)   execution time : 38.116 s
    Press any key to continue.
    
    
  • Re: ESERCIZIO IN C - MATRICE

    #include <stdio.h>
    #include <stdlib.h>
    #define RIG 40
    #define COL 10
    
    int main() {
        float M[RIG][COL];
        int R,C,i,j;
        float somma_studente[RIG],somma_compiti[COL];
        float media_studente[RIG],media_compiti[COL],media_totale;
        somma_studente[RIG]=0;
        somma_compiti[COL]=0;
        media_studente[RIG]=0;
        media_compiti[COL]=0;
        media_totale=0;
        
        printf("Inserire il numero di studenti che hanno sostenuto le prove: ");
        scanf("%d",&R);
        printf("Inserire il numero di compiti svolti durante l'anno: ");
        scanf("%d",&C);
        
        /*costruzione della matrice*/
        for(i=0;i<R;i++){
            printf("Immettere le valutazione per il seguente studente %d\n",i+1);
            for(j=0;j<C;j++) {
                printf("Quali sono le valutazioni per il seguente studente %d? ",i+1);
                scanf("%f",&M[i][j]);
            }
        }
        
        /*Calcolare la media di ogni studente*/
        for(i=0;i<R;i++){
            for(j=0;j<C;j++){
                somma_studente[i]=somma_studente[i]+M[i][j];
                media_studente[i]=somma_studente[i]/C;
            }
        }
        
        printf("RISULTATO PER STUDENTE\n");
        for(i=0;i<R;i++){
            for(j=0;j<C;j++){
                printf("La media dello studente %d e': %2.2f\n",i+1,media_studente[i]);
            }
        }
        
    /*Calcolare la media di ogni compito*/
         for(j=0;j<C;j++){
            for(i=0;i<R;i++){
                somma_compiti[j]=somma_compiti[j]+M[i][j];
                media_compiti[j]=somma_compiti[j]/R;
            }
        }    
        
        printf("RISULTATO PER COMPITO\n");
        for(j=0;j<C;j++){
            for(i=0;i<R;i++){
                printf("La media del compito %d e': %2.2f\n",j+1,media_compiti[j]);
            }
        }
        
        media_totale=(media_studente[i]+media_compiti[j])/(R*C);
        printf("La media totale dei compiti svolti dagli studenti durante l'anno e': %2.2f",media_totale);
        
        return 0;
    }
  • Re: ESERCIZIO IN C - MATRICE

    Ho problemi riguardante la media del compito e la media totale :/
Devi accedere o registrarti per scrivere nel forum
23 risposte