Salve a tutti, sono ancora alle prese con la programmazione in C++.
Devo implementare un metodo per una classe matrice che controlli se la somma degli elementi della matrice sia zero.
questo è il file Matrice.h
#include <iostream>
using std:stream;
const int DIM=10;
class Matrice {
private:
int N,M;
double mat[DIM][DIM];
public:
Matrice(const char* nomefile);
void getSize(int &n, int &m);
bool sommaZero();
friend ostream& operator<<(ostream &o, const Matrice &m);
};
e questo è il file Matrice.cpp
#include "Matrice.h"
#include <fstream>
using std::ifstream;
using std::cout;
using std::endl;
Matrice::Matrice(const char* nomefile)
{
ifstream ifs;
ifs.open(nomefile);
if (ifs.good()) {
ifs >> N; ifs >> M;
for (int i=0; i<N; i++)
for (int j=0; j<M; j++)
ifs >> mat[i][j];
ifs.close();
}
}
void Matrice::getSize(int &n, int &m)
{
n=N; m=M;
}
ostream& operator<<(ostream &o, const Matrice &m)
{
o << m.N << " " << m.M << std::endl;
for (int i=0; i<m.N; i++) {
for (int j=0; j<m.M; j++)
o << m.mat[i][j] << " ";
o << endl;
}
return o;
}
bool Matrice::sommaZero() {
double somma;
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++)
somma+=mat[i][j];
}
if(somma==0) return true;
else return false;
}
int main()
{
Matrice A("MatA.txt");
int n,m; A.getSize(n,m);
cout << A << endl;
cout << "Somma " << (A.sommaZero()?"zero":"non zero") << endl; //*se A.sommaZero è vera restituisce "zero", altrimenti "non zero"
//double *v = A.colonna(1);
//for (int k=0; k<n; k++)
//cout << v[k] << endl;
}
della parte in verde non mi sono ancora occupato e quindi per ora l'ho messa come commento, mentre quella in rosso è quella che ho scritto io.
La matrice è
1 0 1 -2
0 1 2 2
1 1 -4 -3
quando viene eseguito però il programma dà il risultato sbagliato, ovvero che la somma non è zero.
come posso fare per risolvere il problema? non chiedo che venga risolto l'esercizio, chiedo semplicemente un suggerimento.
Grazie a tutti
Ivan