Linguaggio c e programma

di il
30 risposte

Linguaggio c e programma

Salve ragazzi
da poco tempo sto sperimentando per la prima volta il linguaggio C
ora mi sono imbattuto in un esercizio particolare ed è il seguente:
Scrivere un programma che richieda all’utente i voti delle otto prove sostenute durante l’anno da diciotto
studenti di una classe e calcoli la media di ogni studente, la media di ogni prova e la media globale. Il programma dovrà
infine visualizzare l’intera matrice e la media globale. [Suggerimento: si utilizzi una matrice di 19 linee e 9 colonne
dove nelle prime otto vengono memorizzati in ciascuna linea i voti di uno studente e nella nona la rispettiva media;
nella diciannovesima linea viene invece memorizzata la media per prova.]
#include <stdio.h>
int mat[20][10];
float media;
int voti[9];
main(){

    int i,n;
    n=18;
    for (i=0; i<n; i++){
    printf("alunno n.%d\n", i+1);
    printf("prima prova: ");
    scanf("%d",&voti[i]);
    printf("seconda prova : ");
    scanf("%d",&voti[i]);
    printf("terza prova: ");
    scanf("%d",&voti[i]);
    printf("quarta prova: ");
    scanf("%d",&voti[i]);
    printf("quinta prova: ");
    scanf("%d",&voti[i]);
    printf("sesta prova: ");
    scanf("%d",&voti[i]);
    printf("settima prova: ");
    scanf("%d",&voti[i]);
    printf("ottava prova: ");
    scanf("%d",&voti[i]);}
 /*media globale*/
 printf("la media globale\n\n");
 media=voti[i];
for (i=0; i<7;i++)
media=voti[i]+media;
media/=8;
printf("la media \x8A:%f",media);
}
sono riuscito ad inserire per ogni studente 8 prove( è STATO COMPLICATISSIMO PER ME) e sono riuscito a calcolare la media globale
ora vorrei calcolare la media per ogni studente e la visualizzazione della matrice ? qualcuno che mi da qualche dritta??
usate un linguaggio semplice .Sono due settimane che lo studio xD

