Title: [C++] 4η εργασία 2008 Post by: zeus90 on November 12, 2008, 13:52:50 pm ΕΡΓΑΣΙΑ D Επικάλυψη τελεστών (Hμ/νία λήξης δηλώσεων: 17/11/2008)
Εργασία D Να γραφεί το λογισμικό στο οποίο να ορίζεται η κλάση f_matrix η οποία υλοποιεί ένα πίνακα δύο διαστάσεων. Στην κλάση να ορίζεται ένας pointer σε pointer σε στοιχεία τύπου float και η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να δέχεται ως ορίσματα τις διαστάσεις του πίνακα και να δεσμεύει δυναμικά μνήμη για την καταχώριση των στοιχείων του πίνακα τη διεύθυνση του οποίου να αποδίδει ως τιμή στον pointer. Ως μέλη τις κλάσης να ορίζονται: α) Μια επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση a[ i ] [ j ], όπου a αντικείμενο στον τύπο της κλάσης, να επιστρέφει την τιμή του στοιχείου του πίνακα που βρίσκεται στη θέσει i,j. β) Μια επικάλυψη του τελεστή + τέτοια ώστε η έκφραση a+b, όπου a και b αντικείμενα στον τύπο της κλάσης, να επιστρέφει ένα αντικείμενο του ίδιου τύπου ο πίνακας του οποίου να περιέχει το άθροισμα των πινάκων των αντικειμένων a και b. γ) Μια επικάλυψη του τελεστή * τέτοια ώστε η έκφραση a*b, όπου a και b αντικείμενα στον τύπο της κλάσης, να επιστρέφει ένα αντικείμενο του ίδιου τύπου ο πίνακας του οποίου να περιέχει το γινόμενο των πινάκων των αντικειμένων a και b. δ) Μια επικάλυψη του τελεστή ~ τέτοια ώστε η έκφραση ~a, όπου a αντικείμενο στον τύπο της κλάσης, να επιστρέφει τον ανάστροφο πίνακα του αντικειμένου a. ε) Μια επικάλυψη του τελεστή = τέτοια ώστε η έκφραση a=b, όπου a και b αντικείμενα στον τύπο της κλάσης, να καταχωρεί ως τιμές για τα στοιχεία του πίνακα του αντικειμένου a τις τιμές των αντίστοιχων στοιχείων του πίνακα του αντικειμένου b. Ως εφαρμογή η συνάρτηση main του προγράμματος να ορίζει τα αντικείμενα a,b και c στον τύπο της κλάσης f_matrix δίνοντας τις κατάλληλες διαστάσεις και χρησιμοποιώντας τις επικαλύψεις των τελεστών, να υπολογίζει και να εκτυπώνει τον πίνακα του αντικειμένου m που θα προκύψει από την έκφραση m=~(a*b+c). Σημείωση: Στη συνάρτηση main για την ανάγνωση των τιμών των στοιχείων των πινάκων καθώς και για την εκτύπωσή τους να χρησιμοποιείται η επικάλυψη του τελεστή [ ]. Για τη διευκόλυνση σας να μη χρησιμοποιήσετε συναρτήσεις τελικών συνθηκών για την αποδέσμευση της μνήμης που δεσμεύτηκε δυναμικά Title: Re: [C++] 4η εργασία Post by: status_quo on November 12, 2008, 15:20:34 pm να ρωτήξω αυτό το επικάλυψη τελεστών αναφέρεται στο υπερφόρτωση τελεστών που λέει στο βιβλίο?γτ είμαι ολίγον τι άσχετη...έχω να παρακολουθήσω πολύ καιρό... ::)
Title: Re: [C++] 4η εργασία Post by: Emfanever on November 12, 2008, 15:22:03 pm να ρωτήξω αυτό το επικάλυψη τελεστών αναφέρεται στο υπερφόρτωση τελεστών που λέει στο βιβλίο?γτ είμαι ολίγον τι άσχετη...έχω να παρακολουθήσω πολύ καιρό... ::) ΄Ναι σε αυτό αναφέρεται Title: Re: [C++] 4η εργασία Post by: status_quo on November 12, 2008, 15:24:47 pm εντ'αξει λοιπόν!ευχαριστώ πολύ!πάω να το διαβάσω κι ας ελπίσουμε να επανέλθω με κανένα αξιοπρεπές κομμάτι κώδικα... ^aytoxeir^
Title: Re: [C++] 4η εργασία Post by: λήθη on November 12, 2008, 21:26:05 pm Fistfucked by []..
Μα καλα..γιατι να το θελει με [][]? Η υπερφορτωση με τον τελεστη () ειναι πολυ πιο ευκολη και στην υπολοιηση, και στη γραφη.. α 532 Title: Re: [C++] 4η εργασία Post by: Grecs on November 12, 2008, 21:31:44 pm καλα παω να διαβασω γραμμικη αλγεβρα
Title: Re: [C++] 4η εργασία 2008 Post by: status_quo on November 12, 2008, 22:04:28 pm Code: class f_matrix επίσης μέσα στο βιβλίο γράφει: class three_d{ int x,y,z; public: .... three_d operator+(three_d op2); }; three_d three_d::opertaor+(three_d op2) {three_d temp; temp.x=x+op2.x; ....} αυτά με τα bold δε τα 'πιασα... ^confused^ Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 12, 2008, 22:13:17 pm Τα εξηγει λιγο πιο μετα τα bold..
H idea ειναι οτι χρησιμοποιεις ενα βοηθητικο αντικειμενο, το temp, τυπου tree_d το οποιο επιστρεφεις γιατι δε θες να αλλαξεις τα op1, op2. Το x ανηκει στο αντικειμενο αριστερα του + πχ και αυτο στα δεξια ειναι το op2 Ο τελεστης this λεει εννοειται οποτε εχει x αντι για this->x α 535 Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 12, 2008, 22:20:08 pm Code: class f_matrix edit: το operator[] το έχεις λάθος , θα βγάλει σφάλμα ότι θέλει να βάλεις ένα όρισμα (δλδ 2 μαζί με την κλάση) Title: Re: [C++] 4η εργασία 2008 Post by: status_quo on November 12, 2008, 22:22:18 pm αλήθεια???οοοοοοο χαιρομαι χαιρομαι!
^hello^ ^hello^ ^hello^ ευχαριστώωωωωωωω Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 12, 2008, 22:24:33 pm Εγώ να διαφωνήσω λίγο με το f_matrix[](inti,int j){ return mat[j];}
1oν:δεν μπορούμε να επιστέψουμε τύπου float σε τύπου f_matrix.;Έτσι νομίζω :???: 2oν:ο dev μου λέει ότι ο τελεστής μπορεί να δεχτεί μόνο ένα όρισμα. Και μία απορία¨ανάγνωση εννοεί εισαγωγή δεδομένων; :-[ Title: Re: [C++] 4η εργασία 2008 Post by: status_quo on November 12, 2008, 22:25:49 pm edit: το operator[] το έχεις λάθος , θα βγάλει σφάλμα ότι θέλει να βάλεις ένα όρισμα (δλδ 2 μαζί με την κλάση) χμμμμ αν βάλωCode: f_matrix operator[][](int i,int j){return mat[i][j];} Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 12, 2008, 22:28:52 pm αλήθεια???οοοοοοο χαιρομαι χαιρομαι! ^hello^ ^hello^ ^hello^ ευχαριστώωωωωωωω Σορρυ , το είδα γρήγορα, έχεις λάθη τλκα! θα σου στείλω πμ Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 12, 2008, 22:30:46 pm Και μία απορία¨ανάγνωση εννοεί εισαγωγή δεδομένων;
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 12, 2008, 22:33:58 pm Και μία απορία¨ανάγνωση εννοεί εισαγωγή δεδομένων; Μάλλον ναιTitle: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 12, 2008, 22:36:02 pm Και μία απορία¨ανάγνωση εννοεί εισαγωγή δεδομένων; Προφανως οχι. Lolα, να ενα μηλο. (http://angels.pblogs.gr/files/f/164077-%C3%A1%C3%AD%C3%A1%C3%A3%C3%AD%C3%B9%C3%B3%C3%B4%C3%A9%C3%AA%C3%AF.jpg) α 536 Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 12, 2008, 23:08:51 pm sorry mr λήθη, αλλά μπερδεύτηκα. Δεν είναι ανάγκη να με κοροιδεύεις κατευθείαν :P
Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 12, 2008, 23:35:13 pm sorry mr λήθη, αλλά μπερδεύτηκα. Δεν είναι ανάγκη να με κοροιδεύεις κατευθείαν :P Ελα ρε δεν ειναι προσωπικο απλα ειχε πλακα :P :P α 537 Title: Re: [C++] 4η εργασία 2008 Post by: status_quo on November 13, 2008, 00:00:34 am τώρα ας πούμε τον πολ/σμο πινάκων πως θα τον κάνουμε στη c++?έψαξα στο net αλλά δε βρήκα τίποτα εύκολα υλοποιήσιμο...μήπως υπάρχει τίποτα στη βιβλιοθήκη?
Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 00:13:05 am float sum;
int m,n; m=0; while(m<k){ n=0; for(i=0;i<k;++i){ for(j=0;j<l;++j){ sum+=mat[m][j]*a.mat[j];} c.mat[m][n]=sum; n++;} m++;} Τί να πω εμένα αυτό μου βγήκε :P Τ Title: Re: [C++] 4η εργασία 2008 Post by: status_quo on November 13, 2008, 00:22:37 am ^superinnocent^
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 00:33:57 am float sum; int m,n; m=0; while(m<k){ n=0; for(i=0;i<k;++i){ for(j=0;j<l;++j){ sum+=mat[m][j]*a.mat[j];} c.mat[m][n]=sum; n++;} m++;} Τί να πω εμένα αυτό μου βγήκε :P Τ Τι διαστασεις εχουν οι πινακες που πολλαπλασιαζεις? Πιο απλα με την προυποθεση να ναι ιδιων διαστασεων και τετραγωνικοι for (i = 0; i < N; i++) for (j = 0; j < N; j++) c(i)(j) = 0.0; for (i = 0; i < N; i++) for (j = 0; j < N; j++) for (k = 0; k < N; k++) c(i)(j)=c(i)(j) + a(i)(k)*b(k)(j); Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 00:45:56 am Οι πίνακες δεν πρέπει απαραίτητα να είναι τετραγωνικοί. Απλά να ισχύουν οι προυποθέσεις πολλαπλασιασμού και πρόσθεσης πινάκων
Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 13, 2008, 00:46:30 am Στην c νομιζω ειχε ενα παραδειγμα ετοιμο με πολαπλασιασμο στο e thmmy
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 01:16:30 am Ποιες ειναι οι καταλληλες διαστασεις για τα α b c..
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 01:55:12 am Ποιες ειναι οι καταλληλες διαστασεις για τα α b c.. Αυτές ώστε το αποτέλεσμα του πολλαπλασιασμού a*b να έχει τις ίδιες ακριβώς διαστάσεις με το c. Υπάρχουν άπειροι συνδυασμοί δλδ. Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 02:40:24 am αρα στην μαιν θα ναι ετσι f_matrix α(r,c),b(c,r),c(r,r),m(r,r); :???:
Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 13, 2008, 02:53:40 am Βασικα φιλε εκανα λαθος (εχει καιρο που το περασα το μαθημα).
Πρεπει οι πιναεκς να ειναι nxm και mxl δηλαδη στηλες πρωτου ισες με γραμμες δευτερου. οποτε εχεις α(λ,c),b(c,κ),c(λ,κ),m(λ,κ); Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 02:58:36 am Το τελευταίο καντο m(κ,λ) γιατί ζητάει ανάστροφο ;)
Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 03:19:35 am Εγώ την ψιλοέκανα :P Όποιος θέλει να τσεκάρουμε να δω αν έχω λάθος ας μου στείλει pm.
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 03:32:47 am Τις τρεις διαστασεις που διαβαζεις στην μαιν πως τις χρησιμοποιεις στον operator *? με καμια συναρτηση get;
Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 03:41:01 am Βασικά τισ διαστάσεις τις έχω βάλει private για να μπορώ να τις χρησημοποιώ στις συναρτήσεις αν αυτό εννοείς.
Title: Re: [C++] 4η εργασία 2008 Post by: ripper_george on November 13, 2008, 07:31:26 am Πως θα κάνω overloading τον τελεστή []???
Ουσιαστκά το [] δεν παίρνει ως όρισμα μόνο μία μεταβλητή?? Πως είναι δυνατόν εγώ να επιστρέφω στοιχείο δισδιάστατου πίνακα όταν για να το χαρακτηρίσω χρειάζομαι i,j ενώ το [] παίρνει μόνο ένα όρισμα???? :-\ :-\ :-\ :-\ :-\ Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 14:07:13 pm Πως θα κάνω overloading τον τελεστή []??? Ουσιαστκά το [] δεν παίρνει ως όρισμα μόνο μία μεταβλητή?? Πως είναι δυνατόν εγώ να επιστρέφω στοιχείο δισδιάστατου πίνακα όταν για να το χαρακτηρίσω χρειάζομαι i,j ενώ το [] παίρνει μόνο ένα όρισμα???? :-\ :-\ :-\ :-\ :-\ Αν ο διασδιάστατος πίνακας είναι matrix, θα επιστρέφει matrix[ι] Έτσι όταν γράψεις a[ι][j] μια φορά θα χρησιμοποιηθεί η επικάλυψη του [] και θα επιστρέψει matrix[ι] και μια φορά η κλασική χρήση, δηλαδή θα πάρει το j στοιχείο του matrix[ι] Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 18:23:59 pm Πως θα κάνω overloading τον τελεστή []??? Ουσιαστκά το [] δεν παίρνει ως όρισμα μόνο μία μεταβλητή?? Πως είναι δυνατόν εγώ να επιστρέφω στοιχείο δισδιάστατου πίνακα όταν για να το χαρακτηρίσω χρειάζομαι i,j ενώ το [] παίρνει μόνο ένα όρισμα???? :-\ :-\ :-\ :-\ :-\ Mπορεις να δηλωσεις τον οπερατορ void και να εκτυπωνει τον πινακα m την ιδια δουλεια κανει void f_matrix::operator[](f_matrix w){ int i,j; for (i=0;i<h;i++){ for(j=0;j<r;j++){ cout<<" "<<w.p(ι)(j); } cout<<"\n"; } } ..... ..... m[m]; Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 18:30:57 pm Πως θα κάνω overloading τον τελεστή []??? Ουσιαστκά το [] δεν παίρνει ως όρισμα μόνο μία μεταβλητή?? Πως είναι δυνατόν εγώ να επιστρέφω στοιχείο δισδιάστατου πίνακα όταν για να το χαρακτηρίσω χρειάζομαι i,j ενώ το [] παίρνει μόνο ένα όρισμα???? :-\ :-\ :-\ :-\ :-\ Mπορεις να δηλωσεις τον οπερατορ void και να εκτυπωνει τον πινακα m την ιδια δουλεια κανει void f_matrix::operator[](f_matrix w){ int i,j; for (i=0;i<h;i++){ for(j=0;j<r;j++){ cout<<" "<<w.p(ι)(j); } cout<<"\n"; } } ..... ..... m[m]; ??? Δε ζητάει να εκτυπώνει όλο τον πίνακα. Θέλει να επιστρέφει το στοιχείο (i)(j) . Δλδ πρέπει να υπάρχει και return Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 13, 2008, 18:37:02 pm Ως εφαρμογή η συνάρτηση main του προγράμματος να ορίζει τα αντικείμενα a,b και c στον τύπο της κλάσης f_matrix δίνοντας τις κατάλληλες διαστάσεις και χρησιμοποιώντας τις επικαλύψεις των τελεστών, να υπολογίζει και να εκτυπώνει τον πίνακα του αντικειμένου m που θα προκύψει από την έκφραση m=~(a*b+c).
Το αποτελεσμα ειναι ιδιο Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 21:28:47 pm Ως εφαρμογή η συνάρτηση main του προγράμματος να ορίζει τα αντικείμενα a,b και c στον τύπο της κλάσης f_matrix δίνοντας τις κατάλληλες διαστάσεις και χρησιμοποιώντας τις επικαλύψεις των τελεστών, να υπολογίζει και να εκτυπώνει τον πίνακα του αντικειμένου m που θα προκύψει από την έκφραση m=~(a*b+c). Το αποτελεσμα ειναι ιδιο Ναι αλλά προηγουμένως λέει συγκεκριμένα για το [] α) Μια επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση a(ι)[j], όπου a αντικείμενο στον τύπο της κλάσης, να επιστρέφει την τιμή του στοιχείου του πίνακα που βρίσκεται στη θέσει i,j. Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 13, 2008, 21:31:50 pm Ως εφαρμογή η συνάρτηση main του προγράμματος να ορίζει τα αντικείμενα a,b και c στον τύπο της κλάσης f_matrix δίνοντας τις κατάλληλες διαστάσεις και χρησιμοποιώντας τις επικαλύψεις των τελεστών, να υπολογίζει και να εκτυπώνει τον πίνακα του αντικειμένου m που θα προκύψει από την έκφραση m=~(a*b+c). Το αποτελεσμα ειναι ιδιο Ναι αλλά προηγουμένως λέει συγκεκριμένα για το [] α) Μια επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση a(ι)[j], όπου a αντικείμενο στον τύπο της κλάσης, να επιστρέφει την τιμή του στοιχείου του πίνακα που βρίσκεται στη θέσει i,j. Βασικα διορθωσε το σε a[ i ][ j ] γιατι το a(i)[j] λεει αλλο πραγμα :P α 539 Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 13, 2008, 21:37:17 pm Σωστός ,απλά όταν βλέπει
Code: [i] ωραίο το κόλπο σου! Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 21:58:42 pm Να πω και εγώ. Καταρχήν το a(i) [j] "σε αγκύλη το i" δεν μου το δέχεται και επιπλέον η εκφώνηση λεει το a[j] να επιστρέφει το στοιχείο του i,j. Δεν νομίζω να είναι λάθος η εκφώνηση. :-\
edit:Λάθος απλώς κατά τη μεταφορά της στο τημμυ ξεχάστηκε το i. Και τυρανιόμουν τόση ώρα. Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 13, 2008, 23:41:54 pm Μου άνοιξες τα μάτια για τον τελεστή [] emfanever ;). Γίνεται τελικά όπως ανέφερες :D
Title: Re: [C++] 4η εργασία 2008 Post by: goustafson on November 13, 2008, 23:59:31 pm ξέρει κανείς τελικά πως γίνεται ο operator []?????
Title: Re: [C++] 4η εργασία 2008 Post by: tomshare3 on November 14, 2008, 01:53:36 am ξέρει κανείς τελικά πως γίνεται ο operator []????? εγραψα αυτο αλλα δν ξερω αν ειναι σωστο: float f_matrix::operator [](int a){ return *mat[a]; } Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 14, 2008, 01:54:49 am float* operator[](int o){return p[ o ];}
Στην μαιν κανεις την εκτυπωση for(i=0;i<r;i++){ for(j=0;j<d;j++){ cout<<m[ i ][ j ]; } } Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 14, 2008, 22:31:59 pm Εγω ενα δε καταλαβα. Τιμες στους πινακες πως θα δωσουμε??
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 14, 2008, 22:34:01 pm Εγω ενα δε καταλαβα. Τιμες στους πινακες πως θα δωσουμε?? κανονικά, με cin . Απλά θα χρησιμοποιείς την επικάλυψη του τελεστή Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 14, 2008, 22:39:21 pm Εγω ενα δε καταλαβα. Τιμες στους πινακες πως θα δωσουμε?? κανονικά, με cin . Απλά θα χρησιμοποιείς την επικάλυψη του τελεστή Την επικαλυψη του []??? Μα κανονικα δε την χρησιμοποιουμε για να κανουμε return τα αντιστοιχα στοιχεια του πινακα? Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 14, 2008, 22:45:48 pm Λειτουργεί κανονικά και για την ανάγνωση δεδομένων από το πληκτρολόγιο
Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 14, 2008, 22:53:38 pm δλδ αν ειναι κενος ο πινακας αντι να επιστρεφει στοιχεια τα διαβαζει???
Και οταν ξαναβαλουμε ορισματα επιστρεφει τις τιμες που δωσαμε πριν στα αντιστοιχα i και j?? float* operator[](int i){return mat(i);} Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 14, 2008, 23:09:43 pm δε καταλαβαίνω που κολλάς,
όταν διαβάζεις τα δεδομένα βάζεις cin>>a[ i ][ j ] όταν τα εκτυπώνεις cout<<a[ i ][ j ] Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 14, 2008, 23:12:43 pm Τπτ οκ το καταλαβα
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 15, 2008, 00:20:48 am Εγω ενα δε καταλαβα. Τιμες στους πινακες πως θα δωσουμε?? εγω εβαλα μια setp(int m int n) και τους διαβαζω μεσω αυτης αλλα γινεται και στην μαιν δεν εχει διαφορα Title: Re: [C++] 4η εργασία 2008 Post by: ILIAS on November 15, 2008, 00:47:56 am Βασικά όπως θες τα βάζεις αρκεί να χρησημοποιήσεις τον τελεστή []. Και εγώ έκανα τη συνάρτηση data(f_matrix a).
Title: Re: [C++] 4η εργασία 2008 Post by: ripper_george on November 15, 2008, 19:50:43 pm Δεν μπορώ να καταλάβω πως θα ορίσω τον τελεστή []....
Ουσιαστικά δεν επιστρέφει Pointer σε τύπου float??? Άρα δεν θα οριστεί ως matrix operator[](inti), σωστά??? Πως θα τον ορίσω??? Επίσης, έχει κανένας καμία ιδέα για το πως θα είναι ο αλγόριθμος που θα υπολογίζει τον αντίστροφο??? Έχω κολλήσει και δεν μπορώ να σκεφτώ τι θα κάνω για τον υπολογισμό της ορίζουσας....... :-[ :-[ :-[ :-[ Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 15, 2008, 19:54:20 pm Επίσης, έχει κανένας καμία ιδέα για το πως θα είναι ο αλγόριθμος που θα υπολογίζει τον αντίστροφο??? Έχω κολλήσει και δεν μπορώ να σκεφτώ τι θα κάνω για τον υπολογισμό της ορίζουσας....... :-[ :-[ :-[ :-[ Ζηταει τον ΑΝΑστροφο, οχι τον ΑΝΤΙστροφο :) α 547 Title: Re: [C++] 4η εργασία 2008 Post by: ripper_george on November 15, 2008, 20:07:58 pm Δεν το πιστευω!!!!!!!
Κι έκανα τρελές σκέψεις για το πως θα έβρισκα τον αντίστροφο...... :o :o :o Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 15, 2008, 20:34:28 pm Δεν μπορώ να καταλάβω πως θα ορίσω τον τελεστή [].... Πιο πάνω αναφέρθηκε αρκετές φορές, τα είδες καθόλου?Ουσιαστικά δεν επιστρέφει Pointer σε τύπου float??? Άρα δεν θα οριστεί ως matrix operator[](inti), σωστά??? Πως θα τον ορίσω??? Title: Re: [C++] 4η εργασία 2008 Post by: antonios on November 16, 2008, 18:02:33 pm Να κάνω μία ερώτηση, που μπορεί να φανεί χαζή...... Η επικάλυψη πρέπει να έχει μόνο ένα όρισμα.... Π.Χ. για τον τελεστή +... το όρισμα αυτό θα είναι το b.. το α πώς θα το καταλαβαίνει? αν μπορεί κανείς να δείξει πώς θα είναι ο κώδικασ θα βοηθήσει αρκετά.....
Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 16, 2008, 18:07:45 pm Δεν το πιστευω!!!!!!! Κι έκανα τρελές σκέψεις για το πως θα έβρισκα τον αντίστροφο...... :o :o :o ΧΑΧΑΧΑΧΑ κι εγω ετσι την πατησα Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 18:11:59 pm Η ερώτησή σου είναι το ζουμί της άσκησης
Code: f_matrix f_matrix::operator+(f_matrix sm){ Το όρισμα αναφέρεται σε ότι βρίσκεται δεξιά του τελεστή. Η κλήση της συνάρτησης είναι συνδεδεμένη με ότι βρίσκεται αριστερά του τελεστή. Όταν εσύ ζητήσεις στη συνάρτηση μέλος μια μεταβλητή της κλάσης τότε σου επιστέφει την μεταβλητή του αντικειμένου με το οποίο είναι συνδεδεμένη η συνάρτηση. Αν γράψεις <ορισμα>.<μεταβλητή> τότε αναφέρεσαι στη μεταβλητή του αντικειμένου που έχεις δώσει σαν όρισμα (το αντικείμενο δλδ που βρίσκεται δεξιά του τελεστή) Title: Re: [C++] 4η εργασία 2008 Post by: antonios on November 16, 2008, 18:20:40 pm ok, εντάξει, αλλά μέσα στην επικάλυψη, που γράφεις
pm.mat(ι)[j]=mat(ι)[j]+sm.mat(ι)[j]; το mat(i)(j) αυτομάτως, εννοείται πως είναι ο πίνακας του στοιχείου που θα είναι αριστερά του τελεστή?? επειδή έτσι απλά είναι ορισμένο στην κλάση..... Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 18:24:15 pm πρακτικά ναι
Title: Re: [C++] 4η εργασία 2008 Post by: antonios on November 16, 2008, 18:24:59 pm ω, ρε φίλε.... τι σου είναι ο προγραμματισμός................ 8) :-X
νομίζω θα πρέπει να αρχίσω να παρακολουθώ Κορτέση...... :'( :'( Title: Re: [C++] 4η εργασία 2008 Post by: kafeini on November 16, 2008, 18:40:47 pm παιδιά χρειάζομαι βοήθεια!
δηλώνω την επικάλυψη του τελεστή [] ως: float* operator[](int i){return mat(i);} αλλά μ βγάζει error:"call of nonfunction". Ξέρει κανείς τι παίζει με το ρπγραμμά μ; :( Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 18:50:15 pm δεν όρισες σε ποια κλάση ανήκει η συνάρτησή σου
Title: Re: [C++] 4η εργασία 2008 Post by: kafeini on November 16, 2008, 18:53:02 pm δεν όρισες σε ποια κλάση ανήκει η συνάρτησή σου Δεν καταλαβαίνω τι εννοείς. Μήπως μπορείς να γίνεις λίγο πιο ξεκάθαρος? thanks anyway! Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 19:04:00 pm Code: class f_matrix{ Αν το κάνεις έτσι σου βγάζει το ίδιο? επίσης στο τέλος του κώδικά σου float* operator[](int i){return mat(i);} έβαλες ; δλδ float* operator[](int i){return mat(i);}; Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 16, 2008, 19:20:32 pm Να ρωτήσω κι εγώ:
Τα στοιχεία των πίνακων τα διαβάζει και τα εκτυπώνει στη main? Title: Re: [C++] 4η εργασία 2008 Post by: kafeini on November 16, 2008, 19:37:13 pm Code: class f_matrix{ Αν το κάνεις έτσι σου βγάζει το ίδιο? επίσης στο τέλος του κώδικά σου float* operator[](int i){return mat(i);} έβαλες ; δλδ float* operator[](int i){return mat(i);}; Title: Re: [C++] 4η εργασία 2008 Post by: ripper_george on November 16, 2008, 19:44:15 pm matrix operator~()
{ int i,j; float **temp; temp=new(float*[k]); for (i=0;i<k;i++) { temp=new(float[l]); } for (i=0;i<k;i++) { for (j=0;j<l;j++) { temp[j]=MAT[k-1-i][l-1-j]; } } for (i=0;i<k;i++) { for (j=0;j<l;j++) { MAT[j]=temp[j]; } } for (i=0;i<k;i++) { free(temp); } free(temp); } Όταν το τρέξω λέει ότι ο operator ~ πρέπει να επιστρέφει τιμή.... Τι πρεπει να προσθέσω??? Η τι έχω γράψει λάθος>???? Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 19:53:24 pm Δοκίμασε το return *this;
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 16, 2008, 20:46:44 pm το μπέρδεψες το πράγμα. Κάνε ένα temp αντικείμενο , βάλε τα στοιχεία του πίνακα του να αλλάζουν ώστε να είναι ανάστροφος δλδ.
temp.mat[ i ][j]=mat[j][ i ] και στο τέλος return temp εδιτ: ο αρχικός πίνακας δεν πρέπει να αλλάζει Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 21:21:33 pm παιδιά....ξέρει κανείς γτ μπορεί να μου βγάζει segmentation fault??
Title: Re: [C++] 4η εργασία 2008 Post by: harris on November 16, 2008, 21:30:12 pm παιδιά....ξέρει κανείς γτ μπορεί να μου βγάζει segmentation fault?? δωσε τον κωδικα στο σημειο που σου χτυπαει Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 21:36:59 pm η μαλακια είναι ότι μου χτυπάει όταν γεμίζω τον πίνακα c....
αφού έχω γεμίσει τον a και b με την ίδια ακριβώς διαδικασία....με το που γεμίζω τον c μόλις βάλω το τελευταίο στοιχείο μου πετάει το μήνυμα.... :-\ Code: cout<<"Dwste ton arithmo twn grammwn tou pinaka c!!\n"; αυτός είναι ο κώδικας του "γεμίσματος"..... Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 21:42:48 pm Άρα δε φταίει ο κώδικας του "γεμίσματος" φταίει αυτό που είναι κάτω από αυτόν.
1)Είσαι σίγουρος ότι οι πίνακες γεμίζουν σωστά? (δλδ τους τύπωσες γεμίζοντάς τους απλά) 2)έλεγξες μία προς μια τις συναρτήσεις με τις οποίες κάνεις επικάλυψη? (δλδ πρώτα αν γίνεται πρόσθεση, μετά μόνο πολλαπλασιασμό) 3)οι πίνακές σου έχουν τις σωστές διαστάσεις? Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 21:44:19 pm βασικά κολλάει ακριβώς κάτω από το τελευταίο cin...... ουφ...δεν ξέρω..θα τα ξαναελέγξω...
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 16, 2008, 21:45:03 pm Κάτι με τις διαστάσεις πρέπει να παίζει. Στα for σου κοίτα να είναι σωστά όλα
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 16, 2008, 21:45:59 pm η μαλακια είναι ότι μου χτυπάει όταν γεμίζω τον πίνακα c.... αφού έχω γεμίσει τον a και b με την ίδια ακριβώς διαδικασία....με το που γεμίζω τον c μόλις βάλω το τελευταίο στοιχείο μου πετάει το μήνυμα.... :-\ Code: cout<<"Dwste ton arithmo twn grammwn tou pinaka c!!\n"; αυτός είναι ο κώδικας του "γεμίσματος"..... Δες τις διαστασεις του c αν οι διαστασεις του α και b ειναι mxn και nxc του c θα ναι mxc Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 21:49:39 pm ο c δεν είναι πολλαπλασιασμός του α και β!!!(κάνω έναν άλλον έλεγχο πιο μετά....)
το θέμα είναι ότι έχω αυτά: Code: cout<<"Dwste ton arithmo twn grammwn tou pinaka a!!\n"; η ίδια διαδικασία για να γεμίσω τρεις πίνακες!για του ςοποίους κάνω δέσμευση μνήμης με τον ίδιο ακριβώς τρόπο!!!!!! και απλά για τον τρίτο μου πετάει έρορ.... Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 16, 2008, 21:52:03 pm Όπως είπε και ο Agent δε σου πετάει error για το c αλλά παρακάτω. Βάλε ένα cout<<"test" για να δείς μέχρι που φτάνει.
Ο έλεγχος για διαστάσεις πότε γίνεται?????? Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 21:57:47 pm έχω βάλει ήδη:
Code: cout<<"Dwste ton arithmo twn grammwn tou pinaka c!!\n"; δίνω πίνακα 2 γραμμών και 2 στοιχείων! μέχρι τατρία είναι καλά!εμφανίζει 3 οκ! μόλις δώσω το τέταρτο στοιχείο εμφανίζει segmentation fault.... Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 16, 2008, 22:10:50 pm έτρεξα τον κώδικά σου αυτούσιο βάζοντας τη δική μου κλάση, συνάρτηση αρχικών συνθηκών και συνάρτηση επικάλυψης του τελεστή []
Η δέσμευση γίνεται κανονικά, τα νούμερα αποθηκεύονται και εμφανίζει 4 "οκ" για 2χ2 πίνακα Οπότε ή έχεις γράψει κάτι λίγο πιο κάτω που χτυπάει ή έχεις κάνει κάποιο λάθος στη κλάση/ΣΑΣ/επικάλυψη[] και για του λόγου το αληθές: Code: #include <iostream.h> edit: ψάχνοντας στα γρήγορα, απότι φαίνεται είναι θέμα μνήμης http://www.faqs.org/qa/qa-673.html μπορεί να μην είναι σωστή η δέσμευση (να επιστρέφει για κάποιο λόγο NULL), μπορεί η heap σου να είναι γεμάτη και άλλα τόσα μπορεί Title: Re: [C++] 4η εργασία 2008 Post by: pitsa on November 16, 2008, 22:22:45 pm to μόνο που έχουμε διαφορετικό είναι ο constructor,αλλά και πάλι δεν έβγαλε πρόβλημα με τους υπόλοιπου πίνακες...μόνο με αυτόν τον τελευταίο......... δεν ξέρω..
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 16, 2008, 22:23:03 pm μηπως βαζεις INT MAIN() kai meta sto telos den ebales return 0; ?
o c ομως πρεπει να χει τις διαστασεις a*b για να γινει η προσθεση α*β+c Title: Re: [C++] 4η εργασία 2008 Post by: Anyparktos on November 16, 2008, 23:07:17 pm Παιδια μηπως μπορείτε να μου πείτε μέχρι ποιο σημείο της ύλης να διαβάσω για να μπορεσω να γράψω την εργασία?Θέλει περισσότερο από επικάλυψη τελεστών?Thanx in advance ^^
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 16, 2008, 23:34:13 pm Παιδια μηπως μπορείτε να μου πείτε μέχρι ποιο σημείο της ύλης να διαβάσω για να μπορεσω να γράψω την εργασία?Θέλει περισσότερο από επικάλυψη τελεστών?Thanx in advance ^^ Όχι δε νομίζω να θέλει κάτι άλλο Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 17, 2008, 01:26:35 am Εμενα δημιουγειται προβλημα στον τελεστη =
Συγκεκριμενα, ο,τι τιμη και να δωσω στις διαστασεις, ο αριθμος γραμμων και στηλων που λαμβανονται υποψη στη υπερφορτωση του =, ειναι μοναδα.. οριστε και ο κωδικας συγκεκριμενα Code: f_matrix f_matrix::operator = (f_matrix b) { οταν κανω εκει μεσα cout<<"k="<<sizeof(mat)/sizeof(mat[0])<<"\n"; cout<<"l="<<sizeof(mat[0])/sizeof(mat[0][0])<<"\n"; μου εμφανιζει k=1 l=1 με λιγα λογια.. εχω σκεφτει κι αλλους τροπους να παιρνω τις διαστασεις και να τις βαζω εκει..αλλα καμια δε δουλευει.. και ναι, ο τελεστης αγκυλη δουλευει..με δυο διαφορετικους τροπους μαλιστα.. εχω απομονωσει αυτα τα δυο τμηματα του κωδικα και απο οτι φαινεται καπου εδω παιζει μαλακια. α 554 Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 01:36:46 am Αν έχεις πρόβλημα με τις διαστάσεις τότε μπορείς να βάλεις στον constructor 2 μεταβλητές π.χ. m n τις οποίες θα εξισώνεις με τα ορίσματα που θα παίρνει ο constructor από τη main (για να τα χρησιμοποιήσεις στη malloc)
Οι μεταβλητές m και n θα είναι private στη κλάση σου και θα μπορείς να έχεις πρόσβαση όποτε το χρειαστείς. Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 17, 2008, 01:39:07 am Τα κ,λ νομιζω πρεπει να ειναι μεταβλητες τις κλασεις αν το εκανες ετσι γιατι τισ ξαναδηλωνεις
το this--> δεν ειμα ι σιγουρος πως δουλευει :-\ δοκιμασε αυτο f_matrix f_matrix::operator=(f_matrix w){ int i,j; for(i=0;i<h;i++){ for(j=0;j<r;j++){ p[ i ][j]=w.p[ i ][j]; } } return *this; } Title: Re: [C++] 4η εργασία 2008 Post by: λήθη on November 17, 2008, 01:39:25 am Αν έχεις πρόβλημα με τις διαστάσεις τότε μπορείς να βάλεις στον constructor 2 μεταβλητές π.χ. m n τις οποίες θα εξισώνεις με τα ορίσματα που θα παίρνει ο constructor από τη main (για να τα χρησιμοποιήσεις στη malloc) Οι μεταβλητές m και n θα είναι private στη κλάση σου και θα μπορείς να έχεις πρόσβαση όποτε το χρειαστείς. Oh brother..thanq.. εχω στουμπωσει μετα απο τοσες ωρες εδω πανω αρρωστια λεμε, αρρωστια! α 555 Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 17, 2008, 01:39:59 am Eμενα Κρασαρει οταν το τρεχω οταν ειναι να βαλω τα στοιχεια του πινακα! Το προβλημα ειναι μεσα στην for??
Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 02:04:00 am Eμενα Κρασαρει οταν το τρεχω οταν ειναι να βαλω τα στοιχεια του πινακα! Το προβλημα ειναι μεσα στην for?? Πιθανότατα. Και μένα τότε ήθελε να στείλει γράμμα στη μαμα Μ$ :P Title: Re: [C++] 4η εργασία 2008 Post by: Anyparktos on November 17, 2008, 04:02:05 am Code: #include <iostream.h> Eδω πέρα πως να το κάνω για να μη μου βγάζει undefined symbols n και m?? Title: Re: [C++] 4η εργασία 2008 Post by: Grecs on November 17, 2008, 04:08:01 am Δηλωσε 2 μεταβλητες στην κλαση και στην συναρτηση αρχικων συνθηκων εξισωσε τες με τα n και m
και μετα βαζε αυτες τις μεταβλητες για ορια στην for Title: Re: [C++] 4η εργασία 2008 Post by: Anyparktos on November 17, 2008, 04:21:04 am Thanx man,επιβεβαίωσες ό,τι ακριβώς σκέφτηκα πριν λίγο!
Εχει σημασια αν τις κανω protected ή στο public? Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 04:25:07 am Thanx man,επιβεβαίωσες ό,τι ακριβώς σκέφτηκα πριν λίγο! Εχει σημασια αν τις κανω protected ή στο public? private θα γίνουν (σύμφωνα με την αρχή ενσωμάτωσης), protected δε χρειάζεται αφού δεν έχεις παραγόμενες. Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 11:26:15 am Λοιπόν, έχουμε και λέμε:
ο πίνακας α έχει διαστάσεις nxm(τις οποίες δίνω στη main και επίσης είναι ορίσματα στην αρχικών συνθηκών) ο πίνακας b έχει διαστάσεις mxκάτι άλλο. ο πίνακας c έχει διατσάσεις nxκάτι άλλο και ο πίνακας m έχει διαστάσεις κάτι άλλοxn. Όταν δηλώνω τα αντικείμενα γράφω: f_matrix a(n,m); f_matrix b(m,κάτι άλλο); f_matrix c(n,κάτι άλλο); f_matrix m(κάτι άλλο, n); Σωστά? Στην αρχικών συνθηκών όμως κάνω δέσμευση μόνο για πίνακα nxm.Πως μπορώ να δεσμεύσω μνήμη για τους υπόλοιπους? Τι κάνω λάθος??? Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 11:56:33 am όταν στην main σου δημιουργήσεις αντικείμενο γράφεις
f_matrix A(3,2),B(2,1),C(3,1),M(1,3); Έτσι δίνεις τις διαστάσεις στην constructor σου. Η constructor καλείται κάθε φορά που δημιουργείται ένα νέο αντικείμενο. Οι μεταβλητές m n αφορούν το κάθε αντικείμενο ξεχωριστά. Οπότε όταν ζητείσεις το m για το αντικείμενο Α θα σου επιστρέψει 3. Αν ζητήσεις το ίδιο για το αντικείμενο M θα σου επιστρέψει 1. Το πως θα τα καλέσεις και πως ο compiler ξεχωρίζει σε ποιανού αντικειμένου τη μεταβλητή αναφέρεσαι, συζητήθηκε παραπάνω. Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 12:06:07 pm Δηλαδή δίνω standard διαστάσεις στους πίνακες μου, μέσα από τα αντικείμενα?
Δεν υπάρχει εντολή cout<<"Dose tis diastaseis tou pinaka a\n"; cin>>n; cin>>m; ???? Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 12:15:12 pm Υπάρχει φυσικά!
cout<<"Dose tis diastaseis tou pinaka a\n"; cin>>n; cin>>m; cout<<"Dose th diastash tou pinaka b\n"; cin>>k; f_matrix A(n,m), B(m,k); Μπορείς να αποφύγεις τις πολλές εισόδους διαστάσεων εφαρμόζοντας τη θεωρία. Εδώ, δίνεις μόνο 3 διαστάσεις καθώς η μία διάσταση του Β πρέπει να είναι στάνταρ για να μπορεί να γίνει ο πολλαπλασιασμός. Τα n και m διαφέρουν από τις αντίστοιχες μεταβλητές της κλάσης (αρχή της τοπικότητας) Όταν εμφανιστούν στη δημιουργία αντικειμένου, περνάνε τις τιμές τους στις αντίστοιχες μεταβλητές. Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 12:17:49 pm Στην αρχή το είχα έτσι όπως λες, αλλά μου δημιουργούσε το ίδιο ακριβώς πρόβλημα με αυτό που έχει η pitsa.
Στον πίνακα c ακριβώς πριν το τελευταίο cin σταματάει το πρόγραμμα...και δεν ξέρω τι να κάνω...δλδ δεν ξέρω που είναι το λάθος. :( :( :( Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 12:21:57 pm Αν σου εμφανίζει report to Microsoft τότε είναι θέμα μνήμης, δλδ ξεφεύγεις από τα όρια του πίνακα γράφεις αλλού κτλ
Αν σου κλείνει το παράθυρο τότε έχει να κάνει με τις πράξεις μεταξύ αντικειμένων, κάποια σειρά δεν τηρήθηκε, κάπου τα έμπλεξε με τις διαστάσεις. Είχα τα ίδια προβλήματα. Title: Re: [C++] 4η εργασία 2008 Post by: MARIOS on November 17, 2008, 12:22:24 pm Ο ανάστροφος πίνακας πιος είναι????
Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 12:25:49 pm Ο πίνακας του οποίου τα στοιχεία αντιμεταθέσαμε ως προς την κύρια διαγώνιο
δλδ το Α(i)(j)<->Α(j)(i) Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 12:41:32 pm Μου κλείνει απλά το παράθυρο...
χμμμμμ.... Ας ελέγξω για πολλοστή φορά τον κώδικα μου... ^kremala^ Ευχαριστώ πάντως... ;) Title: Re: [C++] 4η εργασία 2008 Post by: MARIOS on November 17, 2008, 12:51:06 pm Να κάνω και εγώ μια ερώτηση???
Αν και λίγο χαζή??? Στον τελεστή [] το αριστερό όρισμα είνια ένα αντικείμενο τύπου f_matrix και το δεξί ένας int έτσί??? Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 12:55:00 pm ναι
Title: Re: [C++] 4η εργασία 2008 Post by: Antonis87 on November 17, 2008, 13:03:22 pm f_matrix::f_matrix(int k, int l){ int i; m=k; n=l; mat=(float**)malloc(k*sizeof(float*)); for(i=0;i<k;i++)mat=(float*)malloc(l*sizeof(float)); } Το λάθος σου πρεπει να ειναι στην δεσμευση... for(i=0;i<k;i++)mat=(float*)malloc(l*sizeof(float));..αν στην θεση του k εχεις l τοτε δεν γινεται σωστά δεσμευση!!! Title: Re: [C++] 4η εργασία 2008 Post by: 4Dcube on November 17, 2008, 13:04:39 pm Ερώτηση: γιατί ακόμα βλέπω την malloc;
Title: Re: [C++] 4η εργασία 2008 Post by: MARIOS on November 17, 2008, 13:06:46 pm δεν έχει διδάξει ακόμα τον new οπότε θεωρητικά δεν το ξέρουμε ακόμη
Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 13:12:43 pm Code: f_matrix::f_matrix(int k, int l){ Το λάθος σου πρεπει να ειναι στην δεσμευση... for(i=0;i<k;i++)mat=(float*)malloc(l*sizeof(float));..αν στην θεση του k εχεις l τοτε δεν γινεται σωστά δεσμευση!!! Γιατί δεν γίνεται σωστά δέσμευση? Η 1η malloc δεσμεύει πίνακα τύπου kx1 για στοιχεία τύπου float* Οι επόμενες malloc δεσμεύουν πίνακες τύπου lx1 για στοιχεία τύπου float σε κάθε θέση του mat(i) για i=0,1,...k δλδ πίνακας mat kxl Title: Re: [C++] 4η εργασία 2008 Post by: Antonis87 on November 17, 2008, 13:19:21 pm εσυ το εχεις σώστα...η pitsa που ειχε προβλημα με τους πινακες...μηπως στην θεση του k στο for ειχε l και για αυτο να μην καταχωρουνται οι τιμες του πινακα...
Title: Re: [C++] 4η εργασία 2008 Post by: AgentCain on November 17, 2008, 13:22:52 pm ναι μπορεί, εφόσον όμως δεν απάντησε από τότε μαλλον το έλυσε το πρόβλημα :P
Title: Re: [C++] 4η εργασία 2008 Post by: Airmak_gr on November 17, 2008, 13:47:31 pm Paides exw grapsei enan kwdika kai se voitheia me ayta pou lete.......apla thellw kapoios pou na kserei na me pm gia na tou steilw ton kwdika kai na me pei an kanw teleiws paparies kai pws mporw na symplirwsw ta kommatia pou mou leipoun.....opoios mporei na me help thx a lot!!!!
Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 14:26:19 pm Τελικά ψάχνοντας το από δω και από κει διαπίστωσα ότι τον γεμίζει οκ τον πίνακα c, αλλά έχει πρόδληαμ όταν δημιουργώ το αντικέιμενο m...έχω βάλει αν μου εκτυπώνει κάτι και πριν και μετα αλλά τζίφος...
Κάτι τέτοιο δεν πρέπει να κάνουμε:? f_matrix m(l,n); m=~(a*b+c); Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 14:52:48 pm Τελικά ψάχνοντας το από δω και από κει διαπίστωσα ότι τον γεμίζει οκ τον πίνακα c, αλλά έχει πρόδληαμ όταν δημιουργώ το αντικέιμενο m...έχω βάλει αν μου εκτυπώνει κάτι και πριν και μετα αλλά τζίφος... Κάτι τέτοιο δεν πρέπει να κάνουμε:? f_matrix m(l,n); m=~(a*b+c); Ναι, το πιο πιθανό είναι να έχει γίνει λάθος στον πολλαπλασιασμό. Αυτό είναι το πιο δύσκολο κομμάτι. Καλύτερα δοκίμασε έναν έναν τους operators αν λειτουργούν σωστά (τσέκαρε με κάνα matlab ή mathematica) και θα βρεις που είναι το πρόβλημα. Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 14:58:11 pm Τον πολλαπλασιασμό τον έχω ελέγξει χιλιάδες φορές....και μαλιστα ζήτησα τη βοήθεια ενος παιδιού από το έτος μου που είναι πολύ καλός....
ο κώδικάς μου είναι αυτός: f_matrix f_matrix::operator*(f_matrix mul){ int i,j,k; float tm; f_matrix temp(n,l); for(i=0;i<n;i++){ for(j=0;j<l;j++){ tm=0; for(k=0;k<jm;k++){ tm=mat[k]*mul.mat[k][j]; } temp.mat[j]=tm; } } return temp; } n,jm οι διαστάσεις του πίνακα α και l οι στήλες του b... έχει κάποιο λάθος? Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 15:08:15 pm Τον πολλαπλασιασμό τον έχω ελέγξει χιλιάδες φορές....και μαλιστα ζήτησα τη βοήθεια ενος παιδιού από το έτος μου που είναι πολύ καλός.... ο κώδικάς μου είναι αυτός: f_matrix f_matrix::operator*(f_matrix mul){ int i,j,k; float tm; f_matrix temp(n,l); for(i=0;i<n;i++){ for(j=0;j<l;j++){ tm=0; for(k=0;k<jm;k++){ tm=mat[k]*mul.mat[k][j]; } temp.mat[j]=tm; } } return temp; } n,jm οι διαστάσεις του πίνακα α και l οι στήλες του b... έχει κάποιο λάθος? Έχει ένα λαθάκι ,αλλά δε νομίζω να έφταιγε αυτό. Code: tm=mat[i][k]*mul.mat[k][j]; Θέλει ένα + πριν το = για να τα προσθέτει, δλδ Code: tm+=mat[i][k]*mul.mat[k][j]; Title: Re: [C++] 4η εργασία 2008 Post by: pstp on November 17, 2008, 15:12:36 pm σωστά, μου ξέφυγε...thanks!
Αλλά όντως το πρόβλημα είανι αλλού... Title: Re: [C++] 4η εργασία 2008 Post by: Errikos on November 17, 2008, 17:00:22 pm ενδιαφέρον, μου τρέχει το πρόγραμμα διαβάζει κανονικά τα στοιχεία του πίνακα, δεσμεύει κανονικά μνήμη για όλους και...αυτό! Δεν κάνει τίποτα παραπάνω ... έχω βάλει την πράξη αλλά δεν μου εμφανίζει τίποτα..δοκίμασα αφού διαβάσω τους πίνακες να εμφανίσω έναν αλλά και πάλι δεν μου εμφανίζει τίποτα..αφού διαβάσω τα στοιχεία τελειώνει το πρόγραμμα,
any idea? Title: Re: [C++] 4η εργασία 2008 Post by: costas122 on November 17, 2008, 17:20:29 pm Τον πολλαπλασιασμό τον έχω ελέγξει χιλιάδες φορές....και μαλιστα ζήτησα τη βοήθεια ενος παιδιού από το έτος μου που είναι πολύ καλός.... ο κώδικάς μου είναι αυτός: f_matrix f_matrix::operator*(f_matrix mul){ int i,j,k; float tm; f_matrix temp(n,l); for(i=0;i<n;i++){ for(j=0;j<l;j++){ tm=0; for(k=0;k<jm;k++){ tm=mat[k]*mul.mat[k][j]; } temp.mat[j]=tm; } } return temp; } Auto to jm sto loop me to k, apo pou tha to pernei??? logika o operator den dexete orismata... :( :-\ :D :o Title: Re: [C++] 4η εργασία 2008 Post by: Καμένος on November 17, 2008, 17:28:40 pm Μάλλον j είναι και καταλάθος πάτησε και το m..
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 17:34:32 pm Όχι σωστά το έχει, είναι οι διαστάσεις που τις έχει αποθηκεύσει στην κλάση κατά τη συνάρτηση αρχ συνθ.
Title: Re: [C++] 4η εργασία 2008 Post by: Wanderer on November 17, 2008, 17:49:05 pm ενδιαφέρον, μου τρέχει το πρόγραμμα διαβάζει κανονικά τα στοιχεία του πίνακα, δεσμεύει κανονικά μνήμη για όλους και...αυτό! Δεν κάνει τίποτα παραπάνω ... έχω βάλει την πράξη αλλά δεν μου εμφανίζει τίποτα..δοκίμασα αφού διαβάσω τους πίνακες να εμφανίσω έναν αλλά και πάλι δεν μου εμφανίζει τίποτα..αφού διαβάσω τα στοιχεία τελειώνει το πρόγραμμα, Βάλε την εντολή system("pause"); στο τέλος του προγράμματός σου :???: Title: Re: [C++] 4η εργασία 2008 Post by: costas122 on November 17, 2008, 18:02:21 pm Όχι σωστά το έχει, είναι οι διαστάσεις που τις έχει αποθηκεύσει στην κλάση κατά τη συνάρτηση αρχ συνθ. Με τη συν. αρχικών συνθηκών μόνο τις 2 διαστάσεις δίνουμε... Την 3η (την κοινή για τους 2 πίνακες) πως την παίρνει??? Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 18:06:59 pm Όχι σωστά το έχει, είναι οι διαστάσεις που τις έχει αποθηκεύσει στην κλάση κατά τη συνάρτηση αρχ συνθ. Με τη συν. αρχικών συνθηκών μόνο τις 2 διαστάσεις δίνουμε... Την 3η (την κοινή για τους 2 πίνακες) πως την παίρνει??? Έχει όμως 2 αντικείμενα (πίνακες) στη συνάρτηση, άρα για τον καθένα παίρνει τις διαστάσεις του και χρησιμοποιεί όποιες χρειάζεται Title: Re: [C++] 4η εργασία 2008 Post by: costas122 on November 17, 2008, 18:24:46 pm Όχι σωστά το έχει, είναι οι διαστάσεις που τις έχει αποθηκεύσει στην κλάση κατά τη συνάρτηση αρχ συνθ. Με τη συν. αρχικών συνθηκών μόνο τις 2 διαστάσεις δίνουμε... Την 3η (την κοινή για τους 2 πίνακες) πως την παίρνει??? Έχει όμως 2 αντικείμενα (πίνακες) στη συνάρτηση, άρα για τον καθένα παίρνει τις διαστάσεις του και χρησιμοποιεί όποιες χρειάζεται Σωστός! Thx! Title: Re: [C++] 4η εργασία 2008 Post by: Salvation on November 17, 2008, 19:14:08 pm Παιδιά μπορεί κάποιος να με βοηθήσει με τον αλγόριθμο υλοποίησης του πολ/σμού των πινάκων;
Thanks Title: Re: [C++] 4η εργασία 2008 Post by: kostakiss on November 17, 2008, 19:18:03 pm einai kapws etsi
for(i=0;i<M;i++) {for(i=0;j<M;j++) {c[j]=0; for(k=0;k<M;k++) c[j]+=a[k]*b[k][j]; } } ΜΗΠΩΣ ΜΠΟΡΕΙ ΝΑ Μ ΠΕΙ ΚΑΠΟΙΟΣ ΓΙΑΤΙ ΜΟΥ BΓΑΖΕΙ "ILLEGAL STRUCTURE OPERATOR" ΟΤΑΝ ΓΡΑΦΩ M=~(A*B+C) Title: Re: [C++] 4η εργασία 2008 Post by: kostakiss on November 17, 2008, 19:21:12 pm ΣΥΓΝΩΜΗ ΔΕΝ ΤΟ ΕΠΙΑΣΕ ΚΑΛΑ!!!!
for(i=0;i<M;i++) {for(i=0;j<M;j++) {c[ι][j]=0; for(k=0;k<M;k++) c[ι][j]+=a[ι][k]*b[k][j]; } } Title: Re: [C++] 4η εργασία 2008 Post by: Salvation on November 17, 2008, 19:37:07 pm Μήπως τα j και k είναι μέχρι Ν??
Title: Re: [C++] 4η εργασία 2008 Post by: Matzika on November 17, 2008, 22:08:09 pm Μια βοήθεια!
Εχω γράψει αυτον τον κώδικα για την επικάλυψη του τελεστη + f_matrix f_matrix::operator+(f_matrix t){ f_matrix obj; for(i=0;i<v;i++){ for(j=0;j<p;j++){ obj.matrix[j]=matrix[j]+t.matrix[j]; } } return obj; } και μ βγάζει τα παρακάτω λάθη: "no matching function for call f_matrix::f_matrix()" και μετα μ δίνει κάτι επιλογες να βάλω σαν όρισμα const... μήπως μπορεί κανείς να βοηθήσει? Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 17, 2008, 22:15:02 pm Μια βοήθεια! Εχω γράψει αυτον τον κώδικα για την επικάλυψη του τελεστη + f_matrix f_matrix::operator+(f_matrix t){ f_matrix obj; for(i=0;i<v;i++){ for(j=0;j<p;j++){ obj.matrix[j]=matrix[j]+t.matrix[j]; } } return obj; } και μ βγάζει τα παρακάτω λάθη: "no matching function for call f_matrix::f_matrix()" και μετα μ δίνει κάτι επιλογες να βάλω σαν όρισμα const... μήπως μπορεί κανείς να βοηθήσει? Στο obj πρέπει να βάλεις και ορίσματα για τη συνάρτηση αρχ. συνθ. Title: Re: [C++] 4η εργασία 2008 Post by: Matzika on November 17, 2008, 22:28:04 pm σε ευχαριστώ πολύ!!!ειχα κολλησει...
Title: Re: [C++] 4η εργασία 2008 Post by: Matzika on November 17, 2008, 22:33:41 pm τώρα όμως μ βγάζει το εξης πρόλημα στον κώδικα¨
f_matrix operator+(f_matrix t,f_matrix k){ f_matrix obj(v,p); for(i=0;i<v;i++){ for(j=0;j<p;j++){ obj.matrix[j]=t.matrix[j]+k.matrix[j]; } } return obj; } δεν μ αναγνωρίζει τα v και p ως ορίσματα...ενω στο loop παρακάτω δεν βγάζει πρόβλημα...γιατί? Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 17, 2008, 22:39:31 pm vale ena orisma px
f_matrix f_matrix::operator+(f_matrix w){ int i,j; for(i=0;i<r;i++){ for(j=0;j<h;j++){ w.p[ i ][j]=p[ i] [j]+w.p[ i ][j]; } } return w; } Title: Re: [C++] 4η εργασία 2008 Post by: tomshare3 on November 17, 2008, 22:59:34 pm εχω το εξης προβλημα.. ο compiler βγαζει linker warning: "no module definition file specified:using defaults.." απο'τι εχω καταλαβει το προβλημα βρισκεται στη malloc.. αλλα δεν μπορω να βρω που..
Code: f_matrix::f_matrix (int m,int n){ που κανω λαθος?.. Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 17, 2008, 23:02:07 pm evales #include <stdlib.h>?
Title: Re: [C++] 4η εργασία 2008 Post by: tomshare3 on November 17, 2008, 23:22:26 pm ναι.. ο compiler δεν βγαζει καποιο λαθος.. μονο αυτο το warning.. το προγραμμα τρεχει κανονικα αλλα δεν μπορει να δεσμευσει την μνημη.. η malloc επιστρεφει null
Title: Re: [C++] 4η εργασία 2008 Post by: radio on November 17, 2008, 23:33:35 pm ti compiler exeis? dokimase na kaneis apeutheias tin desmeush sto mat xwris 'boithitiki' metabliti...
Title: Re: [C++] 4η εργασία 2008 Post by: tomshare3 on November 17, 2008, 23:49:11 pm το δοκιμασα με απευθειας αλλα το ιδιο... το warning βγαινει στον borland.. αλλα το δοκιμασα και σε dev k se visual studio.. και σ αυτα δεν βγαζει warning.. χειροτερα κολλαει το pc... γραφει συνεχομενα σε ολη την μνημη..
Title: Re: [C++] 4η εργασία 2008 Post by: Emfanever on November 18, 2008, 00:01:34 am εχω το εξης προβλημα.. ο compiler βγαζει linker warning: "no module definition file specified:using defaults.." απο'τι εχω καταλαβει το προβλημα βρισκεται στη malloc.. αλλα δεν μπορω να βρω που.. Code: f_matrix::f_matrix (int m,int n){ που κανω λαθος?.. Στο for είναι μέχρι m όχι n for (i=0;i<m;i++){ Title: Re: [C++] 4η εργασία 2008 Post by: tomshare3 on November 18, 2008, 00:11:02 am μου ειχε ξεφυγει αυτο!! thanks! μαλλον εκει ειναι το λαθος
|