Funzione non calcola valori minori della media
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 :
e nel main :
Grazie in anticipo
per la collaborazione
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 :
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 :
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
Risposte
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.
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.
Perchè non posti semplicemente il codice per intero?
Sarà un mio problema, ma non ci ho capito nulla...
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...
E cco il codice completo :
Quando compia mi dà: undefined reference to "insufficienti (int(*) [3],float*) "
#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*) "
Il motivo è che scrivi a volte "insufficenti" e a volte "insufficienti".
In ogni caso ci sono molte altre cose che non vanno...
In ogni caso ci sono molte altre cose che non vanno...
A parte la svista di insufficente,
corretto,
ti chiedo se potresti indicarmi qualche errore determinante
magari gli altri ci riesco ...
Grazie per l'attenzione
corretto,
ti chiedo se potresti indicarmi qualche errore determinante
magari gli altri ci riesco ...
Grazie per l'attenzione
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à...
Mostra un po' di buona volontà...

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
Grazie ancora per l'attenzione
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
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
Di questo passo cmq non ne usciamo... posta il codice completo e spiega precisamente qual è la consegna dell'esercizio.
Codice completo
il problema che non mostra le insuficenze, li mostra a zero per tutti.
il problema che non mostra le insuficenze, li mostra a zero per tutti.
/* 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); }
Il corretto prototipo della funzione Calc_Med dovrebbe essere:
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==1 invece di inf=1;
- controlla bene i cicli for, ci sono molti errori.
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==1 invece di inf=1;
- controlla bene i cicli for, ci sono molti errori.
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
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
/* 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); }