Salve ragazzi il problema è semplice ma mi sta bloccando
il punto e' questo, siprogettino queste due funzioni:
- leggi_mat, che riceve in ingresso il nome di un file, e legge da quel file i riempimenti di riga e colonna ed i valori di una matrice di numeri reali;
- med_pos_mat, che riceve in ingresso una matrice M di numeri reali e restituisce come parametro di di uscita la media dei soli elementi positivi di M. La funzione dovrà anche restituire come valore di ritorno un valore booleano, che deve essere pari a false qualora non vi siano in M elementi strettamente maggiori di 0 (zero), e pari a true altrimenti;
Ecco la matrice:
3 4
2.5 -17.1 19.3 22.5
-3.2 20.0 7.4 -9.4
-2.8 -23.2 32.7 40.1
Fin qua tutto bene.. poi mi viene chiesto di fare la media sei soli elementi positivi.
Io l'ho scritto il codice e penso sia fatto anche bene...
Però poichè non mi trovo col risultato ho pensato di far fare al mio programma la stampa di tale matrice e mi dà un output diverso ovvero:
Il codice che ho fatto tramite le funzioni,librerie ecc... è questo :codice:Inserire il nome del file di testo: mat.txt Matrice letta dal file "mat.txt": 2.8026e-045 3.58164e-039 3.76531e-039 3.94899e-039 8.90818e-039 9.09185e-039 9.27553e-039 9.4592e-039 1.44186e-038 4.55515e-038 1.47857e-038 1.49694e-038 La media e' questa: 1.14797e-038 Premere un tasto per continuare . . .
codice:// main.cpp #include <cstdlib> #include <iostream> #include "lib.h" using namespace std; int main() { int rig, col; matrice mat; stringa nomefile; float media; cout<<"\nInserire il nome del file di testo: "; cin>>nomefile; leggi_mat(mat, rig, col, nomefile); cout<<"\n Matrice letta dal file "<<nomefile<<": \n"; stampa_mat(mat,rig,col); med_pos_mat(mat, rig, col, media); cout<<"La media e' questa: "; cout<<media<<'\n'<<'\n'; system("PAUSE"); return EXIT_SUCCESS; }codice://lib. h const int maxdim=30; typedef float vettore [maxdim]; typedef float matrice [maxdim][maxdim]; typedef char stringa [maxdim+1]; void leggi_mat( matrice, int& , int&, stringa); bool med_pos_mat(matrice, int, int, float& ); void stampa_mat(const matrice, int, int);Perchè mi esce quel mammone in output?codice://lib.cpp #include <cstdlib> #include <iostream> #include "lib.h" using namespace std; void leggi_mat(matrice mat, int&rig, int&col, stringa nomefile){ int i,j; FILE*fp=fopen(nomefile, "r"); if(fp==0){ cout<<" Il file non e' stato trovato...\n Controllare la directory del file.txt"; system("PAUSE"); exit(1); } fscanf(fp,"%d %d", &rig, &col); for(i=0;i<rig;i++) for(j=0;j<col;j++){ fscanf(fp, "%d", &mat[i][j]); } fclose(fp); } void stampa_mat(const matrice mat, int rig, int col){ int i,j; for(i=0;i<rig;i++){ for(j=0;j<col;j++) cout<<mat[i][j]<<' '; cout<<'\n'; } } bool med_pos_mat(matrice mat, int rig, int col, float&media){ int i,j,contatore; float somma; float val=0.0; somma=0.0; contatore=0; for(i=0;i<rig;i++){ for(j=0;j<col;j++) if(mat[i][j]>val){ somma=somma+mat[i][j]; contatore++; } } if(contatore>0){ media=somma/contatore; return true; } return false; }![]()


Rispondi quotando
