THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: ggpyr on November 26, 2009, 16:05:26 pm



Title: [C++] 6η Εργασια 2009
Post by: ggpyr on November 26, 2009, 16:05:26 pm
Ένα εργοστάσιο μπορεί να παράγει μια σειρά από διαφορετικούς τύπους προϊόντων.  Για κάθε τύπο προϊόντων μπορούμε να έχουμε διαφορετικές κατηγορίες οι οποίες εξαρτώνται από την ποιότητα των υλικών, τον χρόνο επεξεργασίας κλπ. Μια παραγγελία που θα έρθει στο εργοστάσιο προσδιορίζει τις κατηγορίες των προϊόντων που θα παραχθούν και τον αριθμό των τεμαχίων για κάθε κατηγορία. 

Να γραφεί το λογισμικό το οποίο να υπολογίζει το συνολικό κόστος, και το συνολικό κέρδος από την εκτέλεση μιας παραγγελίας που έφτασε στο εργοστάσιο. Στο λογισμικό να ορίζεται η συνάρτηση calck(…) η οποία να διαβάζει τον αριθμό των τεμαχίων για κάθε κατηγορία προϊόντων και να υπολογίζει το συνολικό κόστος της παραγγελίας και το συνολικό ποσό που θα εισπράξει το εργοστάσιο από την εκτέλεσή της. Η συνάρτηση calck να είναι ανεξάρτητη από τον τύπο και την κατηγορία των προϊόντων που ζητείται να κατασκευαστούν.

Ως εφαρμογή να θεωρηθεί ότι το εργοστάσιο μπορεί να κατασκευάσει προϊόντα τύπου product_1 για τα οποία να διαβάζεται το κόστος των υλικών και το κόστος της επεξεργασίας ανά τεμάχιο καθώς και το ποσοστό κέρδους που αφήνει η κατασκευή ενός τέτοιου τεμαχίου. Το εργοστάσιο μπορεί ακόμη να κατασκευάσει και προϊόντα τύπου product_2. Για τα προϊόντα τύπου product_2 απαιτείται η απασχόληση ενός εργάτη ο οποίος πρέπει να εργαστεί έναν ορισμένο αριθμό ωρών για να κατασκευάσει ένα τεμάχιο του προϊόντος. Αν το εργοστάσιο επιθυμεί να επισπεύσει την παραγγελία μπορεί να απασχολήσει και άλλους εργάτες για την κατασκευή του ίδιου τεμαχίου. Στην περίπτωση αυτή ο χρόνος που χρειάζεται για να κατασκευαστεί ένα τεμάχιο ισούται με τον αριθμό των ωρών που απαιτούνται για την κατασκευή του από έναν εργάτη δια τον αριθμό των εργατών που θα χρησιμοποιηθούν για την κατασκευή του αν επισπευσθεί η παραγγελία. Η αμοιβή ενός εργάτη προσδιορίζεται ανά τεμάχιο που κατασκευάζει είτε μόνος του είτε με άλλους εργάτες. Για κάθε τεμάχιο προϊόντος τύπου product_2 να διαβάζεται το κόστος των υλικών, το κόστος της επεξεργασίας και το ποσοστό κέρδους ανά τεμάχιο, να διαβάζεται ακόμη ο ελάχιστος ζητούμενος χρόνος για την κατασκευή του, ο χρόνος που απαιτείται για την κατασκευή του από έναν εργάτη και η ανά τεμάχιο αμοιβή του εργάτη.

Η συνάρτηση main του προγράμματος να διαβάζει τον αριθμό των προϊόντων τύπου product_1 και τον αριθμό των προϊόντων τύπου product_2 να δεσμεύει δυναμικά μνήμη με τον τελεστή new για την καταχώρηση των αντίστοιχων αντικειμένων, να καλεί τη συνάρτηση calck για να υπολογίσει το συνολικό κόστος και την αξία της παραγγελίας και να εκτυπώνει το συνολικό κέρδος από την εκτέλεσή της.

 

Βοηθητικές παρατηρήσεις

Για κάθε τύπο προϊόντος να ορίζεται μία κλάση. Για κάθε κατηγορία προϊόντος να ορίζεται ένα αντικείμενο στον τύπο της αντίστοιχης κλάσης. Με τη δημιουργία των αντικειμένων να διαβάζονται τα απαραίτητα στοιχεία για τον υπολογισμό του κόστους και της αξίας ενός τεμαχίου.

Για τα προϊόντα τύπου product_2 το κόστος επεξεργασίας δεν περιλαμβάνει την αμοιβή των εργατών που απασχολούνται για την κατασκευή του.


Title: Re: [C++] 6η Εργασια 2009
Post by: provataki on November 26, 2009, 21:33:53 pm
και ξανα προς τη δοξα τραβαααα


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on November 30, 2009, 23:00:49 pm
ρε παιδιά έχει πει στη θεωρία περί templates? πρότυπα δηλαδή...

Προς πρότυπα δεν πάει η άσκηση??? Δεν θα ήθελα να ξεκινήσω από τον δύσκολο δρόμο....


Title: Re: [C++] 6η Εργασια 2009
Post by: antonios on December 01, 2009, 09:32:03 am
καλημέρα παιδιά... έχω κάνει λίγο από την main, αλλά βγάζει ένα σφάλμα.....

cout<<"dose ton arithmo ton proionton typou 1\n";
        cin>>a;
   cout<<"dose ton arithmo ton proionton typou 2\n";
   cin>>b;
   p1=new product_1[a];
   p2=new product_2;
   for(i=0;i<a;i++){
      product_1 temp1();
      p1=temp1;
   }
   for(i=0;i<b;i++){
      product_2 temp2();
      p2=temp2;
   }

