Re: Funzione non calcola valori minori della media

Messaggioda Super Squirrel » 19/05/2018, 13:30

Il corretto prototipo della funzione Calc_Med dovrebbe essere:
Codice:
void Calc_Med(int matr_A[20][N], int v[20],float med[20]);

in quanto, stando all'implementazione della funzione, v e med devono avere un numero di elementi pari agli studenti e non alle materie.
Passare il vettore v alla funzione è completamente inutile in quanto basta una semplice variabile intera dichiarata all'interno della funzione. Inoltre se lo scopo del programma è solo quello di mostrare a video la media di ogni studente, allora anche il vettore med è superfluo.

Per quanto riguarda le insufficienze se ho capito bene ad ogni studente vuoi associare un vettore di N elementi in cui 0 indica la sufficienza e 1 l'insufficienza, giusto?
In questo caso:
- se vuoi salvare questi dati non basta un array di N elementi, ma ci vuole una matrice int inf[20][N];
- se lo scopo è solo quello di mostrare a video, allora il vettore/matrice inf è inutile.
Per quanto riguarda l'implementazione della funzione:
- hai scritto inf[i]==1 invece di inf[i]=1;
- controlla bene i cicli for, ci sono molti errori.
Super Squirrel
Junior Member
Junior Member
 
Messaggio: 213 di 381
Iscritto il: 16/05/2013, 22:05

Re: Funzione non calcola valori minori della media

Messaggioda leon80 » 20/05/2018, 17:42

Ciao Super Squirrel
ho fatto modifiche che ni hai indicato
ma credo che è rimasto un ciclo for che mi fa sbagliare la videata,
nel senso che calcola i valori insufficenti dello studente 1
considerando i valori insufficenti della materia 1 di tutti gli studenti
ti posto il codice cosi capisci meglio
Codice:
 /*

Simulazione scrutini di una classe di M(a input) studenti con N(costante) materie.

Il programma deve mostrare a vieo :
i voti di tutta la classe;
la media di ogni studente;
i voti insufficienti di ogni studente;

*/
#include <iostream>
#include <cstdlib>
#include <iomanip>//manipolatore dell'output stream
using namespace std;
const int N=3;//Materie
int M;//studenti
// -- PROTOTIPI -- //
void carica_Matr(int matr_A[20][N]);
void stampa_Matr (int matr_A[20][N]);
void Calc_Med(int matr_A[20][N], int v[N],float med[N]);
void insuff(int matr_A[20][N],float med[N]);
// -- FUNZIONI -- //
void carica_Matr (int matr_A[20][N]){
int i, j; 
   cout<<"\n\nScelta numero studenti max 20:";
   cin>>M;
        for (i=0 ; i<M ; i++){
        for(j=0 ; j<N ; j++){
           cout<<"Inserisci il voto dello studente "<<i+1<<" nella materia "<<j+1<<" :";
            cin >> matr_A[i][j];
         }
       }
return;
}


void stampa_Matr (int matr_A[20][N]){
int i, j;
        for(i=0;i<N;i++){
      cout<<"\n materia_"<<i+1<<" =";
       for(j=0;j<M;j++){
   cout<<setw(4)<<matr_A[j][i]<<";";
      }
   }   
return;
}

void Calc_Med(int matr_A[20][N]){
   int v[N];float med[N];
   cout<<"\n\nMEDIA dei VOTI per ogni STUDENTE"<<endl;
   int i, j;
    for (j=0 ; j<M ; j++)
    {
      v[j]=0;//Azzero il vettore delle somme (v[j])dei voti per ogni studente.
      for (i=0; i<N ; i++)
         v[j] += matr_A[j][i];//Carico (v[j]):per ogni studente "j" sommo i voti "i" delle materie N
    }
    for (j=0 ; j<M; j++){
       med[j]=(float)v[j]/N;//Media = somma dei voti diviso N (materie)
       cout<<setprecision(3)<<"\nLa MEDIA dei voti dello studente "<<j+1<<" = "<< med[j]<<" ";
   }
}

void insuff(int matr_A[20][N], int inf[20][N]){
   int i, j;
   int insuf=6;
   for (i=0; i<M ; i++){
   cout<<setw(4)<<"\nStudente "<<i+1<<" con insufficenza =";   
   int inf[20][N]={0};
      for (j=0; j<N ; j++)
             if (matr_A[j][i]<insuf){
         inf[j][i]=matr_A[j][i];
         cout<<inf[j][i]<<";";
            }
    }     
}

int main () {
int matr_A[20][N];
int inf[20][N];
float med[N];
cout<<"\n  Mat con dimensione massima  20x7 ";
    carica_Matr(matr_A);
    stampa_Matr(matr_A);
    Calc_Med(matr_A);
    insuff(matr_A,inf);
   
   }


leon80
Starting Member
Starting Member
 
Messaggio: 12 di 12
Iscritto il: 14/05/2018, 12:09

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti