THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: Toushiro on December 04, 2007, 13:25:09 pm



Title: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Toushiro on December 04, 2007, 13:25:09 pm
Να γραφεί το πρόγραμμα στο οποίο ορίζονται:

α) Η κλάση Α η οποία περιέχει ως protected στοιχεία τον ακέραιο n και τη μεταβλητή p τύπου pointer σε pointer τύπου int. Η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να δέχεται ως όρισμα την τιμή του n και να δεσμεύει δυναμικά μνήμη έτσι ώστε η μεταβλητή p να μπορεί να χρησιμοποιηθεί ως πίνακας τύπου nxn. Η ίδια συνάρτηση να διαβάζει από το πληκτρολόγιο και τις τιμές των στοιχείων του πίνακα.

 β) Η κλάση Β ως public παραγόμενη από την Α η οποία να περιέχει ως private στοιχεία τον ακέραιο k και τη μεταβλητή d τύπου pointer σε pointer τύπου int. Η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να δέχεται ως όρισμα την τιμή του k και να δεσμεύει δυναμικά μνήμη έτσι ώστε η μεταβλητή d να μπορεί να χρησιμοποιηθεί ως πίνακας τύπου kxk. Η ίδια συνάρτηση να διαβάζει από το πληκτρολόγιο και τις τιμές των στοιχείων του πίνακα

Στο πρόγραμμα να οριστούν ακόμη:

Μια επικάλυψη του τελεστή * η οποία να επιστρέφει ως τιμή της έκφρασης a*b, όπου a και b αντικείμενα τύπου Α, έναν pointer σε pointer τύπου int ο οποίος αν χρησιμοποιηθεί ως πίνακας τύπου nxn να περιέχει το γινόμενο των πινάκων (a.p)*(b.p).

Οι κατάλληλες επικαλύψεις  του τελεστή [ ] έτσι ώστε οι εκφράσεις a και b, όπου a αντικείμενο τύπου Α και b αντικείμενο τύπου Β, να επιστρέφουν το άθροισμα των στοιχείων της i γραμμής των πινάκων p και d των αντίστοιχων κλάσεων.

Μια επικάλυψη του τελεστή ( ) η ποία να επιστρέφει ως τιμή της έκφρασης b(i,j), όπου b αντικείμενο τύπου Β, το εσωτερικό γινόμενο των στοιχείων της i γραμμής του πίνακα p και της j στήλης του πίνακα d.