μπορείτε να μου πείτε τι εκανα λάθος???


Title: Re: [C++] 6η Εργασια 2009
Post by: Αθηρ on December 01, 2009, 12:31:26 pm
καλημέρα παιδιά... έχω κάνει λίγο από την main, αλλά βγάζει ένα σφάλμα.....

cout<<"dose ton arithmo ton proionton typou 1\n";
        cin>>a;
   cout<<"dose ton arithmo ton proionton typou 2\n";
   cin>>b;
   p1=new product_1[a];
   p2=new product_2;
   for(i=0;i<a;i++){
      product_1 temp1();
      p1=temp1;
   }
   for(i=0;i<b;i++){
      product_2 temp2();
      p2=temp2;
   }

μπορείτε να μου πείτε τι εκανα λάθος???

Τα p1 και p2 πρέπει να δηλωθούν ως pointers αν δεν απατώμαι. Αυτό απαιτεί η χρήση της new.


Title: Re: [C++] 6η Εργασια 2009
Post by: frou_ira on December 02, 2009, 18:07:55 pm
ρε παιδιά έχει πει στη θεωρία περί templates? πρότυπα δηλαδή...

Προς πρότυπα δεν πάει η άσκηση??? Δεν θα ήθελα να ξεκινήσω από τον δύσκολο δρόμο....

Είσαι σίγουρος;Μήπως γίνεται και με πιο απλό τρόπο;
Γιατί αν όχι μάλλον θα πρέπει να ξεφυλλίσουμε το τευχάκι της θεωρίας... ^crybaby^


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 02, 2009, 23:06:00 pm
Το λέω γιατί απλά με τριγκάρισε η έκφραση "Η συνάρτηση calck να είναι ανεξάρτητη από τον τύπο και την κατηγορία των προϊόντων που ζητείται να κατασκευαστούν."


Αλλά μέχρις στιγμής δεν έχω έρθει face-to-face με την calck και δεν μπορώ να σου πω με σιγουριά αν θα χρειαστεί... Για την ώρα έφτιαξα μια "μαμά" (ήτοι parent) κλάση, την product με virtual συνάρτηση την cost() και έφτιαξα και δυο "παιδάκια" κλάσεις τα  product_1 και product_2... Στην μαμα κλάση έβαλα τις βασικες παραμέτρους (κόστος υλικού κοστος κατασκευής, ποσοστό κέρδους)... Οι άλλες κλάσεις παιδιά όμως είναι εκείνες που θα κάνουν την υλοποίηση....

Η calck θα ακολουθήσει αύριο...


Title: Re: [C++] 6η Εργασια 2009
Post by: antonios on December 02, 2009, 23:32:44 pm
καλημέρα παιδιά... έχω κάνει λίγο από την main, αλλά βγάζει ένα σφάλμα.....

cout<<"dose ton arithmo ton proionton typou 1\n";
        cin>>a;
   cout<<"dose ton arithmo ton proionton typou 2\n";
   cin>>b;
   p1=new product_1[a];
   p2=new product_2;
   for(i=0;i<a;i++){
      product_1 temp1();
      p1=temp1;
   }
   for(i=0;i<b;i++){
      product_2 temp2();
      p2=temp2;
   }

μπορείτε να μου πείτε τι εκανα λάθος???

Τα p1 και p2 πρέπει να δηλωθούν ως pointers αν δεν απατώμαι. Αυτό απαιτεί η χρήση της new.

ναι, συμφωνώ τα έχω δηλώσει πιο πάνω αυτά... και τα 2 σαν pointers...... παίζει να είναι κάτι άλλο???


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 03, 2009, 00:38:22 am
Αφού λοιπόν τα έχεις δηλώσει ως pointers με ποια λογική τα βάζεις ίσα με temp που είναι αντικείμενο?!
Γράψε p1[ i ] και p2[ i ]. (κ έχεις ξεχάσει κ το μέγεθος στη 2η new, αλλά μάλλον καταλάθος)

ΑΛΛΑ δεν χρειάζεται να το κάνεις αυτό με τη λούπα, γιατί με τη new καλούνται αυτόματα οι constractors χωρίς ορίσματα για όλα τα στοιχεία του πίνακα (ίσως να φταίει κ αυτό για το λάθος?).

εδιτ: Μμμ, αν κρίνω από τα πλαγιαστά γράμματα που εμφανίζονται στον κώδικα σου, μάλλον το έγραψες το [ i ] κ το πήρε σαν italics! Τσέκαρε τότε το άλλο που σου λέω.


Title: Re: [C++] 6η Εργασια 2009
Post by: antonios on December 03, 2009, 00:46:19 am
ναι όντως, γι' αυτό και βγαίνουν λίγο περίεργα......

απλά δεν το ήξερα ότι με την new καλούνται αυτόματα οι constructors.................... :???:


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 03, 2009, 19:52:49 pm
Πράγματι με την new καλούνται αυτόματα οι constructors και αυτό στη συγκεκριμένη περίπτωση μπορεί να δημιουργεί ένα μικρό πρόβλημα...
Τι εννοώ....
Αν στην constructor της κλάσης product_1 έχεις βάλει να ζητάει το κόστος υλικού, το κοστος κατασκευής και το ποσοστό κέρδους τότε αυτό θα στο ζητάει επαναλαμβανόμενα για όλα τα a στοιχεία που θές να δημιουργήσεις. Κάτι τέτοιο όμως δεν το θέλεις αφού ξέρεις ότι όλα τα a στοιχεία του product_1 έχουν το ίδιο κόστος και το ίδιο ποσοστό κέρδους.


