Pagina 1 di 2

Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 10:21
da leon80
Salve, non riesco a capire dove stà l'errore
mi potete aiutare
il quesito:
dopo aver caricato una matrice
che deve mostrare tutti gli elementi, la media e i valori inferiori alla media,
mostra gli elementi , calcola la media ma non i valori inferiori alla media.
vi posto il codice :
Codice:
void insufficienti(int matriceA[20][N],float media[N]){
   int i, j;
     cout<<"\nMateria insufficiente - "<<i<<" = ";
   for (j=0; j<M ; j++){
      if (matriceA[j][i]<(float)media[j]){
         matriceA[j][i]=matriceA[j][i];
      }
      else
      matriceA[j][i]==0;   
      cout<<setw(4)<<"\nStudente   "<<j<<" con insufficienza  ="<<matriceA[j][i]<<endl;   
   }   
}

e nel main :
Codice:
int main () {
int matriceA[20][N], v[N];
float media[N];

cout<<"\n  Matrice con dimensione massima  20x7 ";
    leggi_Matrice(matriceA);
    stampa_Matrice(matriceA);
    Somma_Colonne(matriceA,v,media);
    insufficente(matriceA,media);
   
   }


Grazie in anticipo
per la collaborazione

Re: Funzione non calcola media

MessaggioInviato: 18/05/2018, 10:34
da leon80
Quando compilo mi dà :
undefined reference to "insufficiente(int(*) [3],float*)"
non capisco
ho provato nel main a chiamare la funzione "insufficiente" passando altri parametri
ma non cambia il risultato.

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 11:47
da Super Squirrel
Perchè non posti semplicemente il codice per intero?

il quesito:
dopo aver caricato una matrice
che deve mostrare tutti gli elementi, la media e i valori inferiori alla media,
mostra gli elementi , calcola la media ma non i valori inferiori alla media.

Sarà un mio problema, ma non ci ho capito nulla...

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 12:51
da leon80
E cco il codice completo :
Codice:
#include <iostream>
#include <cstdlib>
#include <iomanip>//manipolatore dell'output stream
using namespace std;
const int N=3;
int M;
void leggi_Matrice(int matriceA[20][N]);
void stampa_Matrice (int matriceA[20][N]);
void Somma_Colonne(int matriceA[20][N], int v[N],float media[N]);
void insufficenti(int matriceA[20][N],float media[N]);



void leggi_Matrice (int matriceA[20][N]){
int i, j; 
   cout<<"\n\nScelta numero studenti max 20:";
   cin>>M;
        for (i=0 ; i<N ; i++){
        for(j=0 ; j<N ; j++){
           cout<<"\nInserisci il voto dello studente "<<i+1<<" nella materia "<<j+1<<" :";
            cin >> matriceA[i][j];
         }
       }
return;
}


void stampa_Matrice (int matriceA[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)<<matriceA[j][i]<<" ; ";
      }
   }   
return;
}

void Somma_Colonne(int matriceA[20][N], int v[N],float media[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] += matriceA[j][i];//Carico (v[j]):per ogni studente "j" sommo i voti "i" delle materie N
    }
    for (j=0 ; j<M; j++){
       media[j]=v[j]/N;//Media = somma dei voti diviso N (materie)
       cout<<"\nLa MEDIA dei voti dello studente "<<j+1<<" = "<< media[j]<<" ";
   }
}


void insufficienti(int matriceA[20][N],float media[N]){
   int i, j;
     cout<<"\nMateria insufficiente - "<<i<<" = ";
   for (j=0; j<M ; j++){
      if (matriceA[j][i]<(float)media[j]){
         matriceA[j][i]=matriceA[j][i];
      }
      else
      matriceA[j][i]==0;   
      cout<<setw(4)<<"\nStudente   "<<j<<" con insufficienza  ="<<matriceA[j][i]<<endl;   
   }   
}


int main () {
int matriceA[20][N], v[N];
float media[N];

cout<<"\n  Matrice con dimensione massima  20x7 ";
    leggi_Matrice(matriceA);
    stampa_Matrice(matriceA);
    Somma_Colonne(matriceA,v,media);
    insufficenti(matriceA,media);
   
   }

Quando compia mi dà: undefined reference to "insufficienti (int(*) [3],float*) "

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 13:11
da Super Squirrel
Il motivo è che scrivi a volte "insufficenti" e a volte "insufficienti".
In ogni caso ci sono molte altre cose che non vanno...

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 18:44
da leon80
A parte la svista di insufficente,
corretto,
ti chiedo se potresti indicarmi qualche errore determinante
magari gli altri ci riesco ...
Grazie per l'attenzione

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 19:04
da Super Squirrel
Adesso che il codice compila, hai testato un po' il programma? Funziona correttamente oppure no? In tal caso quali problemi riscontri?

Mostra un po' di buona volontà... :roll:

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 21:01
da leon80
Infatti, lavorandoci sopra con un pò di modifiche adesso mi dà le insufficenze,
solo che per i valori superiori alla media li sostituisce con zero,
e quelli inferiori alla media li trasforma in numeri a 7/8/9 cifre
ti posto questa parte
Codice:
void insufficente(int matriceA[20][N],float media[N],int insuff[][N]){
   int i, j;
     cout<<endl;
    for (j=0; j<M ; j++){
          
      if (matriceA[j][i]<media[j]){
         insuff[j][i]=matriceA[j][i];
         }
         for (j=0; j<M ; j++){
         cout<<setw(4)<<"\nStudente "<<j+1<<" con insufficenza =";
            for (i=0; i<N ; i++)
            cout<<insuff[j][i]<<";";
            } cout<<endl;

   }
}


Grazie ancora per l'attenzione

Re: Funzione non calcola valori minori della media

MessaggioInviato: 18/05/2018, 21:42
da Super Squirrel
Di questo passo cmq non ne usciamo... posta il codice completo e spiega precisamente qual è la consegna dell'esercizio.

Re: Funzione non calcola valori minori della media

MessaggioInviato: 19/05/2018, 10:20
da leon80
Codice completo
il problema che non mostra le insuficenze, li mostra a zero per tutti.
Codice:
 /*

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

Il programma deve mostrare a video :
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[N]){
   
   int i, j;
   for (i=0; i<M ; i++){
   int inf[N]={0};
       if (matr_A[j][i]<6){
         inf[i]==1;
         }
      for (j=0; j<M ; j++){
             cout<<setw(4)<<"\nStudente "<<j+1<<" con insufficenza =";
            for (i=0; i<N ; i++)
                cout<<inf[i]<<";";
            }       cout<<endl;
   }
}

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