Προς το περιεχόμενο

Πολλαπλασιασμός πινάκων σε C++


pantelisgeor

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σας,

 

Αν μπορούσε κάποιος να με βοηθήσει για κάτι που έχω για το πανεπηστήμιο θα το εκτιμούσα πάρα πολύ. Έχω μια άσκηση που πρέπει να γράψω class για matrices σε C++ που θα πρέπει να κάνει πρόσθεση, αφαίρεση, πολλαπλασιασμό, traspose, determinant κλπ και θα πρέπει να χρησιμοποιώ overloading operators. Μετά από 50 ώρες έχω φτάσει ως εδώ και κολλώ στον πολλαπλασιασμό, το transpose και το πως θα τυπώνονται οι πίνακες σε friend of class. Αν μπορούσε καποιος να βοηθήσει λίγο θα το εκτιμούσα πάρα πολύ.

 

Επειδή είναι αρκετός ο κώδικας τον έχω βάλει σε .txt

 

Ευχαριστώ πολύ

Matrices.txt

Δημοσ.

1) σε member functions δεν χρειάζετε να γραφεις το this

(π.χ. μην βάζεις this->mdata, αρκει mdata)

 

2) εγραψες:

>
matrix operator+(const matrix &m) const
 {
        double *sum = (double*)malloc(sizeof(double)*size);
        
        if(rows==m.getrows() && columns==m.getcols())
        {
                             
                           
        for(int index=0; index<=size; index++)
        {
                sum[index] = mdata[index]+m.getvalue(index);
                }
        }
              
        else
        {
            cout<<"Error: Matrices do not have the same dimensions."<<endl;
            exit(1);
        }

        return *this;
           
 }

εδω έκανες προσθεση στο sum[] και δεν το χρησιμοποίησες.

Δεν ειναι ο σκοπος να χρησιμοποιήσεις πινακα double, χρησιμοποίησε το matrix σου:

>
matrix operator+(const matrix &m) const  {
//εδω εχεις δηλώσει ότι θέλεις να μην πειραζει τον τρεχοντα πινακα αλλα να επιστρεφει εναν νεο

        if(rows==m.getrows() && columns==m.getcols()){
              matrix sum = m;//εδω καλειται ο copy constructor και όχι ο operator= 
              for(int index=0; index<=size; index++)
                    sum.setvalue(index) = getvalue(index)+m.getvalue(index);
              return sum;
        }
        error ...
}

 

Δες αυτά και πως θα τα εφαρμόσεις και στα άλλα operators και τα ξαναλέμε (έλειψη χρόνου)

Δημοσ.

ευχαριστώ! Με έσωσες! Πάω τώρα να το παραδώσω στο πανεπηστήμιο. απλά πληροφοριακά για μένα τον πολλαπλασιασμό τον έκανα με 3 nested loops επειδή ήταν το μόνο που μπορούσα να σκεφτώ. αυτός είναι ο σωστός τρόπος ή υπάρχει και καλύτερος?

Δημοσ.

O σωστός τρόπος είναι να είναι επαναχρησιμοποιούμενα όλα τα αντικείμενα που φτιάχνεις. Με όσο καλύτερο και απλούστερο interface (members) μπορείς να βρείς. Απο εκεί και πέρα μην ψάχνεις ψιλοδιαφορές, γιατί αλλιώς κάθε φορά που θα το ψάχνεις, θα βρίσκεις κάποια μικροβελτίωση να κάνεις ακόμα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...