Title: Re: [C++] 6η Εργασια 2009
Post by: tolisn on December 03, 2009, 21:12:56 pm
Γιατι να μην ζητησεις λοιπον εκτος constructor τις τιμες αυτές και να τις περνάς ως ορίσματα στην constructor ?


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 03, 2009, 22:40:14 pm
Ακριβώς αυτό έκανα! Τα παίρνεις μια φορά και μετά με ένα loop τύπου for περνάς σε όλα τα στιγμιότυπα του προϊόντος τις τιμές που θες. Έτσι δε χρειάζεται κάθε φορά που δημιουργείται ένα στιγμιότυπο να βάζεις τις ίδιες τιμές ξανά και ξανά...


Title: Re: [C++] 6η Εργασια 2009
Post by: provataki on December 03, 2009, 23:10:33 pm
πως ξεχωριζουμε τις κατηγοριες στον τυπο προιοντος;

 ;D ;D ;D :D ;D ;D ;D

μακραν η πιο κακογραμμενη εργασια


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 03, 2009, 23:46:29 pm
πως ξεχωριζουμε τις κατηγοριες στον τυπο προιοντος;

 ;D ;D ;D :D ;D ;D ;D

μακραν η πιο κακογραμμενη εργασια

χαχαχαχαχαχα!!!!  :D :D :D :D :D :D :D :D

Καλό!!!!

Έχεις 2 κατηγορίες σωστά? Το product1 και το product2. Όπως γράφω και πιο πάνω, και οι δυο προέρχονται απο μια κλάση parent, την product η οποία περιέχει κάποια βασικά πράγματα που έχουν και οι δυο κατηγορίες, όπως πχ τις μεταβλητές κόστους προϊόντος, επεξεργασίας και κέρδους. Επίσης η product περιέχει (αλλά δεν υλοποιεί) μια συνάρτηση που να κάνει υπολογισμό συνολικού κόστους της κατηγορίας.

Η υλοποίηση της τελευταίας αυτής συνάρτησης θα πραγματοποιηθεί με την κάθε κλάση κατηγορίας ξεχωριστά αφού η κάθε κατηγορία ζητάει και διαφορετικά πράγματα...

Έτσι όταν έρθει η ώρα για την calck να παίρνει αυτή την συνάρτηση δεν έχει σημασία ποια κατηγορία θα είναι.... Από μόνη της η κάθε κατηγορία θα υλοποιεί την ίδια ακριβώς συνάρτηση αλλά με τα δικά της δεδομένα κάθε φορά....

Γιαυτό λέω και στην αρχή μήπως πρέπει να κάνουμε την calck με τη χρήση προτύπων.....


Title: Re: [C++] 6η Εργασια 2009
Post by: provataki on December 04, 2009, 00:50:15 am
product_1 και product_2 ειναι τυποι και οχι κατηγοριες.
κατηγοριες οριζονται στους τυπους product_1 και product_2
πχ                  /κατηγορια Α
        product_1
                     \ κατηγορια Β


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 04, 2009, 01:11:05 am
Ναι, κ εγώ αυτό θα έλεγα τώρα:
Quote
Ένα εργοστάσιο μπορεί να παράγει μια σειρά από διαφορετικούς τύπους προϊόντων.  Για κάθε τύπο προϊόντων μπορούμε να έχουμε διαφορετικές κατηγορίες οι οποίες εξαρτώνται από την ποιότητα των υλικών, τον χρόνο επεξεργασίας κλπ.

Μάλλον οι κατηγορίες δεν είναι συγκεκριμένες κ απλά ξεχωρίζουν από τις διαφορετικές τιμές των μεταβλητών τους. Ή μήπως όχι?! Γιατι υπάρχει κ η συνέχεια:
Quote
Μια παραγγελία που θα έρθει στο εργοστάσιο προσδιορίζει τις κατηγορίες των προϊόντων που θα παραχθούν και τον αριθμό των τεμαχίων για κάθε κατηγορία.

Α, κ υπάρχει κ αυτό:
Quote
Για κάθε τύπο προϊόντος να ορίζεται μία κλάση. Για κάθε κατηγορία προϊόντος να ορίζεται ένα αντικείμενο στον τύπο της αντίστοιχης κλάσης.


Title: Re: [C++] 6η Εργασια 2009
Post by: jason_ on December 04, 2009, 01:18:18 am
+1 Anastacia, provataki

Τα product_1, product_2 είναι τύποι και όχι κατηγορίες, γι' αυτό προφανώς και όλα τα αντικείμενα που θα δημιουργήσεις στη μαιν τύπου product_1 (και αντίστοιχα product_2) δεν θα έχουν τα ίδιο κόστος επεξεργασίας κτλ. Η διαφοροποίηση στα διάφορα χαρακτηριστικά των αντικειμένων τύπων product_1, product_2 είναι που ορίζει τις διάφορες κατηγόριες.


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 04, 2009, 01:27:24 am
Ωραία, αλλά πως θα ορίσω π.χ. 2 τεμάχια για μία κατηγορία? Αφού κατηγορία=αντικείμενο. Θα το αντιγράφω?

Ή μήπως αυτό το αναφέρει μόνο στην αρχή για πρηξαρχιδισμό κ κατά βάθος δε μας ενδιαφέρει στη συγκεκριμένη υλοποιήση κ απλά δίνουμε ό,τι-ν-'ναι τίμες στην constractor του κάθε νέο αντικειμένου κ είμαστε οκ?!


