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:
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 . . .
Il codice che ho fatto tramite le funzioni,librerie ecc... è questo :
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);
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;
}
Perchè mi esce quel mammone in output?