Η συνάρτηση main() στην οποία να διαβάζεται η τιμή του n, να ορίζεται το αντικείμενο a τύπου Α και το αντικείμενο b τύπου Β στα οποία η συναρτήσεις αρχικών συνθηκών να δεσμεύουν μνήμη για πίνακες τύπου nxn. Στη συνέχεια να υπολογίζεται με τη βοήθεια των τελεστών που επικαλύφτηκαν το γινόμενο των πινάκων a.p*b.p, το οποίο να είναι το περιεχόμενο του πίνακα b.d, το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Jalk on December 05, 2007, 06:02:17 am
Ναι Κορτέση...μπορείς και πιο άθλια εκφώνηση...!  >:( >:( >:(

Keep walking!  ;D


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Toushiro on December 05, 2007, 12:06:10 pm
Σ' αυτό θα συμφωνήσω. Ειδικά στην επικάληψη του τελεστή * εκείνο το "(a.p)*(b.p)".


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: TeeKay on December 05, 2007, 21:42:00 pm
Ρε παιδιά, στη main ζητάει να δημιουργησουμε δυο αντικειμενα, ενα τυπου Α κι ενα τυπου Β. Στη συναρτηση αρχικών συνθηκων της Β θα πρεπει να γραψουμε κατι του τυπου:
Code:
B::B(int l):A(n)
για να στελνει το η στην Α; Όταν δε γράφω το :Α(η) μου λεει "no matching function to call". Αν βάλω μια default συναρτηση αρχικών συνθηκών θα λυθει το προβλημα;  :???:


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: fantomas on December 06, 2007, 12:39:26 pm
Ρε παιδιά, στη main ζητάει να δημιουργησουμε δυο αντικειμενα, ενα τυπου Α κι ενα τυπου Β. Στη συναρτηση αρχικών συνθηκων της Β θα πρεπει να γραψουμε κατι του τυπου:
Code:
B::B(int l):A(n)
για να στελνει το η στην Α; Όταν δε γράφω το :Α(η) μου λεει "no matching function to call". Αν βάλω μια default συναρτηση αρχικών συνθηκών θα λυθει το προβλημα;  :???:
Αφού δεν έχεις πολλαπλή κληρονομικότητα γιατί να το κάνεις αυτό->
Β::Β(int):A(n)?
Όντως η 2η πιο άθλια εκφώνηση κερδίζει με διαφορά την προηγούμενη...... >:(


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Masked_senses on December 06, 2007, 17:54:04 pm
Τι εκφωνηση ειναι αυτη???


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 07, 2007, 05:25:41 am
Παιδιά, όντως η εκφώνηση είναι δυσνόητη. Μοιάζει λίγο με τη λογική του γρίφου του αϊνστάιν :P

Θα βοηθούσε αν περιέγραφε την ακριβή λογική του προγράμματος στην αρχή χωρίς να αναφέρει επακριβώς τις τεχνικές; Σαν μια περίληψη του τι κάνει.
Για να το προτείνουμε δλδ.

Ρε παιδιά, στη main ζητάει να δημιουργησουμε δυο αντικειμενα, ενα τυπου Α κι ενα τυπου Β. Στη συναρτηση αρχικών συνθηκων της Β θα πρεπει να γραψουμε κατι του τυπου:
Code:
B::B(int l):A(n)
για να στελνει το η στην Α; Όταν δε γράφω το :Α(η) μου λεει "no matching function to call". Αν βάλω μια default συναρτηση αρχικών συνθηκών θα λυθει το προβλημα;  :???:
Αφού δεν έχεις πολλαπλή κληρονομικότητα γιατί να το κάνεις αυτό->
Β::Β(int):A(n)?
Μπορείς να το κάνεις και σε απλή κληρονομικότητα, όταν θέλεις να δώσεις τιμή στον constructor της συνάρτησης βάσης, αλλά πρέπει να βάλεις
B::B(int mplampla,int n):A(n)



Εμένα με μπερδεύει λίγο ο πολλαπλασιασμός των πινάκων... Εφόσον σου ζητάει να βρεις το
b.d =a.p * b.p
σημαίνει ότι το k=n, και ο πολλαπλασιασμός θα γίνεται nxn επί nxn ίσον nxn.
Δλδ κάποιες μεταβλητές θα μπορούσαν να μη χρησιμοποιούνται.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Masked_senses on December 07, 2007, 17:03:25 pm
Βασικα απο που κ ως που το n του a ειναι ισο με το n του b, ωστε το γινομενο να ειναι nxn και να ειναι δυνατο να πολλ/στουν...???


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Masked_senses on December 07, 2007, 17:12:52 pm
Οκ ... λογικα θα χρειαζεται μια if ... My bad ...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: ilovegreece on December 07, 2007, 20:10:31 pm
Βασικα απο που κ ως που το n του a ειναι ισο με το n του b, ωστε το γινομενο να ειναι nxn και να ειναι δυνατο να πολλ/στουν...???

Οι πινακες "τυπου **p" στον πολλαπλασιασμο ειναι του ιδιου τυπου αφου δεσμευω και για τους δυο μνημη για n στοιχεια.(Η συνάρτηση main() στην οποία να διαβάζεται η τιμή του n, να ορίζεται το αντικείμενο a τύπου Α και το αντικείμενο b τύπου Β στα οποία η συναρτήσεις αρχικών συνθηκών να δεσμεύουν μνήμη για πίνακες τύπου nxn.)Οποτε ο πολλαπλασιασμος θα εχει σαν αποτελεσμα τετραγωνικο πινακα nxn "τυπου **d" οπου k=n.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Mikros_Nikolas on December 07, 2007, 20:35:41 pm
Η συνάρτηση main, λέει, να υπολογίζει το γινόμενο των πινάκων a.p*b.p όπου a αντικείμενο κλάσης A και b αντικείμενο κλάσης B.
Όμως προηγουμένως ζητάει να κάνουμε επικάλυψη του τελεστή * που εφαρμόζεται σε 2 αντικείμενα a,b που ανήκουν στην ίδια κλάση, δηλαδή την Α.

Μήπως παίζει κάποιο ρόλο η κληρονομικότητα? Δηλαδή ο compiler βλέπει <αντικείμενο Α*αντικείμενο Β> και το εκτελεί χρησιμοποιώντας τα στοιχεία που κληρονόμησε το αντικείμενο κλάσης Β από την κλάση Α??


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Mikros_Nikolas on December 08, 2007, 01:02:04 am
Συγγνώμη για τα συνεχόμενα ποστ αλλά έφριξα.

Μια επικάλυψη του τελεστή ( ) η ποία να επιστρέφει ως τιμή της έκφρασης b(i,j), όπου b αντικείμενο τύπου Β, το εσωτερικό γινόμενο των στοιχείων της i γραμμής του πίνακα p και της j στήλης του πίνακα d.

και πιό μετά..
          .
          .
          .
και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Wade on December 08, 2007, 01:04:37 am
Ρωτήσαμε τον κ. Κορτέση γι' αυτό το θέμα, και μας είπε ότι η εκφώνηση δεν είναι λάθος.  Θα πρέπει να σκεφτούμε ένα τέχνασμα για να προσαρμόσουμε τον τελεστή στις ανάγκες του ζητούμενου ;)  Δηλαδή ο τελεστής ακόμα πρέπει να υπολογίζει γραμμή*στήλη, αλλά εμείς πρέπει να κάνουμε ένα τέχνασμα για να δώσει γραμμή*γραμμή...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Mikros_Nikolas on December 08, 2007, 01:10:21 am
Ευχαριστώ.
Όπως και να χει το προγραμμα θα μου βγει καμια 200αρια γραμμές.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: vasso on December 08, 2007, 01:20:38 am
ΠΡΟΣΟΧΗ:



Οι κατάλληλες επικαλύψεις  του τελεστή [ ] έτσι ώστε οι εκφράσεις a[i.] και b[i.], όπου a αντικείμενο τύπου Α και b αντικείμενο τύπου Β, να επιστρέφουν το άθροισμα των στοιχείων της i γραμμής των πινάκων p και d των αντίστοιχων κλάσεων.

Μια επικάλυψη του τελεστή ( ) η ποία να επιστρέφει ως τιμή της έκφρασης b(i,j), όπου b αντικείμενο τύπου Β, το εσωτερικό γινόμενο των στοιχείων της i γραμμής του πίνακα p και της j στήλης του πίνακα d.

Η συνάρτηση main() στην οποία να διαβάζεται η τιμή του n, να ορίζεται το αντικείμενο a τύπου Α και το αντικείμενο b τύπου Β στα οποία η συναρτήσεις αρχικών συνθηκών να δεσμεύουν μνήμη για πίνακες τύπου nxn. Στη συνέχεια να υπολογίζεται με τη βοήθεια των τελεστών που επικαλύφτηκαν το γινόμενο των πινάκων a.p*b.p, το οποίο να είναι το περιεχόμενο του πίνακα b.d, το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1

μου πήρε αρκετή ώρα τζάμπα σκέψης για να καταλάβω τι σκατά θα κάνει ο τελεστής [] έτσι ώστε οι εκφράσεις a και b θα κάνουν αυτό που λέει παρακάτω. Τελικά απλά ήταν μπέρδεμα της γλώσσας. Να μάθω άλλη φορά να βαριέμαι να πάω ως το ethmmy...

υγ. Όλως περιέργως, δεν αντιμετώπισα άλλο πρόβλημα με την (ορίτζιναλ) εκφώνηση.. Ίσως όταν έχεις συνηθίσει τον ίδιο τον Κορτέση και τους αλγορίθμους του στο μάθημα διαβάζεις πίσω από τις γραμμές :P[/κάψιμο]


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: fantomas on December 08, 2007, 13:37:33 pm
Βασικά, ο πρώτος που θα την υλοποιήσει κ θα τρέχει ρολόι, ας κάνει ένα κόπο να την ανεβάσει στο thmmy γιατί μας έχουν βγει τα μάτια....... :P :P :P
ΕΛΕΟΣ :D :D :D :D


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: TED on December 09, 2007, 02:38:00 am
Ελάτε ρε παιδιά, μπορεί να είναι κάπως μεγάλη η εργασία αλλά δεν είναι και τόσο δύσκολη... Σαν τις περσυνές δεν είναι με τίποτα! Απλώς πρέπει να προσέξουμε τα points της κάθε άσκησης...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: TED on December 09, 2007, 02:42:00 am
Ρωτήσαμε τον κ. Κορτέση γι' αυτό το θέμα, και μας είπε ότι η εκφώνηση δεν είναι λάθος.  Θα πρέπει να σκεφτούμε ένα τέχνασμα για να προσαρμόσουμε τον τελεστή στις ανάγκες του ζητούμενου ;)  Δηλαδή ο τελεστής ακόμα πρέπει να υπολογίζει γραμμή*στήλη, αλλά εμείς πρέπει να κάνουμε ένα τέχνασμα για να δώσει γραμμή*γραμμή...


προφανώς θα πρέπει να κάνουμε μια συνάρτηση αντιστροφής του πίνακα B.p...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Mikros_Nikolas on December 09, 2007, 13:20:47 pm
Ρωτήσαμε τον κ. Κορτέση γι' αυτό το θέμα, και μας είπε ότι η εκφώνηση δεν είναι λάθος.  Θα πρέπει να σκεφτούμε ένα τέχνασμα για να προσαρμόσουμε τον τελεστή στις ανάγκες του ζητούμενου ;)  Δηλαδή ο τελεστής ακόμα πρέπει να υπολογίζει γραμμή*στήλη, αλλά εμείς πρέπει να κάνουμε ένα τέχνασμα για να δώσει γραμμή*γραμμή...


προφανώς θα πρέπει να κάνουμε μια συνάρτηση αντιστροφής του πίνακα B.p...
Πιό σωστά, αναστροφής του πίνακα( οι γραμμές στήλες και οι στήλες γραμμές)
Η αντιστροφή είναι άλλο πράγμα.
(ελπίζω να θυμάμαι σωστά τους ορισμούς στην Γραμμική Άλγεβρα!)
Εγώ πάντως ανέστρεψα τον πίνακα b.d


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: xXx on December 10, 2007, 15:25:30 pm
η αναστροφη του πινακα μπορει να γινει με καποια ετοιμη συναρτηση βιβλιοθηκης ή θα πρεπει να την φτιαξουμε εμεις;
και ο πολλαπλασιασμος a.p*b.p πως θα γινει εφοσον το επικαλυπσαμε για αντικειμενα κλασσης Α αλλα εδω το b ειναι κλασσης Β


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 16:33:34 pm
Code:
void B::operator*(B **bp)
{
                 int i,j,l;
                 for(i=0; i<n; i++)
                          for(j=0; j<n; j++){
                                             d[i][j]=0;
                                             for(l=0; l<n; l++)d[i][j]+=p[i][l]*bp[l][j];
                                             }
}
Γιατί στο τελευταίο for μου βγάζει no match for 'operator*' ??
plz help! Πριν κόλλησα μισή ώρα που είχα ξεχάσει ένα ;
^sfyri^ ^rotate^


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: trelos on December 10, 2007, 16:43:06 pm
ο operator * πρεπει να επιστρεφει **int,επομενως δεν ειναι void.επισης πρεπει να πολ/ζει 2 αντικειμενα τυπου Α.
η κλαση Β δεν κολλαει δηλαδη.χρησιμοποιησε αυτο :int** A::operator*(A b){......}στον πινακα που βαζεις το γινομενο χρειαζεται νμζ παλι δυναμικη δεσμευση μνημης.
ελπιζω να βοηθησα...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 17:12:36 pm
ο operator * πρεπει να επιστρεφει **int,επομενως δεν ειναι void.επισης πρεπει να πολ/ζει 2 αντικειμενα τυπου Α.
η κλαση Β δεν κολλαει δηλαδη.χρησιμοποιησε αυτο :int** A::operator*(A b){......}στον πινακα που βαζεις το γινομενο χρειαζεται νμζ παλι δυναμικη δεσμευση μνημης.
ελπιζω να βοηθησα...
Η επικάλυψη δυαδικού μου τελεστή χρειάζεται μόνο ένα αντικείμενο τύπου Β, όπως το ζητάει. Το αν η συνάρτηση δίνει αποτέλεσμα ή όχι, αυτό δεν παίζει ρόλο, μπορώ να το αλλάξω. Από δυναμική δεύσμευση είμαστε οκ.

Το ερώτημα είναι γιατί μου βρίσκει συντακτικό λάθος! Γιατί?? Κατάρα!


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: socrates on December 10, 2007, 17:47:17 pm
ο operator * πρεπει να επιστρεφει **int,επομενως δεν ειναι void.επισης πρεπει να πολ/ζει 2 αντικειμενα τυπου Α.
η κλαση Β δεν κολλαει δηλαδη.χρησιμοποιησε αυτο :int** A::operator*(A b){......}στον πινακα που βαζεις το γινομενο χρειαζεται νμζ παλι δυναμικη δεσμευση μνημης.
ελπιζω να βοηθησα...
Η επικάλυψη δυαδικού μου τελεστή χρειάζεται μόνο ένα αντικείμενο τύπου Β, όπως το ζητάει. Το αν η συνάρτηση δίνει αποτέλεσμα ή όχι, αυτό δεν παίζει ρόλο, μπορώ να το αλλάξω. Από δυναμική δεύσμευση είμαστε οκ.

Το ερώτημα είναι γιατί μου βρίσκει συντακτικό λάθος! Γιατί?? Κατάρα!

Επίτρεψε μου...

void B::operator*(int**bp)
{
                 int i,j,l;
                 for(i=0; i<n; i++)
                          for(j=0; j<n; j++){
                                             d[j]=0;
                                             for(l=0; l<n; l++)d[j]+=p[l]*bp[l][j];

}

ή διαφορετικά...

void B::operator*(B bp)
{
                 int i,j,l;
                 for(i=0; i<n; i++)
                          for(j=0; j<n; j++){
                                             d[j]=0;
                                             for(l=0; l<n; l++)d[j]+=p[l]*bp.d[l][j];                                             }
}
}

Tώρα? είναι καλύτερα..

Πριν έδιδες ως όρισμα pointer σε pointer σε Β...οπότε πράξη άγνωστη..:)


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: tosodoulis18 on December 10, 2007, 18:16:06 pm
O πολλαπλασιασμος a.p*b.p πως θα γινει εφοσον το επικαλυπσαμε για αντικειμενα κλασσης Α αλλα εδω το b ειναι κλασσης Β? Θα αντιγραψω τα αντικειμενα από το b.d στον b.p και μετα θα την κανω?


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 18:21:16 pm
Μπράβο ρε σωκράτη, αυτό είναι! :)
Ευχαριστώ!


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Ianna on December 10, 2007, 18:35:32 pm
  d[j]=0;
                                             for(l=0; l<n; l++)d[j]+=p[l]*bp.d[l][j];         


Ρε παιδιά,ο τελεστής * κάνει πολλαπλασιασμό πινάκων.εδώ παραπάνω γιατί βάλατε να κρατάει και το σύνολο?Δεν το πιασα. :???:


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 18:40:19 pm
O πολλαπλασιασμος a.p*b.p πως θα γινει εφοσον το επικαλυπσαμε για αντικειμενα κλασσης Α αλλα εδω το b ειναι κλασσης Β? Θα αντιγραψω τα αντικειμενα από το b.d στον b.p και μετα θα την κανω?
Εφόσον η B κληρονομεί την Α, το αντικείμενο b που είναι κλάσης Β θα έχει και τα στοιχεία της Α.

Το πρόβλημα είναι πώς θα ονοματίσομε την πράξη, γιατί στην main να βάλουμε a.p*b.p δε γίνεται... Είναι και οι δυο private.

  d[j]=0;
                                             for(l=0; l<n; l++)d[j]+=p[l]*bp.d[l][j];        


Ρε παιδιά,ο τελεστής * κάνει πολλαπλασιασμό πινάκων.εδώ παραπάνω γιατί βάλατε να κρατάει και το σύνολο?Δεν το πιασα. :???:
Μην μπερδεύεσαι, αυτή είναι η συνάρτηση-μέλος της κλάσης όπου ακριβώς γίνεται η επικάλυψη του πολ/σμού.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: pitsa on December 10, 2007, 18:47:46 pm
"Μια επικάλυψη του τελεστή ( ) η ποία να επιστρέφει ως τιμή της έκφρασης b(i,j), όπου b αντικείμενο τύπου Β, το εσωτερικό γινόμενο των στοιχείων της i γραμμής του πίνακα p και της j στήλης του πίνακα d. "

ok ίσως ηλίθια ερώτηση,αλλά όταν λέει εσωτερικό γινόμενο των στοιχείων,εννοεί το πρώτο με το πρώτο,το δεύτερο με το δε'υτερο κτλ..?


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: tosodoulis18 on December 10, 2007, 18:48:08 pm
Θα εχει τα στοιχεια, αλλα τις τιμες θα τις παρει? Την * θα την ορισουμε φιλική και στις 2?


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: stefos on December 10, 2007, 18:50:31 pm


Το πρόβλημα είναι πώς θα ονοματίσομε την πράξη, γιατί στην main να βάλουμε a.p*b.p δε γίνεται... Είναι και οι δυο private.



Θα φτιάξεις μια συναρτηση μέλος στη Β με την οποία θα κανεις την πραξη του γινομενου.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 18:54:05 pm


Το πρόβλημα είναι πώς θα ονοματίσομε την πράξη, γιατί στην main να βάλουμε a.p*b.p δε γίνεται... Είναι και οι δυο private.



Θα φτιάξεις μια συναρτηση μέλος στη Β με την οποία θα κανεις την πραξη του γινομενου.
Ε ναι.
Αλλά τότε ποιο το νόημα της επικάλυψης?
(τα υπαρξιακά ερωτήματα θα μας φάνε)


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: pitsa on December 10, 2007, 19:00:23 pm


Το πρόβλημα είναι πώς θα ονοματίσομε την πράξη, γιατί στην main να βάλουμε a.p*b.p δε γίνεται... Είναι και οι δυο private.



Θα φτιάξεις μια συναρτηση μέλος στη Β με την οποία θα κανεις την πραξη του γινομενου.
Ε ναι.
Αλλά τότε ποιο το νόημα της επικάλυψης?
(τα υπαρξιακά ερωτήματα θα μας φάνε)

το νόημα της επικάλυψης (φαντάζομαι) είναι ότι ο τελεστης αυτός κανονικά κάνει πολλαπλασιασμό 2 αριθμών,ενώ με την επικάλυψη θα κάνει πολλαπλασιασμό 2 πινάκων.......
αν κατάλαβα καλά...... :-[


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: 4Dcube on December 10, 2007, 19:04:22 pm
Σωστή pitsa, αλλά αν δεν καλείται απο τη main σαν κανονική πράξη τι να το κάνω...


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: tosodoulis18 on December 10, 2007, 19:05:08 pm
Πως θα καλεσω απο την main την πραξη a.p*b.p? Την επικαλυψη την ωρισα φιλικη. Τις τιμες η b.p απο που θα της παρει? Εμεις δινουμε τιμες στην b.d.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: pitsa on December 10, 2007, 19:08:24 pm
παιδιά νομίζω έχετε μπερδέψει κάτι.... στον τελεστή * ο πολλαπλασιαμός γίνεται ανάμεσα σε 2 αντικείμενα τύπου Α και το αποτέλεσμα αποθηκεύεται στον d!!
αν δείτε στην εκφώνηση λέει :

"Μια επικάλυψη του τελεστή * η οποία να επιστρέφει ως τιμή της έκφρασης a*b, όπου a και b αντικείμενα τύπου Α, έναν pointer σε pointer τύπου int ο οποίος αν χρησιμοποιηθεί ως πίνακας τύπου nxn να περιέχει το γινόμενο των πινάκων (a.p)*(b.p)."


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: pitsa on December 10, 2007, 19:09:54 pm
Σωστή pitsa, αλλά αν δεν καλείται απο τη main σαν κανονική πράξη τι να το κάνω...

γιατί να μην καλείται από τη main??


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: tosodoulis18 on December 10, 2007, 19:19:06 pm
Πως δημιουργουνταί 2 πινακες b? Ο ενας της Α και ο αλλος της Β?


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: xXx on December 10, 2007, 19:23:23 pm
κατι ακομα.οταν θα εκτελεστει η αρχικων συνθηκων του αντικειμενου β θα δωσει τιμες και στα στοιχεια που κληρονομησε απο την Α δλδ θα εκτελεστει και η αρχικων συνθηκων της Α για το αντικειμενο β;


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Mikros_Nikolas on December 10, 2007, 19:37:30 pm
Τι να πω ρε παιδια γίνεται ενα μπάχαλο με τα ερωτήματα και τις απαντήσεις.

Εγώ πάντω την έλυσα έτσι:
Έφτιαξα επικάλυψη * μέλος της κλάσης Α που παίρνει 2 αντικείμενα κλάσης Α και επιστρέφει pointer σε pointer που είναι πίνακας nXn.
Εφόσον η κλάση Β είναι κληρονόμος της Α, με το που δημιουργείται ενα αντικείμενο κλάσης Β, καλώντας την α.σ. της Α δημιουργείται και ένα αντικείμενο κλάσης Α που "είναι μέσα" στο αντικείμενο κλάσης Β.Έτσι όταν στην main λέω
A a;
B b;
a*b;
εκτελείται η επικάλυψη για το αντικείμενο a και για το αντικείμενο b ΟΜΩΣ για το "αντικείμενο κλάσης Α του αντικειμένου κλάσης Β". O compiler δηλαδή βλέπει ενα αντικειμενο κλάσης Α και ένα ακόμα κλάσης Α κι ας ανήκει στην κλάση Β

Αυτό σκέφτηκα ότι συμβαίνει λόγω κληρονομικότητας όταν διάβασα την εκφώνηση.
Και εκ του αποτελέσματος, (αν δεν έκανα καμιά περίεργη μαγκιά που δεν την κατάλαβα) μάλλον έχω δίκιο γιατί το πρόγραμμά μου λειτουργεί.

(για να αντιστοιχήσω το αποτέλεσμα της επικάλυψης με τον b.d έφτιαξα μια συνάρτηση μέλος της Β που κάνει αυτήν την δουλειά)


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: Ianna on December 10, 2007, 19:42:30 pm
108 invalid operands of types `int*' and `int*' to binary `operator*'


ρε παιδιά αυτό που μου βγάζει τί σημαίνει?τι πρέπει να κάνω?


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: PallasFTW on December 10, 2007, 20:40:13 pm
εχω χασει τα αυγα και τα καλαθια μ'αυτην την ασκηση...πιο συγκεκριμενα δεν μπορω να καταλαβω τι στο καλο ειναι αυτος ο πινακας d της κλασης B

Quote
Η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να δέχεται ως όρισμα την τιμή του k και να δεσμεύει δυναμικά μνήμη έτσι ώστε η μεταβλητή d να μπορεί να χρησιμοποιηθεί ως πίνακας τύπου kxk. Η ίδια συνάρτηση να διαβάζει από το πληκτρολόγιο και τις τιμές των στοιχείων του πίνακα
Δλδ ο πινακας d που ειναι kxk γεμιζει απο τον χρηστη....


Quote
Στη συνέχεια να υπολογίζεται με τη βοήθεια των τελεστών που επικαλύφτηκαν το γινόμενο των πινάκων a.p*b.p, το οποίο να είναι το περιεχόμενο του πίνακα b.d
εδω ο πινακας περιεχει το γινομενο των αλλων πινακων....


τελικα τι ειναι τα στοιχεια του d πινακα??


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: nemos on December 10, 2007, 20:50:11 pm
Στη συνέχεια να υπολογίζεται με τη βοήθεια των τελεστών που επικαλύφτηκαν το γινόμενο των πινάκων a.p*b.p, το οποίο να είναι το περιεχόμενο του πίνακα b.d, το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1. 
Τι ακριβώς θα είναι το γινόμενο των πινάκων a.p*b.p ??? .
Ζητάει τρείς διαφορετικές περιπτώσεις???? :
Α, το οποίο να είναι το περιεχόμενο του πίνακα b.d .
Β.το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d
Γ. και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1.


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: fantomas on December 11, 2007, 00:39:00 am
Η επόμενη εργασία του Κορτέση θα πλένει και πιάτα..................... 8) 8) 8) 8) >:( >:( >:( >:( >:( >:( >:(έλεος ^kremala^


Title: Re: Προγραμματιστικές Τεχνικές Εργασία F 2007
Post by: stefos on December 11, 2007, 00:45:06 am
Στη συνέχεια να υπολογίζεται με τη βοήθεια των τελεστών που επικαλύφτηκαν το γινόμενο των πινάκων a.p*b.p, το οποίο να είναι το περιεχόμενο του πίνακα b.d, το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1. 
Τι ακριβώς θα είναι το γινόμενο των πινάκων a.p*b.p ??? .
Ζητάει τρείς διαφορετικές περιπτώσεις???? :
Α, το οποίο να είναι το περιεχόμενο του πίνακα b.d .
Β.το άθροισμα των στοιχείων κάθε γραμμής του a.p και του b.d
Γ. και το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1.

Με την επικαλυψη του τελεστη * υπολογίζεις το γινόμενο των πινάκων a.p και b.p και το καταχωρείς στον πίνακα b.d...
Με την επικαλυψη του τελεστη [] προσθέτεις τα στοιχεία της κάθε γραμμής των πινάκων μεταξύ τους (και επιστρέφεις για καθε γραμμη το αναλογο αθροισμα)
Με την επικάλυψη του τελεστη () υπολογίζεις το εσωτερικό γινόμενο της πρώτης γραμμής του πίνακα b.p επί την i γραμμή του πίνακα b.d για i = 0,…,n-1.