Title: Re: [C++] 6η Εργασια 2009
Post by: jason_ on December 04, 2009, 01:37:28 am
Δίνουμε ό,τι να 'ναι τιμές. Ο αριθμός των τεμαχίων κάθε κατηγορίας σε ενδιαφέρει μόνο στην calck() για τον υπολογισμό του κόστους.

Έτσι το αντιλαμβάνομαι εγώ τουλάχιστον.


Title: Re: [C++] 6η Εργασια 2009
Post by: ΚΗΜΜΥ on December 04, 2009, 02:09:20 am
αν μπορει ας πει καποιος ποια θεωρια χρειαζεται... ::)


Title: Re: [C++] 6η Εργασια 2009
Post by: jason_ on December 04, 2009, 02:18:32 am
@Anastacia,
Αυτό που είπες με τα τεμάχια πάντως, γίνεται πρακτικά κατά τη δημιουργία αντικειμένων τύπου product_1 (ή product_2). Και αυτό επειδή όλα τα στοιχεία αναφερόνται ως προς το ένα τεμάχιο (κόστος ανά τεμάχιο κτλ). Στην ουσία δηλαδή δημιουργείς ένα τεμάχιο τύπου product_1 (ή product_2) μια τυχαίας κατηγορίας (κατηγορία που ορίζεται από τις τιμές των στοιχείων του αντικειμένου).


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 04, 2009, 02:49:58 am
αν μπορει ας πει καποιος ποια θεωρια χρειαζεται... ::)

Τσέκαρε από week 7 τις ασκησείς StudentGrade και Circuit του μέγιστου Συμεωνίδη (έγιναν σήμερα στην τάξη κ είδαμε το φως) κ είσαι οκ!

static, virtual & pointers

edit: δείτε λίγο παρακάτω.


Title: Re: [C++] 6η Εργασια 2009
Post by: ΚΗΜΜΥ on December 04, 2009, 02:50:27 am
ok thx! :)


Title: Re: [C++] 6η Εργασια 2009
Post by: tolisn on December 05, 2009, 13:26:35 pm
@Anastacia,
Αυτό που είπες με τα τεμάχια πάντως, γίνεται πρακτικά κατά τη δημιουργία αντικειμένων τύπου product_1 (ή product_2). Και αυτό επειδή όλα τα στοιχεία αναφερόνται ως προς το ένα τεμάχιο (κόστος ανά τεμάχιο κτλ). Στην ουσία δηλαδή δημιουργείς ένα τεμάχιο τύπου product_1 (ή product_2) μια τυχαίας κατηγορίας (κατηγορία που ορίζεται από τις τιμές των στοιχείων του αντικειμένου).

Μην μπερεδευστε... τα τεμάχια τα δηλωνεις μεσα στην συνάρτηση calck.


Title: Re: [C++] 6η Εργασια 2009
Post by: provataki on December 05, 2009, 17:30:17 pm
@Anastacia,
Αυτό που είπες με τα τεμάχια πάντως, γίνεται πρακτικά κατά τη δημιουργία αντικειμένων τύπου product_1 (ή product_2). Και αυτό επειδή όλα τα στοιχεία αναφερόνται ως προς το ένα τεμάχιο (κόστος ανά τεμάχιο κτλ). Στην ουσία δηλαδή δημιουργείς ένα τεμάχιο τύπου product_1 (ή product_2) μια τυχαίας κατηγορίας (κατηγορία που ορίζεται από τις τιμές των στοιχείων του αντικειμένου).

Μην μπερεδευστε... τα τεμάχια τα δηλωνεις μεσα στην συνάρτηση calck.