30 Risposte

  • Re: Linguaggio c e programma

    1) consiglio: EVITA di dover inserire i dati DA TASTIERA.

    Poiche devi provare il programma piu' volte, perdi piu' tempo ad inserire i dati che a vedere perche' il codice non funziona


    2) studia cosa sono i vettori e le matrici, come si definiscono, e come scandiscono
  • Re: Linguaggio c e programma

    Grazie purtroppo l'esercizio specifica che bisogna inserire i dati con lo scanf.
    poi quando devo provarlo diminuisco il numero di studenti a due e continuo.
    l'ho studiate ,soltanto che non riesco a contestualizzare questo caso .
  • Re: Linguaggio c e programma

    L'inserimento via scanf lo puoi fare DOPO che il resto FUNZIONA!

    Su, un po' di spirito d'iniziativa!

    Scandire una matrice e' COME la battaglia navale/la scacchiera degli scacchi:

    devi usare 2 INDICI, uno per scandire le righe, uno per le colonne.

    Se la cosa ti e' ancora OSCURA, puoi ragionare in un'altro modo:

    inizia con UN vettore, e fai i conti.
    poi continua con DUE vettori, e fai i conti
    poi continua con TRE vettori e fai i conti.

    A questo punto inviece di avere TRE vettori, puoi avere un VETTORE DI VETTORI

    In ogni caso, E' OVVIO che se hai un esercizio con i vettori/matrici, ti li hanno spiegati.
    Ci sono i libri per ripassare!
  • Re: Linguaggio c e programma

    Scusami il fatto è che non riesco a far visualizzare nelle prime 9 i voti
    non so nemmeno come scriverlo.
    il programma funziona benissimo infatti se provate vi chiederà per ogni studente 8 voti.
    mi calcola la media mi manca solo questo passaggio
    riesco anche a stampare la matrice
    /*caricamento della matrice*/
    printf("visualizzazione dei voti e media per alunno\n");
    for(i=0; i<20; i++) {
    printf("\n");
    for(j=0; j<10; j++)
    printf("%5d", voti[i]);
    
    con questo ora vorrei fargli capire che nelle prime 9 deve stampare i voti delle prove
  • Re: Linguaggio c e programma

    Stai studiando a scuola o da autodidatta?
  • Re: Linguaggio c e programma

    Controlla: con la tua sequenza di printf() e scanf() continui a riscrivere il nuovo voto immesso nella stessa "casella" dell'array voti[] (cancellando quello immesso appena prima). Infatti usi i per scorrere i 18 alunni, ma usi i anche come indice per scorrere voti[], tra l'altro "sfondando" l'array voti[], che ha solo 9 posizioni. Il programma potrebbe anche impallarsi, se non succede è solo perché sei molto fortunato.
  • Re: Linguaggio c e programma

    Sto studiando da solo.
    come potrei fare per non scrivere e cancellare?
    vorrei che venissero memorizzati.
  • Re: Linguaggio c e programma

    Sto studiando da solo.
    Benvenuto, collega!

    Come ti ha suggerito Migliorabile dovresti usare due indici, uno per scorrere la dimensione che porta da uno studente all'altro, l'altro per scorrere la dimensione che porta da una prova all'altra, immettendo i valori direttamente nella matrice (lascerei perdere il vettore voti[]).
    #define Q_PROVE      8
    #define Q_STUDENTI  18
    
    float matrice[Q_STUDENTI+1][Q_PROVE+1];
    
    void imposta_voti_manuale( void ) {
        int s, p; // s: studente; p: prova
        
        memset( &matrice[0][0], 0, sizeof(matrice[0][0]) );
    
        for (s=0; s<Q_STUDENTI; s++) {
            printf( "\nstudente n. %02d\n", s+1 );
    
            for (p=0; p<Q_PROVE; p++) {
                printf( "prova n. %02d: ", p+1 );
                scanf( "%f", &matrice[s][p] );
            }
        }
    }
  • Re: Linguaggio c e programma

    Ok grazie mille
    devo solo mettermi a studiare la memset.
    Sei stato magnifico!!!
    Ce ne fossero di persone come te da avere in tasca
  • Re: Linguaggio c e programma

    @aldobaldo, mi pare che te lo avevo gia' fatto notare :NON USATE trick furbi devi aiutare un neofita.
    NON LI CAPISCE o al limite lo confonde.
    lo so anch'io che la memset e' efficiente, ma un ciclo era piu' chiarificatore.

    Inoltre, fornire il codice, non fa ragionare l'interlocutore!
  • Re: Linguaggio c e programma

    AldoBaldo ha scritto:


    #define Q_PROVE      8
    #define Q_STUDENTI  18
    
    float matrice[Q_STUDENTI+1][Q_PROVE+1];
    
    void imposta_voti_manuale( void ) {
        int s, p; // s: studente; p: prova
        
        memset( &matrice[0][0], 0, sizeof(matrice[0][0]) );
    
        for (s=0; s<Q_STUDENTI; s++) {
            printf( "\nstudente n. %02d\n", s+1 );
    
            for (p=0; p<Q_PROVE; p++) {
                printf( "prova n. %02d: ", p+1 );
                scanf( "%f", &matrice[s][p] );
            }
        }
    }
    Vorrei chiederti una cosa senza intenti polemici... Cosa ti aspetti che faccia quella chiamata a memset esattamente?
  • Re: Linguaggio c e programma

    Ecco la solita pappa pronta e condita di aldobaldo...
    Ma questo regolamento lo vuoi rispettare o no?

    E inoltre scrivi cose assurde (vedi la memset) che certo non aiutano chi inizia e neanche le conprende.

    Chi studia li fa da solo gli esetc2izi con una imbeccata al massimo. Così si impara
  • Re: Linguaggio c e programma

    Un pezzetto di codice non è pappa pronta, è un esempio (come ce ne sono a bizzeffe anche nei libri di testo). Comunque sia, il regolamento l'ho letto e non fa cenno a divieti di fare esempi, né (al limite) di fornire codice pronto. Fa invece divieto di chiedere esercizi svolti.

    La funzione memset imposta tot bytes sul valore fornito, a partire dall'indirizzo segnalato tramite il primo parametro.
    Vedi http://www.cplusplus.com/reference/cstring/memset

    Noto ora che copiando e incollando ho dimenticato di rimuovere "[0][0]". Sarebbe dovuto ovviamente essere...

    memset( &matrice[0][0], 0, sizeof(matrice) );

    ====================================
    ESTRATTO DAL REGOLAMENTO

    8. Discussioni e post non ammessi

    Oltre a rispettare la civile convivenza e quanto scritto nel regolamento di questo forum ci teniamo a ricordare che non sono ammesse le seguenti tipologie di messaggi:

    f. Richiedere la "pappa pronta"
    Evitare di RICHIEDERE la così detta "pappa pronta". [...] Gli SPEZZONI DI CODICE che vengono dati non sono da intendere come soluzione definitiva, ma un ESEMPIO su come procedere.
  • Re: Linguaggio c e programma

    Migliorabile, quali trucchi furbi? Non capisco a cosa ti riferisci.
Devi accedere o registrarti per scrivere nel forum
30 risposte