Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Implementazione di un metodo in una classe

    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

  2. #2
    ho risolto.grazie a tutti lo stesso.

    Ivan

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,313

    Moderazione

    Originariamente inviato da bradipoc
    ho risolto.grazie a tutti lo stesso.
    In genere, l'etica del forum suggerisce di pubblicare la soluzione, in modo che sia utile a tutti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    è che l'errore non era nel codice, semplicemente mi ero dimenticato di mettere il file MatA.txt nella cartella dove c'erano anche i file .cpp e .h e quindi il programma non funzionava essenzialmente perchè non leggeva proprio la matrice in questione.

  5. #5
    Originariamente inviato da bradipoc
    è che l'errore non era nel codice, semplicemente mi ero dimenticato di mettere il file MatA.txt nella cartella dove c'erano anche i file .cpp e .h e quindi il programma non funzionava essenzialmente perchè non leggeva proprio la matrice in questione.
    in bool Matrice::sommaZero() c'è comunque un errore, infatti il valore di "somma" viene utilizzato senza che "somma" sia stata inizializzata:
    codice:
    bool Matrice::sommaZero()
    double somma; // non è inizializzata
    ...
    somma+=mat[i][j];

  6. #6
    Originariamente inviato da MacApp
    in bool Matrice::sommaZero() c'è comunque un errore, infatti il valore di "somma" viene utilizzato senza che "somma" sia stata inizializzata:
    codice:
    bool Matrice::sommaZero()
    double somma; // non è inizializzata
    ...
    somma+=mat[i][j];
    grazie mille! non me n'ero accorto, anche perchè il programma funziona lo stesso correttamente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.