και η main τι διαβαζει; :D :D


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 05, 2009, 18:30:47 pm
Και χτες βράδυ που ξαναδιαβάσα την εκφώνηση παρατήρησα ότι ζητάει (ηλιθιωδέστατα κατά τη γνώμη μου) να κάνουμε δέσμευση με new στη main, όποτε μάλλον ούτε καν static δε θα χρειαστεί η υλοποιήση.


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 00:47:57 am
Οφείλω κι εγώ να ομολογήσω ότι η εκφωνηση είναι πολύ ό,τι να ναι...Ο Συμεωνίδης μας παρέπεμψε για λύση την άσκηση circuit...Αλλά όντως με την new στη main μπερδεύονται πάλι τα πράγματα....  :(


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 12:35:48 pm
Ειλικρινά δεν μπορώ να καταλάβω γιατί σε μπερδεύει η new στη main... Ελπίζω να μην κάνω κανένα τρομερό λάθος και μου διαφεύγει κάτι, και γιαυτό να τα βλέπω τόσο εύκολα τα πράγματα......

Να πω τι έκανα εγώ???

Πρώτα απ' όλα στην υλοποίηση της (ας πούμε) Product_1 έφτιαξα ένα constructor όπου θα μπαίνουν σαν ορίσματα τα εξής:

1. Ο αριθμός τεμαχίων που θέλουμε να κατασκευάσουμε από το συγκεκριμένο υλικό. - Ναι τον αριθμό τεμαχίων τον έβαλα σαν παρμάμετρο της κλάσης και δεν κάθομαι με τη new να δημιουργήσω  x νέα κομάτια τυπου Product_1. Είναι ανούσιο να κάνω κάτι τετοιο (Έτσι πιστεύω εγώ .... τεσπα...)

2. Το κόστος του υλικού.

3. Το κόστος επεξεργασίας

4. Το ποσοστό κέρδους

Κατόπιν φτιάχνω ένα αντικείμενο τύπου Product_1 με τη new σε μια μορφή που εμένα τουλάχιστον μου θυμίζει πιο πολύ java παρά c++:

Product_1 * prod1 = new Product_1(items_1, prod1_Cost, proc1_Cost, prof1_Percentage);

Με αυτό τον τρόπο ορίζω όχι απλά ένα προϊόν κατηγορίας τυπου product 1 αλλά μια ομάδα από τη συγκεκριμένη κατηγορία... Αν θέλω μπορώ να δημιουργήσω όσες ομάδες κατηγοριών θέλω αφού θα ξέρω ότι συγκεκριμένος αριθμός κοματιών θα είναι σε κάθε κατηγορία και κάθε ομάδα θα έχει πάντα τα ίδια στοιχεία πχ τιμή, τρόπο επεξεργασίας κλπ κλπ κλπ...

Τι λες?


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 13:05:33 pm
Επίσης όπως γράφει και στην εκφώνηση...

Μια παραγγελία που θα έρθει στο εργοστάσιο προσδιορίζει τις κατηγορίες των προϊόντων που θα παραχθούν και τον αριθμό των τεμαχίων για κάθε κατηγορία. 

Έτσι απλά και μαζικά μπαίνει λοιπόν ο αριθμός προϊόντων κάθε κατηγορίας σαν μεταβλητή στο αντικείμενο της κλάσης (μην το μπερδεύουμε με το προϊόν, μιλάω για την κλάση τώρα και όχι τι αντιπροσωπεύει αυτή στο πρόβλημα)...

Δεν χρειάζεται με τη new να δημιουργηθούν x αντικείμενα κατηγορίας Product_1 και y κατηγορίας Product_2... Σε τι θα οφελούσε κάτι τέτοιο???

Αν πχ έφτιαχνες κάτι τέτοιο:
Product_1 * product = new Product_1 [ x ] ;

θε έπρεπε να κάνεις έξτρα κόπο να περάσεις τα στοιχεία μέσα με loop ( for ( int  i  =  0  ;  i  <  x; i++ ){ ..... } ) και χώρια το μπελά με την calk.....


Πλάκα πλάκα την calck την έφτιαξα τελικά με template... χοχοχο... Αν και νομίζω ότι είναι τζάμπα κόπος αφού έφτιαξα και δευτερη σαν specialization σε περίπτωση που μπαίνει προϊόν τύπου Product_2 μιας και θέλει καποια έξτρα πραγματάκια....




Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 14:05:41 pm
Αν και τώρα που το ξαναδιαβάζω έχω αρχίσει να το ξανασκέφτομαι για την calck... Μήπως έχει κανένας καμιά ιδέα???


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 15:38:59 pm
OLE!

Αν και έτσι όπως έχω φτιάξει το πρόγραμμα δουλεύει μια χαρα, μόλις συνειδητοποίησα ότι βαδίζω σε τελείως διαφορετικά μονοπάτια από τη circuit... Οπότε φαντάζομαι το αρχίζω από την αρχή.... Ζητώ συγνώμη για τις προηγούμενες λανθασμένες (όχι ακριβώς αλλά αφού το θέλει με συγκεκριμένο τρόπο προσέγγισης) μεθόδους...


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 15:42:49 pm
Tην calck  με template μου φαίνεται δύσκολο να την θέλει..απ' τη στιγμη που δεν μας τα ανέφερε καν...εκεί που κολλάω εγώ είναι πως στην calck θα βάλεις τον τύπο του προιόντος και θα καταλάβει τι θα κάνεις...αν βάζαμε όπως στην circuit έναν πίνακα 2 διαστάσεων(που ορίζεται μόνο στη βασική) και εκεί να μπαίνουν τα προιόντα 8α ήταν όλα κομπλε αλλά απ τη στιγμη που μας λέει να κάνουμε με new δεσμευση μνήμης για το κάθε προιον αυτο αυτοματα κανει την calck μη ανεξαρτητη....εχω μπερδευτεί πάρα πολύ από την χαζοεκφώνηση........


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 15:56:12 pm
Να σου πω τι πιστεύω....

Αν κανεις static ας πούμε τη μεταβλητή int type, πχ  στην Product - Μαμα κλάση - θα έχεις:
         static int type;
τότε από default αυτή η μεταβλητή παίρνει την τιμή 0. Υποτίθεται αυτό γίνεται αυτόματα...

(Για να είσαι σίγουρη 100 % ότι αρχικά έχει την τιμή 0 κάνε και ένα    int Product::type=0; έξω από την Product)

Αν δηλώσεις τώρα στην constructor της Product_1 και Product_2 το κλασικό type++ (βλέπε στο πρόγραμμα circuit το n++ τις αντίστοιχες Circuit_1 και Circuit_2 ) τότε κάθε φορά που εσύ θα δημιουργείς μια νεα κλάση πχ πρώτα την Product_1 και μετά την Product_2 τότε αντίστοιχα το type αυξάνεται κατά 1. Έτσι αν τυπώσεις το type μετά τη δημιουργία της Product_1 θα είναι 1 ενώ μετά τη δημιουργία της Product_2 θα είναι 2..

Δεν έχει σημασία αν δημιουργούμε το προϊόν μας στη main με τη new ή όπως το κάνει στο Circuit μέσα στην constructor... Εμείς αυτό που θέλουμε είναι να αυξήσουμε αυτή τη μεταβλητή για να μπορούμε να χρησιμοποιήσουμε το κατάλληλο array....

Το 'χουμε????? Ελπίζω να βοήθησα...


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 16:13:45 pm
Και για να μη το ξεχάσω... Ναι πράγματι και η calck γίνεται όπως και η calc του Circuit.... Οπότε δε χρειάζεται να μπεις στη διαδικασία των templates... Δυστυχώς είχα τελειώσει το πρόγραμμα και δούλευε μια χαρά μέχρι που διάβασα το circuit και κατάλαβα ότι αυτό που είχα φτιάξει δεν είχε καμία σχέση με αυτό που ήθελε εμείς να γράψουμε... (και ας δούλευε μια χαρα και έτσι όπως ήταν....)


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 16:25:29 pm
Σε καταλαβαίνω...είναι πακέτο να τρέχει το πρόγραμμα όμορφα και καλά αλλά να το θέλει ο mister Κορτέσης με άλλο τρόπο..Εσύ δηλαδή προτείνεις να μην αποθηκεύσουμε σε διδιαστατο πίνακα τα προιόντα? Απλά με τον staτic int να καταλαβαίνει???και αν ναι που θα βρίσκει τις τιμές για τα product_1 kai product_2 κοκ...ο διδιαστατος πίνακας σε αυτό αποσκοπούσε...να έχουμε ανεξαρτησια αφού όλοι οι τύποι θα αποθηκεύονται σε έναν διδιαστατο πίνακα και όλα μια χαρα συμμαζεμένα....Εμείς εκτός από αυτό έχουμε κι άλλη δυσκολία...τα τεμάχια...Στην 1η περίπτωση όλα νορμαλ...στην δευτερη όμως πρέπει να προσδιορίσουμε για καθε τεμάχιο αν το κατασκευάζει ένας ή περισσοτεροι εργατες....Επίσης μου φαίνεται λίγο άκυρο τα τεμαχια να διαβάζονται στην calck και όχι στην συνάρτηση αρχικών συνθηκών της κάθε κλάσης...


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 16:37:16 pm
Όχι δεν προτείνω να μην αποθηκεύσουμε σε δισδιαστατο πίνακα τα προιόντα... Ίσα ίσα που αυτό λέω...να αποθηκεύσουμε σε δισδιαστατο πίνακα...

 Να δουλέψεις το πρόγραμμα όμοια με το circuit γιατί βοηθάει... Η μόνη διαφορά είναι ότι έχεις τη  new και όχι τη malloc για την δέσμευση μνήμης.... Εμένα βέβαια για την ώρα μου κάνει κάτι νερά αλλά που θα πάει... θα το φτιάξω!!!

Όσον αφορά τη calck και τα αντικείμενα, όπως έχει στην αντίστοιχη calc της circuit την τάση V, εδώ δεν θέλουμε την τάση αλλά τον αριθμό αντικειμένων για την κάθε  κατηγορία...


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 16:48:37 pm
Ναι όμως για την product_2 τα μπερδεύει λίγο τα πράγματα....οκ δίνουμε τον συνολικό αριθμό τεμαχίων στην calck αλλά και πάλι πώς θα καταλάβει ποιας κλάσης είναι?? Δεν είναι κοινά για όλες...επίσης στην product_2 θα πρέπει για κάθε τεμαχιο να ξέρουμε αν το κάνει ένας ή περισσότεροι εργάτες ώστε να βγάλουμε συμπεράσματα για cost και κερδος.... :-\ :-\


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 16:53:33 pm
Νομίζω ότι έπιασα κάτι παραπάνω  :P :P ουσιαστικά δεν θα διαβάζει αλλά θα δέχεται ώς όρισμα τα τεμάχια ε?λέεεμεε τώρα.....


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 17:15:30 pm
Ναι ακριβώς, τουλάχιστον αυτό έλεγα και εγώ αλλά πόσα ορίσματα θα του βάλεις??? Θέλω να πω από τη στιγμή που θες άλλο αριθμό για τα πρώτα προιόντα και αλλο για τα προϊόντα τύπου 2....

Κανείς δεν είπε ότι θα είναι ίδια... Αν ήταν ετσι θα ήταν πολύ απλό... Οπότε μάλλον ανάλογα με τον τύπο θα πηγαίνει και ο αριθμός των κοματιών... Ίσως κατι στυλ...
if ( type == 1)
   cout<<"Ποσα κοματια τυπου 1?";
elseif (type==2)
  cout<<"Ποσα κοματια τυπου 2?";

κάτι τετοιο... Δεν ξέρω ακόμα... θα δω....


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 19:09:31 pm
Δυστυχώς και σε μένα κάτι δεν παει καλά με τη new στη main... Μήπως υπάρχει κανένας να δώσει ένα χεράκι????


Title: Re: [C++] 6η Εργασια 2009
Post by: copernicus on December 06, 2009, 19:27:43 pm
χρισιμοποιήσατε συναρτήσεις για να επιστρέψουν το κόστος και το κέρδος??γιατι στο product2 δν 3έρω πως να το υπολογίσω...


Title: Re: [C++] 6η Εργασια 2009
Post by: daydreamer on December 06, 2009, 19:34:53 pm
Πραγματικά σ' αυτή την εργασία δεν μπορώ να καταλάβω τι περιμένει να κάνουμε. Η calck τελικά θα είναι virtual ή static?


Title: Re: [C++] 6η Εργασια 2009
Post by: nasia!! on December 06, 2009, 19:36:23 pm
Για μένα η calck δεν είναι ούτε virtual ούτε και static,βασικά δεν ανήκει καν σε κάποια κλάση,δες την λογική με την οποία κάνει ο Συμεωνίδης την άσκηση circuit στην εβδομάδα 7! ;)

(Έκανα virtual δυο αλλες συναρτησεις στην βασικη κλαση για την ιδια δουλεια,προκειμενου να παρω το κοστος και τα εσοδα που χρειαζονται μετα στην calck)


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 19:50:31 pm
Για μένα η calck δεν είναι ούτε virtual ούτε και static,βασικά δεν ανήκει καν σε κάποια κλάση,δες την λογική με την οποία κάνει ο Συμεωνίδης την άσκηση circuit στην εβδομάδα 7! ;)

(Έκανα virtual δυο αλλες συναρτησεις στην βασικη κλαση για την ιδια δουλεια,προκειμενου να παρω το κοστος και τα εσοδα που χρειαζονται μετα στην calck)

Μέσα είσαι! Καλά τα λες!!!!

Ένα πρόβλημα έχω όμως που δεν μπορώ να κάνω καλά με τίποτα.... Στο circuit κάνει malloc στην constructor του κάθε προϊόντος και μάλιστα δημιουργεί τα αντικείμενα circuit1 & circuit2 χωρίς καν να μπει στη main.... Προσπάθησα να κάνω το αντίστοιχω στη main αλλά με τη new και πάει καλά όσον αφορά τις constructors και τη μεταβλητή όπου αυξάνει το array του m_array αλλά κάπου χτυπάει και δεν με αφήνει να δω τι φταίει...

Καμιά ιδέα μέχρι εδώ???

ΑΑΑ επίσης, όσον αφορά τα τεμάχια από κάθε προϊόν που πρέπει να ρωτάει η calck εκτός του ότι έβαλα σε κάθε Product_1, 2 μια μεταβλητή items, έφτιαξα και από μια συνάρτηση setItems() η οποία ρωτάει πόσα τεμάχια θέλουμε από την κάθε κατηγορία...

μέσα στην calck όπως και στην αντίστοιχη του circuit έφτιαξα ένα loop για να περνάω τα τεμάχια σε κάθε κατηγορία:

for ( int i = 0 ;  i < type ; i++ ) {
      product_array [ i ] - > setItems ( ) ;
   }
όπου product_array είναι ο αντίστοιχος m_array και το type το αντίστοιχο n....

got it???

Πλιζ χελπ μι γουιθ νιου ιν μειν...


Title: Re: [C++] 6η Εργασια 2009
Post by: copernicus on December 06, 2009, 20:32:15 pm
δοκίμασε να βάλεις δυο pointers στο product και μετά στο μαιν να τους κάνεις new 


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 20:41:24 pm
κάτι τέτοιο προσπαθώ να κάνω αλλά δεν μου βγαίνει... μπορείς να μου το αναλύσεις λίγο?


Title: Re: [C++] 6η Εργασια 2009
Post by: copernicus on December 06, 2009, 20:55:12 pm
και εγώ τώρα προσπαθώ να το κάνω αλλά μάλλον δν γίνεται ετσι..


Title: Re: [C++] 6η Εργασια 2009
Post by: nasia!! on December 06, 2009, 20:59:34 pm
Ρε γ$^^ω.τόση ώρα το ψάχνω και αυτή η χαζοnew μου χαλάει την όλη φάση,πώς στο καλό θα έχουμε ανεξαρτησία στο πρόγραμμά μας τη στιγμή που δεν μπορούμε να έχουμε μόνο ένα πίνακα,δλδ δεν μπορούμε να το κάνουμε μόνο με έναν m_array(και αντίστοιχα στην βασική μας κλάση μόνο ένα Μ) όπως στο παράδειγμα του Συμεωνίδη,αλλά αναγκαστικά θέλει 2 πίνακες για κάθε τύπο που μας λέει,πώς γίνεται αυτό με new?
Καταλάβατε τί θέλω να πω ή μπα? :P


Title: Re: [C++] 6η Εργασια 2009
Post by: sarovios on December 06, 2009, 21:02:45 pm
Δεν ξερω πως γινεται παντος ειναι σιγουρο οτι θελει ενα Μ στη βασικη δηλαδη διπλο ποιντερ στη βασικη και οχι 2 απλους.Το ειπε στο μαθημα...


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 21:04:04 pm
Ρε συ εδώ δεν  μπορώ να καταλάβω πως εκτός της εκάστοτε κλάσης μπορείς να τα πακετάρεις όλα αυτά μαζί σε ένα πίνακα... ΑΚόμα και με το malloc που προσπάθησα μέσα από τη main πάλι δεν τα κατάφερα....



Title: Re: [C++] 6η Εργασια 2009
Post by: nasia!! on December 06, 2009, 21:06:17 pm
Δεν ξερω πως γινεται παντος ειναι σιγουρο οτι θελει ενα Μ στη βασικη δηλαδη διπλο ποιντερ στη βασικη και οχι 2 απλους.Το ειπε στο μαθημα...
Nαι βρε,ετσι το κάνω αλλά μετά τί θα γίνει?Δεν μπορούμε να έχουμε ένα μόνο διπλό pointer! :-\ Πφφφ,θα το αφήσω έτσι και άς μην είναι συμβατό.


Title: Re: [C++] 6η Εργασια 2009
Post by: sarovios on December 06, 2009, 21:10:01 pm
Ρε συ εδώ δεν  μπορώ να καταλάβω πως εκτός της εκάστοτε κλάσης μπορείς να τα πακετάρεις όλα αυτά μαζί σε ένα πίνακα... ΑΚόμα και με το malloc που προσπάθησα μέσα από τη main πάλι δεν τα κατάφερα....


Με τη malloc τη προβλημα εχεις? Ετσι το κανει στην ασκηση με το κυκλωμα.
Αν το κανω με malloc παιζει προβλημα?
Η μαλλον αν κανω τη δεσμευση στους constractors παιζει προβλημα?


Title: Re: [C++] 6η Εργασια 2009
Post by: nasia!! on December 06, 2009, 21:20:39 pm
Οκ,εγώ βρήκα τί μλκ έκανα,εεεε ρε τί σου κάνει η θεωρία από το βιβλίο! :D


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 21:25:06 pm
πες πες...


Title: Re: [C++] 6η Εργασια 2009
Post by: ΚΗΜΜΥ on December 06, 2009, 21:55:23 pm
επειδη εχω μπερδευτει...το m_aray στην circuit τι παριστανει?


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 22:07:09 pm
Είναι ένας δισδιάστατος πίνακας στον οποίο αποθηκεύονται τα δεδομένα power και inten....

Ρε παιδιά έχουμε κανένα τιπ? Προσπαθώ να κάνω με τη new να δεσμεύσω μνήμη για το δισδιάστατο πινακα τύπου Product και δε με αφήνει μετά την πρώτη διάσταση... Δοκίμασα το ίδιο αλλά για τύπο float και τον δέχεται μια χαρά...

Το μήνυμα που μου βγάζει λέει ότι δεν μπορεί να κάνει memory allocate for abstract type product....

Καμιά ιδέα?


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 22:11:45 pm
Eγώ δεν δέσμευσα στην main μνήμη για τον πίνακα των 2 διαστάσεων της βασικής...Το έκανα ακριβώς όπως το κανε ο Συμεωνίδης. Μετά, στην main δέσμευσα με την new αντικείμενα(κατηγορίες) για την κάθε κλάση(product_1, product_2). Φαινεται να δουλεύει...


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 22:21:36 pm
Όταν λες όπως το έκανε ο Συμεωνίδης εννοείς μέσα στις Product_1, 2 :

P  = new Product *;
      if ( type == 1 )
         P = ( Product ** ) malloc ( type * sizeof( Product  * ) ) ;
      else
         P = ( Product ** )realloc (P , type * sizeof (Product *));
      P [ type -1 ] = this;    
   }


Αλλά και στην main επίσης έχει δήλωση του **P ....


Title: Re: [C++] 6η Εργασια 2009
Post by: Ianna on December 06, 2009, 22:35:55 pm
Όταν λες όπως το έκανε ο Συμεωνίδης εννοείς μέσα στις Product_1, 2 :

P  = new Product *;
      if ( type == 1 )
         P = ( Product ** ) malloc ( type * sizeof( Product  * ) ) ;
      else
         P = ( Product ** )realloc (P , type * sizeof (Product *));
      P [ type -1 ] = this;    
   }


Αλλά και στην main επίσης έχει δήλωση του **P ....

Αυτό δεν χρειάζεται: P  = new Product *;
επίσης θα πρέπει να αυξάνεις το type δλδ: type++;
Αυτα θα τα κάνεις στη συνάρτηση αρχικών συνθηκων της κάθε κλάσης(product_1, product_2)

Μετά στη main:
Ορίζεις τον διδιαστατο πίνακα αλλά Συμεωνίδη :  Product **P;
Ορίζεις πίνακες αντικειμένων (που ουσιαστικά θα είναι οι κατηγορίες που θα δημιουργησεις)
product_1  *pr1;
product_2  *pr2;

pr1 = new product_1[n1];
pr2 = new product_2[n2];

που ουσιαστικά έτσι θα κάνεις δέσμευση μνήμης για n1 αντικείμενα τύπου  product_1 και για n2 αντικείμενα τύπου  product_2 , όπου n1  και n2  το πλήθος των κατηγοριών σε κάθε περίπτωση.. Εγώ κάπως έτσι κινήθηκα...


Title: Re: [C++] 6η Εργασια 2009
Post by: tolisn on December 06, 2009, 23:26:04 pm
Και άμα τραβούσαμε μια επικάλυψη του τελεστή new και "καμουφλαραμε" την υλοποίηση της malloc οπως την κανει ο Συμεωνίδης στην circuit ::  :P


Title: Re: [C++] 6η Εργασια 2009
Post by: kgiann78 on December 06, 2009, 23:34:56 pm
Το δοκίμασα αυτό αλλά δεν μου κάθεται....


Title: Re: [C++] 6η Εργασια 2009
Post by: Anastacia on December 06, 2009, 23:40:12 pm
Ελέος ρε παιδιά. Σκεφτείτε απλά.

Κάνεις με new δέσμευση μνήμης (διπλό pointer βασικού τύπου **P) στη main κατα τα γνωστά, αφού έχεις ρωτήσεις πόσα product_1 και product_2 θέλει. Όπως είπατε. Και μετά με 2 λούπες φτιάχνεις κάθε φορά ένα temp product_1 ή 2 κ αποθηκεύεις τις διευθύνσεις τους στο P[ i ].
Επείδη θες ανεξάρτητη calck της δίνεις τον **P κ το n=αριθμό_product_1+αριθμό_product_1.

Δε νομίζω να χρειάζεται κάτι παραπάνω.


Title: Re: [C++] 6η Εργασια 2009
Post by: il capitano on December 19, 2009, 15:43:31 pm
the solution  :)