THMMY.gr

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



Title: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 13, 2012, 20:15:25 pm
Συζήτηση και απορίες για την έκτη εργασία. Να μένετε εντός θέματος.

Άσκηση F
Μια παραγγελία που έφτασε σε ένα χυτήριο αποτελείται από έναν αριθμό τεμαχίων τα οποία χωρίζονται σε κατηγορίες ανάλογα με το σχήμα τους ενώ τα τεμάχια κάθε κατηγορίας χωρίζονται σε ομάδες ανάλογα με τις διαστάσεις τους. Για κάθε τεμάχιο έχει οριστεί μια τιμή πώλησης από την οποία, για να υπολογιστεί το τελικό κέρδος, αφαιρείται το κόστος του μετάλλου που θα χρησιμοποιηθεί.

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

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

Να γραφεί το λογισμικό στο οποίο να ορίζονται:
α) Η κλάση metal τα αντικείμενα της οποίας να υλοποιούν τα διάφορα μέταλλα που υπάρχουν στο χυτήριο. Με τη δημιουργία αντικειμένων στον τύπο της κλάσης να διαβάζονται η ποσότητα, το ειδικό βάρος και η αξία μιας μονάδας βάρους του μετάλλου.
β) Για κάθε κατηγορία τεμαχίων να οριστεί και μία κλάση η οποία να υλοποιεί τα τεμάχια της κατηγορίας. Κάθε αντικείμενο στον τύπο της κλάσης να ορίζει μια ομάδα για την οποία να διαβάζονται οι διαστάσεις και ο αριθμός των τεμαχίων που την αποτελούν.
γ) Η παραμετρική (template) κλάση product η οποία να δέχεται, ως παράμετρο, τον τύπο μιας κλάσης η οποία ορίζει μια κατηγορία τεμαχίων. Στην κλάση να ορίζεται ένας pointer στον τύπο της παραμέτρου ο οποίος να χρησιμοποιείται από τη συνάρτηση αρχικών συνθηκών της κλάσης για να δεσμευτεί δυναμικά μνήμη για έναν πίνακα από αντικείμενα στον τύπο της κλάσης που δόθηκε ως παράμετρος. Ο αριθμός των αντικειμένων του πίνακα να διαβάζεται από την ίδια συνάρτηση.
Στην κλάση να ορίζεται ακόμη η συνάρτηση b_short() η οποία να ταξινομεί τα αντικείμενα του πίνακα κατά φθίνουσα τάξη της τιμής πώλησης των τεμαχίων των αντίστοιχών ομάδων. Η συνάρτηση να επιστρέφει τη διεύθυνση του ταξινομημένου πίνακα.
δ) Η παραμετρική (template) συνάρτηση production() η οποία να δέχεται ως παράμετρο, τον τύπο μιας κλάσης η οποία ορίζει μια κατηγορία τεμαχίων. Η συνάρτηση να δέχεται ως όρισμα έναν pointer στον τύπο της παραμέτρου ο οποίος να δείχνει σε έναν πίνακα από αντικείμενα στον τύπο της παραμέτρου.

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

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

Ως εφαρμογή να οριστούν οι κλάσεις cylinder και cube οι οποίες να ορίζουν κατηγορίες τεμαχίων με σχήμα κυλίνδρου και κύβου αντίστοιχα. Για κάθε αντικείμενο στον τύπο αυτών των κλάσεων να διαβάζονται οι διαστάσεις και ο αριθμός των τεμαχίων που θα αποτελούν την αντίστοιχη ομάδα.

Η συνάρτηση main() του προγράμματος, αφού ορίσει έναν πίνακα ο οποίος να περιέχει αντικείμενα που να υλοποιούν τα μέταλλα που υπάρχουν στο χυτήριο, να ορίζει ένα αντικείμενο στον τύπο της κλάσης product με παράμετρο τον τύπο cylinder και ένα αντικείμενο στον τύπο της ίδιας κλάσης με παράμετρο τον τύπο cube. Στη συνέχεια, αφού καλέσει τη συνάρτηση b_short() για κάθε ένα από τα αντικείμενα αυτά, να καλέσει τη συνάρτηση production() πρώτα για τον πίνακα με στοιχεία τύπου cylinder που επέστρεψε η b_short() και στη συνέχεια να καλέσει ξανά την production() για τον πίνακα με στοιχεία τύπου cube που επέστρεψε η δεύτερη κλήση της b_short(). Σε κάθε περίπτωση το πρόγραμμα να εκτυπώνει το καθαρό κέρδος που θα υπάρχει από την πώληση των τεμαχίων που κατασκευάστηκαν
 
Βοηθητικές παρατηρήσεις:
Τα τεμάχια που ανήκουν σε μία κατηγορία έχουν όλα το ίδιο σχήμα.
Τα τεμάχια που αποτελούν μια ομάδα έχουν όλα τις ίδιες διαστάσεις. Τεμάχια με ίδιο σχήμα αλλά διαφορετικές διαστάσεις ανήκουν στην ίδια κατηγορία αλλά σε διαφορετικές ομάδες.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: c0ndemn3d on December 19, 2012, 16:39:56 pm
Θέλει να τη λύσουμε με ανεξαρτησία, έτσι;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 28, 2012, 00:50:19 am
Θέλει να τη λύσουμε με ανεξαρτησία, έτσι;

Ο Συμεωνίδης είπε πως χρειάζεται ανεξαρτησία συνάρτησης (που θα επιτευχθεί μέσω templates), αλλά όχι ανεξαρτησία λογισμικού.

ΥΓ: By far, η χειρότερη εκφώνηση μέχρι τώρα ^facepalm^


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 28, 2012, 16:53:48 pm
Οι κλασεις cylinder και cube ειναι public παραγομενες της metal;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 28, 2012, 17:27:15 pm
Οι κλασεις cylinder και cube ειναι public παραγομενες της metal;

Όχι, δεν έχουν καμία σχέση (από άποψη inheritance) με την κλάση metal.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: heavy melon on December 29, 2012, 00:16:43 am
ξέρουμε αν είναι η τελευταία κωλοεργασία;
πείτε μου ναι, να πάρω κουράγιο  ::)


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 29, 2012, 01:05:21 am
ξέρουμε αν είναι η τελευταία κωλοεργασία;
πείτε μου ναι, να πάρω κουράγιο  ::)

Νομίζω πως θα έχει άλλη μία, τουλάχιστον :( :(


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on December 29, 2012, 15:18:02 pm
Κατάλαβε κανείς πως υπολογίζεται η τιμή μιας ομάδας?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 29, 2012, 15:31:11 pm
Εξήγησε τι ακριβώς εννοείς, λέει πουθενά στην εκφώνηση για "τιμή μιας ομάδας" ?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on December 29, 2012, 18:02:45 pm
ξέρουμε αν είναι η τελευταία κωλοεργασία;
πείτε μου ναι, να πάρω κουράγιο  ::)

Νομίζω πως θα έχει άλλη μία, τουλάχιστον :( :(
Άλλη μία μόνο ...γιατί μετά αρχίζει η εξεταστική.

*βγάλε την τελευταία βδομάδα μαθημάτων που θα γίνουν και τα τελευταία εργαστήρια.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on December 29, 2012, 18:09:25 pm
Εξήγησε τι ακριβώς εννοείς, λέει πουθενά στην εκφώνηση για "τιμή μιας ομάδας" ?



Η εκφώνηση της άσκησης λέει:

Τα τεμάχια κάθε κατηγορίας χωρίζονται σε ομάδες ανάλογα με τις διαστάσεις τους. Για κάθε τεμάχιο έχει οριστεί μια τιμή πώλησης από την οποία, για να υπολογιστεί το τελικό κέρδος, αφαιρείται το κόστος του μετάλλου που θα χρησιμοποιηθεί.

Δηλαδή την τιμή κάθε ομάδας μιας κατηγορίας θα την ορίσουμε εμείς;Και η τιμή θα εξαρτάται από το είδος του μετάλλου που θα χρησιμοποιηθεί για την κατασκευή της ομάδας ή μόνο από τις διαστάσεις των τεμαχίων της ομάδας;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 29, 2012, 18:35:46 pm
Για κάθε τεμάχιο έχει οριστεί μια τιμή πώλησης
Αυτό το διαβάζεις από τον χρήστη (σταθερή τιμή για κάθε τεμάχιο μιας συγκεκριμένης ομάδας).

το κόστος του μετάλλου που θα χρησιμοποιηθεί.
Αυτό εξαρτάται από την αξία του μετάλλου που θα χρησιμοποιηθεί, αλλά και από τον όγκο του τεμαχίου που θα δημιουργηθεί.

Τελικά: Καθαρό Κέρδος = Τιμή Πώλησης - Κόστος Μετάλλου


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 29, 2012, 19:02:17 pm
Αν εχω καταλαβει καλα η παραμετρικη product θα δεσμευει μνημη για ενα πινακα απο κ αντικειμενα τυπου cylinder π.χ. και το κ θα το δινουμε μεσα στην Σ.Α.Σ..Με τις ομαδες καθε κατηγοριας δεν εχω καταλαβει τι παιζει...


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Halfpenny on December 29, 2012, 19:23:09 pm
Και εγώ δεν καταλαβαίνω πως θα γίνει αυτό με τις ομάδες. Λέει σε κάποιο σημείο

Quote
Κάθε αντικείμενο στον τύπο της κλάσεων (που έχουν δημιουργηθεί για κάθε κατηγορία τεμαχίων) να ορίζει μια ομάδα για την οποία να διαβάζονται οι διαστάσεις και ο αριθμός τεμαχίων που την αποτελούν

και αναφέρει επίσης στις βοηθητικές παρατηρήσεις:

Quote
Τα τεμάχια που αποτελούν μια ομάδα έχουν όλα τις ίδιες διαστάσεις. Τεμάχια με το ίδιο σχήμα αλλά διαφορετικές διαστάσεις ανήκουν στην ίδια κατηγορία αλλά σε διαφορετικές ομάδες

Δεν μπορώ να καταλάβω πως θα υλοποιήσω μια τέτοια υποκατηγοριοποίηση. Το να ορίζει κάθε αντικείμενο μια ομάδα, μπορώ να το φανταστώ, αλλά θέλει κάθε αντικείμενο να ελέγχει πρώτα από τις διαστάσεις του αν υπάρχει ήδη τέτοια ομάδα δημιουργημένη για να το εντάξει σε αυτήν ?? αυτό δεν μπορώ να το καταλάβω.. Πως γίνεται να υλοποιήσουμε την δημιουργία των ομάδων?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on December 29, 2012, 19:33:32 pm
Για κάθε τεμάχιο έχει οριστεί μια τιμή πώλησης
Αυτό το διαβάζεις από τον χρήστη (σταθερή τιμή για κάθε τεμάχιο μιας συγκεκριμένης ομάδας).

το κόστος του μετάλλου που θα χρησιμοποιηθεί.
Αυτό εξαρτάται από την αξία του μετάλλου που θα χρησιμοποιηθεί, αλλά και από τον όγκο του τεμαχίου που θα δημιουργηθεί.

Τελικά: Καθαρό Κέρδος = Τιμή Πώλησης - Κόστος Μετάλλου



Δηλαδή η τιμή ενός τεμαχίου μιας ομάδας θα είναι ανεξάρτητη από το μέταλλο από το οποίο θα κατασκευαστεί?Μου φαίνεται κάπως παράλογο.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 29, 2012, 19:39:09 pm

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

Μου φαίνεται κάπως παράλογο.
^superconfused^ ^superconfused^ ^superconfused^


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on December 29, 2012, 19:55:00 pm
Προφανώς είναι παράλογο ένας κύβος από σίδερο να κοστίζει το ίδιο με έναν  από χρυσό αν έχουν τις ίδιες διαστάσεις.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 29, 2012, 19:59:11 pm
Προφανώς είναι παράλογο ένας κύβος από σίδερο να κοστίζει το ίδιο με έναν  από χρυσό αν έχουν τις ίδιες διαστάσεις.

Έχεις απόλυτο δίκιο σε αυτό που λες, αλλά ας μην ξεχνάμε πως πρόκεται για εκφώνηση άσκησης του Κορτέση :D :D


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on December 29, 2012, 20:10:09 pm
Όντως.Αλλά σκέφτομαι ακόμα ότι αν βάλεις μια λογική τιμή για ένα τεμάχιο σιδήρου,αυτή θα είναι πολύ μικρή για ένα ίδιο τεμάχιο χρυσού οπότε αν το φτιάξεις από χρυσό θα έχεις ζημιά και όχι κέρδος.Εκτός αν βάλεις μια παράλογα υψηλή τιμή για να έχεις κέρδος σε όλες τις περιπτώσεις.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 30, 2012, 13:01:50 pm
Πως χωριζονται τα τεμαχια καθε κατηγοριας σε ομαδες αναλογα με τις διαστασεις τους;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 30, 2012, 13:23:45 pm
Πως χωριζονται τα τεμαχια καθε κατηγοριας σε ομαδες αναλογα με τις διαστασεις τους;

Κάθε αντικείμενο τύπου cylinder/cube έχει ένα πίνακα (για τον οποίο θα δεσμεύσεις δυναμικά μνήμη) με τις διάφορες ομάδες τεμαχίων (κάθε ομάδα θα περιέχει n τεμάχια ίδιων διαστάσεων).

Κάθε αντικείμενο τύπου cylinder/cube αποτελεί και μία ομάδα που υλοποιεί n-στο-πλήθος τεμάχια, ίδιων διαστάσεων.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 30, 2012, 13:26:46 pm
Οκ.Εγω νομιζα θα φτιαξω κι αλλη κλαση για καθε ομαδα.Ευχαριστω πολυ.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on December 30, 2012, 14:40:29 pm
Εχει καπου ασκήσεις απο templates..??


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 30, 2012, 16:43:15 pm
Οταν φτιαχνω ενα αντικειμενο cylinder μεσα θα περιεχει μονο τεμαχια της ιδιας ομαδας δηλαδη με τις ιδιες διαστασεις;
εγω αυτο καταλαβαινω

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


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: c0ndemn3d on December 30, 2012, 16:47:24 pm
Μάγκες μια κλάση είναι μια κατηγορία.
Κάθε αντικείμενο αυτής της κλάσης είναι μια ομάδα.


Και δεν νομίζω ότι πρέπει να ελέγχουμε αν οι διαστάσεις είναι διαφορετικές σε κάθε ομάδα. Ποτέ δεν ελέγχαμε τέτοια πράματα.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 30, 2012, 16:58:56 pm
Κι εγω αυτο καταλαβα.Οτι θα δηλωσουμε π.χ. 5 αντικειμενα τυπου cylinder και σε καθε ενα θα εχουμε κ τεμαχια με ιδιες διαστασεις.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: thanospr on December 30, 2012, 18:08:53 pm
Γινεται μια συναρτηση της product να καλει μια συναρτηση της cube η της cylinder ετσι;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on December 30, 2012, 21:31:28 pm
Συγνώμη για όσους είχαν δει το παραπάνω μήνυμα μου, είχα κάνει τραγικό λάθος!
Για να τα ξεακαθαρίσουμε, κάθε αντικείμενο στη κλάση cylinder/cube αποτελεί και μια ομάδα με συγκεκριμένες διαστάσεις, που υλοποιεί n-στο-πλήθος τεμάχια (cylinders/cubes).

Γινεται μια συναρτηση της product να καλει μια συναρτηση της cube η της cylinder ετσι;
Εφόσον οι εν λόγω συναρτη΄σεις της cube/cylinder είναι public, τότε ναι.

Οταν φτιαχνω ενα αντικειμενο cylinder μεσα θα περιεχει μονο τεμαχια της ιδιας ομαδας δηλαδη με τις ιδιες διαστασεις;
εγω αυτο καταλαβαινω
Ναι, σωστά καταλαβαίνεις.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: skipper on January 02, 2013, 19:29:29 pm
Καμια ιδεα για το πως θα αποθηκευονται οι τιμες του καθε τεμαχιου ξεχωριστα; Οπως το καταλαβαινω ο πινακας της product θα ειναι δισδιαστατος, με καθε γραμμη να περιεχει ξεχωριστα τις τιμες των διαφορετικων (σε αριθμο) τεμαχιων της καθε ομαδας. Ζηταει ομως να δεσμευθει δυναμικα μνημη, ενω δε γνωριζεις απο πριν τις στηλες για την καθε γραμμη. Εκτος αν ο πινακας ειναι μονοδιαστατος και περιεχει ενα ενα ολα τα τεμαχια μιας κατηγοριας, αλλα υποτιθεται οτι το καθε αντικειμενο τυπου cylinder η cube ειναι μια ομαδα και οχι ενα τεμαχιο! ^dontknow^


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 02, 2013, 19:36:15 pm
Καμια ιδεα για το πως θα αποθηκευονται οι τιμες του καθε τεμαχιου ξεχωριστα; Οπως το καταλαβαινω ο πινακας της product θα ειναι δισδιαστατος, με καθε γραμμη να περιεχει ξεχωριστα τις τιμες των διαφορετικων (σε αριθμο) τεμαχιων της καθε ομαδας. Ζηταει ομως να δεσμευθει δυναμικα μνημη, ενω δε γνωριζεις απο πριν τις στηλες για την καθε γραμμη. Εκτος αν ο πινακας ειναι μονοδιαστατος και περιεχει ενα ενα ολα τα τεμαχια μιας κατηγοριας, αλλα υποτιθεται οτι το καθε αντικειμενο τυπου cylinder η cube ειναι μια ομαδα και οχι ενα τεμαχιο! ^dontknow^

Αυτό που υποψιάζεσαι είναι.
Κάθε αντικείμενο τύπου cylinder/cube αποτελεί μια ομάδα (και όχι ένα τεμάχιο) προϊόντων. Οπότε κάθε αντικείμενο της κλάσης product θα αποτελείται από έναν μονοδιάστατο πίνακα (για τον οποίο θα δεσμεύεται δυναμικά μνήμη) που θα περιέχει αντικείμενα τύπου cylinder/cube. Κάθε ένα απο αυτά τα αντικείμενα, ουσιαστικά, υλοποιεί και μια ομάδα τεμαχίων (κάθε ομάδα αποτελείται από τεμάχια ίδιων διαστάσεων).
Άρα, οι κλάσεις cylinder και cube (αφού υλοποιούν μία ομάδα τεμαχίων) θα πρέπει να έχουν μια μεταβλητή που να αποτελεί τον αριθμό των τεμαχίων που ανήκουν στη συγκεκριμένη ομαδα, καθώς και τις διαστάσεις τους (ίδιες για όλα τα τεμάχια που ανήκουν σε αυτήν την ομάδα). Τέλος, θα πρέπει να έχουν και μια μεταβλητή με την τιμή πώλησης των τεμαχίων που ανήκουν στη συγκεκριμένη ομάδα (πάλι, ίδια για όλα τα τεμάχια που ανήκουν στην εν λόγω ομάδα).


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: skipper on January 02, 2013, 20:19:08 pm
Καμια ιδεα για το πως θα αποθηκευονται οι τιμες του καθε τεμαχιου ξεχωριστα; Οπως το καταλαβαινω ο πινακας της product θα ειναι δισδιαστατος, με καθε γραμμη να περιεχει ξεχωριστα τις τιμες των διαφορετικων (σε αριθμο) τεμαχιων της καθε ομαδας. Ζηταει ομως να δεσμευθει δυναμικα μνημη, ενω δε γνωριζεις απο πριν τις στηλες για την καθε γραμμη. Εκτος αν ο πινακας ειναι μονοδιαστατος και περιεχει ενα ενα ολα τα τεμαχια μιας κατηγοριας, αλλα υποτιθεται οτι το καθε αντικειμενο τυπου cylinder η cube ειναι μια ομαδα και οχι ενα τεμαχιο! ^dontknow^

Αυτό που υποψιάζεσαι είναι.
Κάθε αντικείμενο τύπου cylinder/cube αποτελεί μια ομάδα (και όχι ένα τεμάχιο) προϊόντων. Οπότε κάθε αντικείμενο της κλάσης product θα αποτελείται από έναν μονοδιάστατο πίνακα (για τον οποίο θα δεσμεύεται δυναμικά μνήμη) που θα περιέχει αντικείμενα τύπου cylinder/cube. Κάθε ένα απο αυτά τα αντικείμενα, ουσιαστικά, υλοποιεί και μια ομάδα τεμαχίων (κάθε ομάδα αποτελείται από τεμάχια ίδιων διαστάσεων).
Άρα, οι κλάσεις cylinder και cube (αφού υλοποιούν μία ομάδα τεμαχίων) θα πρέπει να έχουν μια μεταβλητή που να αποτελεί τον αριθμό των τεμαχίων που ανήκουν στη συγκεκριμένη ομαδα, καθώς και τις διαστάσεις τους (ίδιες για όλα τα τεμάχια που ανήκουν σε αυτήν την ομάδα). Τέλος, θα πρέπει να έχουν και μια μεταβλητή με την τιμή πώλησης των τεμαχίων που ανήκουν στη συγκεκριμένη ομάδα (πάλι, ίδια για όλα τα τεμάχια που ανήκουν στην εν λόγω ομάδα).

Αυτο που λες στο τελος ειναι σιγουρο ομως; Γιατι αν οντως ολα τα τεμαχια μιας ομαδας εχουν την ιδια τιμη απλοποιειται σημαντικα η διαδικασια. Εγω παντως δε μπορεσα να το συμπερανω απ την (σαφεστατη!) εκφωνηση.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 02, 2013, 20:59:24 pm
μολις διαβασα την εκφώνηση... τι 'ναι αυτη η τραγωδια....

edit: παιδια, εχασα τη τελευταια βδομαδα του προγραμματισμου και δεν ξερω τι ειναι η template κλαση... που το εχει αυτο στις σημειωσεις;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 02, 2013, 21:21:28 pm
μολις διαβασα την εκφώνηση... τι 'ναι αυτη η τραγωδια....

edit: παιδια, εχασα τη τελευταια βδομαδα του προγραμματισμου και δεν ξερω τι ειναι η template κλαση... που το εχει αυτο στις σημειωσεις;
templates (http://alexander.ee.auth.gr:8083/eTHMMY/archive%5C146%5CdownloadFile%5C2044%5CMitres.ppt)


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 02, 2013, 21:23:11 pm
Ευχαριστω ^_^


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: skipper on January 03, 2013, 20:07:27 pm
Παιδια η production, εχοντας παρει τον πινακα απο τη b_short, δε θα πρεπει με καποιο τροπο να ξερει το μεγεθος του (πληθος ομαδων κατηγοριας) η το συνολικο πληθος τεμαχιων κατηγοριας για να υπολογισει τα ζητουμενα; Πως το μεταφερουμε αυτο μεσα στη συναρτηση;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Infinite Loop on January 03, 2013, 20:11:39 pm
Επειδη δεν διευκρινιζεται πουθενα στην εξαιρετικη αυτη εκφωνηση (717 λεξεις, λιγο ακομα και θα ηταν μεγαλυτερη απο την λυση) το τι γινεται στην περιπτωση που ξεμεινουμε απο ενα μεταλλο στην μεση της κατασκευης των τεμαχιων μιας ομαδας, αναφερω οτι ο Κορτεσης στην περσινη ενδεικτικη λυση της ασκησης E (που ειναι παρομοια με αυτην, μονο που αντι για templates θελει virtuals), απο οσα καταφερα να καταλαβω (να 'ναι καλα το χαρμα οφθαλμων indentation που εχει κανει που στελνει το μπλοκ της if αριστεροτερα απο την ιδια την if), δοκιμαζει πρωτα να κατασκευασει ολα τα τεμαχια της μιας ομαδας μαζι, και αν δεν υπαρχει αρκετο μεταλλο για ολα, τοτε κατασκευαζει μονο οσα μπορει χρησιμοποιωντας εκεινο το μεταλλο, και τα υπολοιπα χρησιμοποιωντας αλλο μεταλλο. Δηλαδη μπορει αν μια ομαδα εχει 10 τεμαχια, να σου κατασκευασει τα 3 χρησιμοποιωντας εναν τυπο μεταλλου και τα αλλα 7 χρησιμοποιωντας αλλον τυπο μεταλλου.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Infinite Loop on January 03, 2013, 20:14:04 pm
Παιδια η production, εχοντας παρει τον πινακα απο τη b_short, δε θα πρεπει με καποιο τροπο να ξερει το μεγεθος του (πληθος ομαδων κατηγοριας) η το συνολικο πληθος τεμαχιων κατηγοριας για να υπολογισει τα ζητουμενα; Πως το μεταφερουμε αυτο μεσα στη συναρτηση;

Βαζεις μια product<T>::get_n() που σου επιστρεφει το μεγεθος του πινακα που περιεχει το αντικειμενο τυπου product<T>, και καλεις την production() με ορισμα την τιμη που θα παρεις απο την get_n().

(εδω που τα λεμε, ειναι εντελως ηλιθιο να μην ειναι η production() συναρτηση-μελος της product<T>...)


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: skipper on January 03, 2013, 20:37:49 pm
Παιδια η production, εχοντας παρει τον πινακα απο τη b_short, δε θα πρεπει με καποιο τροπο να ξερει το μεγεθος του (πληθος ομαδων κατηγοριας) η το συνολικο πληθος τεμαχιων κατηγοριας για να υπολογισει τα ζητουμενα; Πως το μεταφερουμε αυτο μεσα στη συναρτηση;

Βαζεις μια product<T>::get_n() που σου επιστρεφει το μεγεθος του πινακα που περιεχει το αντικειμενο τυπου product<T>, και καλεις την production() με ορισμα την τιμη που θα παρεις απο την get_n().

(εδω που τα λεμε, ειναι εντελως ηλιθιο να μην ειναι η production() συναρτηση-μελος της product<T>...)

Οντως αυτο που λες το ειχα σκεφτει και πριν και μαλλον ειναι ο πιο σωστος (κατ' αναγκη) τροπος να γινει. Οσο για το να ηταν η συναρτηση μελος της κλασης η εστω φιλια, η τουλαχιστον να διευκρινιζε για το 2ο ορισμα, τα συγχαρητηρια μου στο δημιουργο της εκφωνησης!  :P


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 03, 2013, 21:30:18 pm
Η product οριζει κατηγορια τεμαχιων? δλδ τν cube kai tn cylinder? Θα εχει δλδ μεσα τς συναρτησεις για των αριθμο τεμαχιων και τς διαστασεις;
Ας ανεβασει καποιος πως εκανε τν product γτ δν εχω καταλαβει τι αντιπροσωπευει απο τν ωραια εκφώνηση.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 03, 2013, 22:10:12 pm
Η product οριζει κατηγορια τεμαχιων? δλδ τν cube kai tn cylinder? Θα εχει δλδ μεσα τς συναρτησεις για των αριθμο τεμαχιων και τς διαστασεις;
Ας ανεβασει καποιος πως εκανε τν product γτ δν εχω καταλαβει τι αντιπροσωπευει απο τν ωραια εκφώνηση.
Η product ορίζεται για να υλοποιεί ένα πίνακα από cylinder και ένα πίνακα από cube.Τα στοιχεία αυτών των 2 πινάκων(δλδ τα αντικείμενα) αντιπροσωπεύουν τις ομάδες.
Συνεπώς η product θα έχει ως private στοιχεία ένα pointer όπως αναφέρει η εκφώνηση και ένα int n που θα είναι το πλήθος των στοιχείων(δλδ πλήθος των ομάδων για το κάθε σχήμα) του πίνακα που δημιουργεί.
Δες ένα παράδειγμα.
Code:
template <class A>
class product
{
    A *a;
    int n;
  public:
    product();
    A *b_short();
    ........
};
ΥΓ:μη βάλεις Α για όνομα φυσικά  :P


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Alice_8 on January 04, 2013, 18:04:06 pm
Παιδιά , στην συνάρτηση production θα στέλνουμε ως ορίσματα τον όγκο που έχουμε απο ένα μέταλλο και το πόσο όγκο θέλουμε ν κατασκευαστεί απο μια κατηγορία(πχ απο κύβους), ως ορίσματα και αυτή θα μας δείχνει αν ο όγκος είναι αρκετός ή χρειαζόμαστε απο άλλο μεταλλο???
Αν είναι έτσι πως θα δείξουμε την σειρά που θα έχουμε για κάθε μέταλλο?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 04, 2013, 18:10:22 pm
Παιδιά , στην συνάρτηση production θα στέλνουμε ως ορίσματα τον όγκο που έχουμε απο ένα μέταλλο και το πόσο όγκο θέλουμε ν κατασκευαστεί απο μια κατηγορία(πχ απο κύβους), ως ορίσματα και αυτή θα μας δείχνει αν ο όγκος είναι αρκετός ή χρειαζόμαστε απο άλλο μεταλλο???
Αν είναι έτσι πως θα δείξουμε την σειρά που θα έχουμε για κάθε μέταλλο?

Μπορείς να στείλεις σαν όρισματα, στη συνάρτηση production, ολόκληρο τον πίνακα με τα αντικείμενα metal.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Alice_8 on January 04, 2013, 18:25:12 pm
Ναι αυτό τ έκανα..
Κ έβαλα μετά να βρίσκει τον όγκο τεμαχίων που θα φτιάξουμε(all) και να το συγκρινει με τον όγκο μετάλλου που έχουμε  με την σειρά που είναι αποθηκευμένο....   if(all<m[ι].get_vol()){ μπλα μπλα}
αν όμως δεν μας φτάνει στην else περίπτωση πως δείχνω να πάει στο επόμενο¨?
Είναι σωστό να πώ m[i+1] ??


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 04, 2013, 18:27:32 pm
Quote
β) Για κάθε κατηγορία τεμαχίων να οριστεί και μία κλάση η οποία να υλοποιεί τα τεμάχια της κατηγορίας. Κάθε αντικείμενο στον τύπο της κλάσης να ορίζει μια ομάδα για την οποία να διαβάζονται οι διαστάσεις και ο αριθμός των τεμαχίων που την αποτελούν.
Παιδια, εδώ τι εννοεί για καθε κατηγορια τεμαχιων; Δηλαδη πρεπει να κανω δύο κλάσεις, μία για την cylinder και μια για την cube; Η μπορω να το κανω παραμετρικα; Αν ναι, πως;

Γμτ, πηγα σε ΑΡΧΗΣΤΑ μαθηματα σε αυτο το μαθημα και εχασα καποια απ'τα πιο σημαντικα. Και η εκφωνηση suckαρει αγρια...


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 04, 2013, 19:10:25 pm
Παιδια, εδώ τι εννοεί για καθε κατηγορια τεμαχιων; Δηλαδη πρεπει να κανω δύο κλάσεις, μία για την cylinder και μια για την cube; Η μπορω να το κανω παραμετρικα; Αν ναι, πως;
Ναι.

2 σχόλια για την εκφώνηση:
κατηγορία = class cylinder , class cube                                 τα τεμάχια χωρίζονται σε κατηγορίες ανάλογα με το σχήμα
ομάδα = αντικείμενο της κλάσης cylinder ή cube                      τα τεμάχια κάθε κατηγορίας χωρίζονται σε ομάδες ανάλογα με τις διαστάσεις τους
O αριθμός των τεμαχίων της κάθε ομάδας ορίζεται κατά τη δημιουργία του αντικειμένου.
Code:
class cylinder
{
    int αριθμός_τεμαχίων;
  public:
    ......
    cylinder();
};

cylinder::cylinder()
{
    cin >>αριθμός_τεμαχίων;
    ....
}


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 04, 2013, 19:51:38 pm
Thanks φιλε μου, τελικα αυτο εκανα και γω. Η εκφωνηση δε βοηθαει καθολου.

Quote
Ως εφαρμογή να οριστούν οι κλάσεις cylinder και cube οι οποίες να ορίζουν κατηγορίες τεμαχίων με σχήμα κυλίνδρου και κύβου αντίστοιχα. Για κάθε αντικείμενο στον τύπο αυτών των κλάσεων να διαβάζονται οι διαστάσεις και ο αριθμός των τεμαχίων που θα αποτελούν την αντίστοιχη ομάδα.
Για καθε μεγεθος εχουμε και μια κλαση, αλλα δεν υποτιθεται οτι πρεπει να γραφουμε και το μεγεθος αυτό καπου μεσα σ'αυτην;

π.χ.

Code:
class cylinder
{
    int αριθμός_τεμαχίων;
    float μεγεθος(ογκος, ακτινα, πλευρα κτλ);

  public:
    ......
    cylinder();
};

edit: το λεει και στην εκφωνηση απ'οτι βλεπω


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 04, 2013, 20:58:16 pm
Για καθε μεγεθος εχουμε και μια κλαση, αλλα δεν υποτιθεται οτι πρεπει να γραφουμε και το μεγεθος αυτό καπου μεσα σ'αυτην;

Ναι, πρέπει να έχεις και τις αντίστοιχες μεταβλητές μέσα στην κλάση (τρεις για cube και δύο για cylinder).


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 04, 2013, 21:12:56 pm
Mηπως να φτιαχναμε μια base class κατιγορια και ι cylinder kai  η cube να παραγονται απο κει δημόσια? και μεσα στν βασικη να εχει συναρτησεις και μονο το μεγεθος(συναρτηση) να αλλαζει? και τν b short με quicksort θα την κανουμε? καποιος τροπος?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: New_Entry on January 04, 2013, 21:54:06 pm
Για καθε μεγεθος εχουμε και μια κλαση, αλλα δεν υποτιθεται οτι πρεπει να γραφουμε και το μεγεθος αυτό καπου μεσα σ'αυτην;

Ναι, πρέπει να έχεις και τις αντίστοιχες μεταβλητές μέσα στην κλάση (τρεις για cube και δύο για cylinder).


Γιατί 3 για cube? Ο κύβος δεν ορίζεται μόνο από το μήκος της πλευράς του? Ή όταν λέμε κύβο εννοούμε ορθογώνιο παραλληλεπίπεδο??


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: skipper on January 04, 2013, 22:38:23 pm
Για καθε μεγεθος εχουμε και μια κλαση, αλλα δεν υποτιθεται οτι πρεπει να γραφουμε και το μεγεθος αυτό καπου μεσα σ'αυτην;

Ναι, πρέπει να έχεις και τις αντίστοιχες μεταβλητές μέσα στην κλάση (τρεις για cube και δύο για cylinder).


Γιατί 3 για cube? Ο κύβος δεν ορίζεται μόνο από το μήκος της πλευράς του? Ή όταν λέμε κύβο εννοούμε ορθογώνιο παραλληλεπίπεδο??

Νομιζω κανονικο κυβο εννοει, κι εγω μονο μια πλευρα εβαλα σα μεταβλητη.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: New_Entry on January 05, 2013, 12:15:37 pm
Στη συνάρτηση b_short που ταξινομεί κατά φθίνουσα τάξη της τιμής πώλησης των τεμαχίων, πώς θα αναφερθώ στην τιμή πώλησης; Η τιμή πώλησης είναι μεταβλητή των κλάσεων cube και cylinder, έτσι; Πριν η παράμετρος πάρει τις τιμές cube και cylinder, δεν θα είναι άγνωστη για την product η μεταβλητή της τιμής; Και επίσης θα δημιουργήσω νέο πίνακα όπου θα περνιούνται τα αντικείμενα ταξινομημένα;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 05, 2013, 13:05:53 pm
Ναι καμια ιδέα για την b short πως θα γίνει;; Να χρησιμοποιήσουμε καμια
Quicksort?  καμια ιδέα;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 05, 2013, 14:32:48 pm
Για καθε μεγεθος εχουμε και μια κλαση, αλλα δεν υποτιθεται οτι πρεπει να γραφουμε και το μεγεθος αυτό καπου μεσα σ'αυτην;
Ναι, πρέπει να έχεις και τις αντίστοιχες μεταβλητές μέσα στην κλάση (τρεις για cube και δύο για cylinder).
Γιατί 3 για cube? Ο κύβος δεν ορίζεται μόνο από το μήκος της πλευράς του? Ή όταν λέμε κύβο εννοούμε ορθογώνιο παραλληλεπίπεδο??
Νομιζω κανονικο κυβο εννοει, κι εγω μονο μια πλευρα εβαλα σα μεταβλητη.

Σορρυ, παιδιά, μεγαλιώδης βλακεία. Προφανώς και θέλει μόνο μία μεταβλητή ο κύβος.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 05, 2013, 14:39:38 pm
Στη συνάρτηση b_short που ταξινομεί κατά φθίνουσα τάξη της τιμής πώλησης των τεμαχίων, πώς θα αναφερθώ στην τιμή πώλησης; Η τιμή πώλησης είναι μεταβλητή των κλάσεων cube και cylinder, έτσι; Πριν η παράμετρος πάρει τις τιμές cube και cylinder, δεν θα είναι άγνωστη για την product η μεταβλητή της τιμής; Και επίσης θα δημιουργήσω νέο πίνακα όπου θα περνιούνται τα αντικείμενα ταξινομημένα;
Η συνάρτηση b_short() δεν ξέρει cube και cylinder, ξέρει μόνο μια παράμετρο (έστω T). Επομένως, αν ορίσεις και στις δύο κλάσεις σου (cube και cylinder) μια συνάρτηση get_piece_price(), τότε μπορείς μέσα στη b_short() να χρησιμοποιήσεις την get_piece_price() για τα αντικείμενα τύπου T (που στην υλοποίηση θα είναι cube ή cylinder).
Αυτά μπορείς να τα κάνεις είτε σε ένα νέο πίνακα (που θα περιέχει αντικείμενα τύπου T) που θα δημιουργήσεις ώστε να περνιούνται ταξινομημένα τα αντικείμενα, αλλά μπορείς και να επεξεργάζεσαι τον αρχικό σου πίνακα.

Ναι καμια ιδέα για την b short πως θα γίνει;; Να χρησιμοποιήσουμε καμια
Quicksort?  καμια ιδέα;
Δεν διευκρινίζει, άρα όπως θέλει ο καθένας. Κάνε bubble sort ;D



Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Alice_8 on January 05, 2013, 15:59:46 pm
Ξέρει κανείς γιατί μου βγάζει λάθος ο compiler στο g.production() όπου το g είναι αντικείμενο τύπου cube πχ και γι αυτό,  καλώ την συνάρτηση production() να κάνει τα δικά της?
Μ βγάζει οτι η κλαση cube δεν έχει συναρτηση production() ,
 που ισχυει αλλα δεν μπορουμε ν την κανουμε φιλικη..οποτε τι κανουμε?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 05, 2013, 16:11:30 pm
Ξέρει κανείς γιατί μου βγάζει λάθος ο compiler στο g.production() όπου το g είναι αντικείμενο τύπου cube πχ και γι αυτό,  καλώ την συνάρτηση production() να κάνει τα δικά της?
Μ βγάζει οτι η κλαση cube δεν έχει συναρτηση production() ,
 που ισχυει αλλα δεν μπορουμε ν την κανουμε φιλικη..οποτε τι κανουμε?

Η συνάρτηση production πρέπει να είναι μια απλή παραμετρική συνάρτηση. Δεν πρέπει να είναι συνάρτηση-μέλος κάποιοας κλάσης (για να την καλέσεις με την εντολή g.production(), είναι σα να εννοείς πως έχεις ορίσει την συνάρτηση production() ως συνάρτηση-μέλος στη κλάση στην οποία ανήκει το αντικείμενο g).


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: New_Entry on January 05, 2013, 16:26:49 pm
Στη συνάρτηση b_short που ταξινομεί κατά φθίνουσα τάξη της τιμής πώλησης των τεμαχίων, πώς θα αναφερθώ στην τιμή πώλησης; Η τιμή πώλησης είναι μεταβλητή των κλάσεων cube και cylinder, έτσι; Πριν η παράμετρος πάρει τις τιμές cube και cylinder, δεν θα είναι άγνωστη για την product η μεταβλητή της τιμής; Και επίσης θα δημιουργήσω νέο πίνακα όπου θα περνιούνται τα αντικείμενα ταξινομημένα;
Η συνάρτηση b_short() δεν ξέρει cube και cylinder, ξέρει μόνο μια παράμετρο (έστω T). Επομένως, αν ορίσεις και στις δύο κλάσεις σου (cube και cylinder) μια συνάρτηση get_piece_price(), τότε μπορείς μέσα στη b_short() να χρησιμοποιήσεις την get_piece_price() για τα αντικείμενα τύπου T (που στην υλοποίηση θα είναι cube ή cylinder).
Αυτά μπορείς να τα κάνεις είτε σε ένα νέο πίνακα (που θα περιέχει αντικείμενα τύπου T) που θα δημιουργήσεις ώστε να περνιούνται ταξινομημένα τα αντικείμενα, αλλά μπορείς και να επεξεργάζεσαι τον αρχικό σου πίνακα.

Ευχαριστωωώ!!! Σωστά! (Φταίει το ξενύχτι μάλλον...  :-[ )


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Alice_8 on January 05, 2013, 16:30:45 pm
Ξέρει κανείς γιατί μου βγάζει λάθος ο compiler στο g.production() όπου το g είναι αντικείμενο τύπου cube πχ και γι αυτό,  καλώ την συνάρτηση production() να κάνει τα δικά της?
Μ βγάζει οτι η κλαση cube δεν έχει συναρτηση production() ,
 που ισχυει αλλα δεν μπορουμε ν την κανουμε φιλικη..οποτε τι κανουμε?

Η συνάρτηση production πρέπει να είναι μια απλή παραμετρική συνάρτηση. Δεν πρέπει να είναι συνάρτηση-μέλος κάποιοας κλάσης (για να την καλέσεις με την εντολή g.production(), είναι σα να εννοείς πως έχεις ορίσει την συνάρτηση production() ως συνάρτηση-μέλος στη κλάση στην οποία ανήκει το αντικείμενο g).



ok....Aρα πως θα την καλεσω για το αντικειμενο g?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Alice_8 on January 05, 2013, 16:42:42 pm
Τ βρήκα και τρέχει !! thanks παντως !!!


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Infinite Loop on January 05, 2013, 17:20:31 pm
Ναι καμια ιδέα για την b short πως θα γίνει;; Να χρησιμοποιήσουμε καμια
Quicksort?  καμια ιδέα;

b_short = Bubble s(h)ort. True story.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: 4emonas on January 05, 2013, 17:29:18 pm
Μπορει καποιος να μου πει τι ειναι η παραμετρικη κλαση?? :-\


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 05, 2013, 17:50:38 pm
Bubble short link απο google? καποιοος;;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: jthois on January 05, 2013, 18:00:22 pm
Bubble short link απο google? καποιοος;;
Code:
for (int i=0; i<n; i++){
for (int j=n-1; j>i; j--){
  if (**>**){
temp = p[j-1];
p[j-1] = p[j];
p[j] = temp;
}
    }
  }


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: jthois on January 05, 2013, 18:02:29 pm
Μπορει καποιος να μου πει τι ειναι η παραμετρικη κλαση?? :-\


templates (http://alexander.ee.auth.gr:8083/eTHMMY/archive%5C146%5CdownloadFile%5C2044%5CMitres.ppt)


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on January 05, 2013, 18:07:27 pm
Εφόσον η συνάρτηση production έχει παράμετρο μία κλάση δεν θα πρέπει στα ορίσματά της να έχει και ένα αντικείμενο αυτής της κλάσης?
Και αν είναι έτσι εμείς θα βάλουμε τυχαίο αντικείμενο?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: jthois on January 05, 2013, 18:42:18 pm
Να ρωτήσω και γω, ο πίνακας της κλάσης product τι περιέχει; Δηλαδή έχει την κατηγορία του προιόντος, αλλά θα πρέπει να διαβάσω και τον τύπο του μετάλλου;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 05, 2013, 18:50:14 pm
Εφόσον η συνάρτηση production έχει παράμετρο μία κλάση δεν θα πρέπει στα ορίσματά της να έχει και ένα αντικείμενο αυτής της κλάσης?
Και αν είναι έτσι εμείς θα βάλουμε τυχαίο αντικείμενο?
Στα ορίσματα της, η production(), θα έχει έναν pointer σε αντικείμενο της κλάσης-παραμετρου. Τον πίνακα δηλαδή με τα αντικείμενα τύπου cube ή cylinder.

Να ρωτήσω και γω, ο πίνακας της κλάσης product τι περιέχει; Δηλαδή έχει την κατηγορία του προιόντος, αλλά θα πρέπει να διαβάσω και τον τύπο του μετάλλου;
Ο πίνακας θα έχει αντικείμενα στον τύπο της παραμέτρου (στην πράξη cube ή cylinder). Τα μέταλλα έχουν να κάνουν με τη κλάση metal.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 05, 2013, 19:10:36 pm
Να ρωτήσω και γω, ο πίνακας της κλάσης product τι περιέχει; Δηλαδή έχει την κατηγορία του προιόντος, αλλά θα πρέπει να διαβάσω και τον τύπο του μετάλλου;
Όχι.Να μη ρωτήσεις  :P
πάνε διάβασε τα προηγούμενα post

Code:
template <class A>
class product
{
    A *a;
    int n;
  public:
    product();
    A *b_short();
    ........
};


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: jthois on January 05, 2013, 19:27:47 pm
Να ρωτήσω και γω, ο πίνακας της κλάσης product τι περιέχει; Δηλαδή έχει την κατηγορία του προιόντος, αλλά θα πρέπει να διαβάσω και τον τύπο του μετάλλου;
Όχι.Να μη ρωτήσεις  :P
πάνε διάβασε τα προηγούμενα post

Code:
template <class A>
class product
{
    A *a;
    int n;
  public:
    product();
    A *b_short();
    ........
};

Τα χω λιώσει ρε τα προηγούμενα, άλλο ρωτάω. αν ο πίνακας της product θα περιέχει την τιμή του κάθε τεμαχίου ή θα πρέπει να εισάγω στα ορίσματα τα μέταλλα;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 05, 2013, 20:02:25 pm
Να ρωτήσω και γω, ο πίνακας της κλάσης product τι περιέχει; Δηλαδή έχει την κατηγορία του προιόντος, αλλά θα πρέπει να διαβάσω και τον τύπο του μετάλλου;
Όχι.Να μη ρωτήσεις  :P
πάνε διάβασε τα προηγούμενα post

Code:
template <class A>
class product
{
    A *a;
    int n;
  public:
    product();
    A *b_short();
    ........
};

Τα χω λιώσει ρε τα προηγούμενα, άλλο ρωτάω. αν ο πίνακας της product θα περιέχει την τιμή του κάθε τεμαχίου ή θα πρέπει να εισάγω στα ορίσματα τα μέταλλα;

Νομίζω πως, τώρα, κατάλαβα τι ρωτάς. Εγώ έβαλα, επιπλέον, τον πίνακα με τα μέταλλα στα ορίσματα της production().


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 05, 2013, 20:08:08 pm
Γιατι να βάλειςτον πίνακα με τα μέταλλα στα ορίσματα της production().? για τν b_short αμα στς cube και cylinder εχω φτιάξει get_price() πως το χρησιμοποιώ στην b_short?

\ως:if((p->get_price())>p[j]->get_price()))
bla bla?

opou T *p;//ponter παραμετρου.. :o


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 05, 2013, 20:21:21 pm
Γιατι να βάλειςτον πίνακα με τα μέταλλα στα ορίσματα της production().?
Για να κάνεις την πράξη:    τιμή_πώλησης - κόστος_μετάλλου = τελικό_κέρδος


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 05, 2013, 20:25:06 pm
Aυτο που ρώτησα για την b_short γνωρίζεις?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: 4emonas on January 05, 2013, 21:22:08 pm
Μπορει καποιος να μου πει τι ειναι η παραμετρικη κλαση?? :-\


templates (http://alexander.ee.auth.gr:8083/eTHMMY/archive%5C146%5CdownloadFile%5C2044%5CMitres.ppt)


thnx:D


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: johnnykost on January 05, 2013, 21:28:58 pm
Για τις κλάσεις cylinder και cube πρέπει να ορίσουμε και μια μεταβλητή για την τιμή πώλησης κάθε τεμαχίου?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 05, 2013, 21:30:36 pm
Nαι.. για να το χρησιμοποιησεις στν b_short απο τι καταλαβα και εγω.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: johnnykost on January 05, 2013, 21:32:53 pm
θενκς  ;). Τόση ώρα με μπέρδευε γιατί στην εκφώνηση έλεγε μόνο για διαστάσεις και αριθμό τεμαχίων...


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on January 05, 2013, 22:50:22 pm
Για τη συνάρτηση production ζητάει να εκτυπώνει τον αριθμό και τον τύπο των τεμαχίων που θα κατασκευαστούν από το κάθε μέταλλο.Όταν λέει τον τύπο των τεμαχίων φαντάζομαι εννοεί τις διαστάσεις των ομάδων που θα φτιαχτούν.Αλλά ανάλογα με το αν η παράμετρος είναι κύβος ή κύλινδρος θα πρέπει να εκτυπώνει διαφορετικό μήνυμα για τις διαστάσεις.Αν έχω καταλάβει σωστά είναι λάθος να έχουμε διαφορετικές εντολές ανάλογα με  την παράμετρο.Ξέρει κανείς πως μπορούμε να το αντιμετωπίσουμε αυτό?   


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Marco on January 05, 2013, 23:49:57 pm
Για τη συνάρτηση production ζητάει να εκτυπώνει τον αριθμό και τον τύπο των τεμαχίων που θα κατασκευαστούν από το κάθε μέταλλο.Όταν λέει τον τύπο των τεμαχίων φαντάζομαι εννοεί τις διαστάσεις των ομάδων που θα φτιαχτούν.Αλλά ανάλογα με το αν η παράμετρος είναι κύβος ή κύλινδρος θα πρέπει να εκτυπώνει διαφορετικό μήνυμα για τις διαστάσεις.Αν έχω καταλάβει σωστά είναι λάθος να έχουμε διαφορετικές εντολές ανάλογα με  την παράμετρο.Ξέρει κανείς πως μπορούμε να το αντιμετωπίσουμε αυτό?   
λεπτομέρειες....άμα θες μην τυπώνεις καθόλου τις διαστάσεις.
μια ιδέα τέλος πάντων θα ήταν να φτιάξεις μία συνάρτηση print_dimensions στην κλάση cylinder που θα τυπώνει διαστάσεις και μία με το ίδιο όνομα στην cube αντίστοιχα.
Code:
template <class Α>
float production(Α *a,metal *m,....)
{
    a[i].print_dimensions
    ....
}
ανάλογα με το τι είναι το class A θα καλεί και διαφορετική συνάρτηση (είτε την print_dimensions της cylidner είτε αυτήν της cube)


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: manos on January 05, 2013, 23:58:54 pm
Έχεις δίκιο, ήταν πολύ απλό τελικά.


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 06, 2013, 00:33:39 am
Τον ολικο όγκο απο κύβο ή κύλινδρο πως να
Τον βγάλουμε στην production? εχω φτιάξει get_v() στην cube kai sthn cylinder
. Μετα;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 06, 2013, 01:24:28 am
Τον ολικο όγκο απο κύβο ή κύλινδρο πως να
Τον βγάλουμε στην production? εχω φτιάξει get_v() στην cube kai sthn cylinder
. Μετα;

Δεδομένου ότι έχεις περάσει στην production(), μέσω των ορισμάτων της, έναν πίνακα (έστω array) από στοιχεία cube ή cylinder (μέσω παραμέτρου Τ), δεν έχεις παρά να πεις array.get_v();


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: papatasoylis on January 06, 2013, 01:36:31 am
Εστω πινακα που λες.  Αλλα για ολα τα n που πέρνουμε
Απο την product και μεσα λογικα θέλει αριθμό τεμχίων που εχει η μια ομαδα
Συγκεκριμένης διάστασης * αρραιι..getv(). Να αθροίζονται σε μια float μεταβλητη. Η έχω καταλαβει κτ λάθος;


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Exomag on January 06, 2013, 01:58:35 am
Εστω πινακα που λες.  Αλλα για ολα τα n που πέρνουμε
Απο την product και μεσα λογικα θέλει αριθμό τεμχίων που εχει η μια ομαδα
Συγκεκριμένης διάστασης * αρραιι..getv(). Να αθροίζονται σε μια float μεταβλητη. Η έχω καταλαβει κτ λάθος;

Προσπάθησε να εξηγήσεις καλύτερα ποια ακριβώς είναι η απορία σου.
Επίσης θυμήσου πως όλα τα αντικείμενα (n σε πλήθος) που ανήκουν σε μια συγκεκριμένη ομάδα, δηλαδή σε ένα απο τα αντικείμενα του πίνακα που περνάς μέσω ορισμάτων στην product(), έχουν τις ίδιες διαστάσεις και επομένως και τον ίδιο όγκο. Οπότε αν τρέξεις την getv() για την μία ομάδα, και μετά πολλαπλασιάσεις το αποτέλεσμα με n (όπου n ο αριθμός των τεμαχίων της συγκεκριμένης ομάδας) τότε έχεις τον συνολικό όγκο των τεμαχίων που ανήκουν στη συγκεκριμένη ομάδα (εφόσον κατάλαβα καλα την ερώτηση σου).


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 06, 2013, 19:42:02 pm
Παιδια πως κανουμε friend μια παραμετρικη συναρτηση; Ετσι;

Code:
public:
       
template<class TYPE>
friend float production(.....);
};


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: elefmylo on January 06, 2013, 20:41:01 pm
Καμια ιδεα για το πως θα αποθηκευονται οι τιμες του καθε τεμαχιου ξεχωριστα; Οπως το καταλαβαινω ο πινακας της product θα ειναι δισδιαστατος, με καθε γραμμη να περιεχει ξεχωριστα τις τιμες των διαφορετικων (σε αριθμο) τεμαχιων της καθε ομαδας. Ζηταει ομως να δεσμευθει δυναμικα μνημη, ενω δε γνωριζεις απο πριν τις στηλες για την καθε γραμμη. Εκτος αν ο πινακας ειναι μονοδιαστατος και περιεχει ενα ενα ολα τα τεμαχια μιας κατηγοριας, αλλα υποτιθεται οτι το καθε αντικειμενο τυπου cylinder η cube ειναι μια ομαδα και οχι ενα τεμαχιο! ^dontknow^

Αυτό που υποψιάζεσαι είναι.
Κάθε αντικείμενο τύπου cylinder/cube αποτελεί μια ομάδα (και όχι ένα τεμάχιο) προϊόντων. Οπότε κάθε αντικείμενο της κλάσης product θα αποτελείται από έναν μονοδιάστατο πίνακα (για τον οποίο θα δεσμεύεται δυναμικά μνήμη) που θα περιέχει αντικείμενα τύπου cylinder/cube. Κάθε ένα απο αυτά τα αντικείμενα, ουσιαστικά, υλοποιεί και μια ομάδα τεμαχίων (κάθε ομάδα αποτελείται από τεμάχια ίδιων διαστάσεων).
Άρα, οι κλάσεις cylinder και cube (αφού υλοποιούν μία ομάδα τεμαχίων) θα πρέπει να έχουν μια μεταβλητή που να αποτελεί τον αριθμό των τεμαχίων που ανήκουν στη συγκεκριμένη ομαδα, καθώς και τις διαστάσεις τους (ίδιες για όλα τα τεμάχια που ανήκουν σε αυτήν την ομάδα). Τέλος, θα πρέπει να έχουν και μια μεταβλητή με την τιμή πώλησης των τεμαχίων που ανήκουν στη συγκεκριμένη ομάδα (πάλι, ίδια για όλα τα τεμάχια που ανήκουν στην εν λόγω ομάδα).

Αυτο που λες στο τελος ειναι σιγουρο ομως; Γιατι αν οντως ολα τα τεμαχια μιας ομαδας εχουν την ιδια τιμη απλοποιειται σημαντικα η διαδικασια. Εγω παντως δε μπορεσα να το συμπερανω απ την (σαφεστατη!) εκφωνηση.

μα τότε γιατί δημιουργήσαμε την κλαση metal?
κάθε τεμάχιο της κατηγορία δεν πρέπει να έχει διαφορετική τιμή...?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: TrueForce on January 06, 2013, 20:46:30 pm
Quote
Για κάθε τεμάχιο έχει οριστεί μια τιμή πώλησης από την οποία, για να υπολογιστεί το τελικό κέρδος, αφαιρείται το κόστος του μετάλλου που θα χρησιμοποιηθεί.
Στη συναρτηση αρχικων συνθηκων, θα τη διαβαζεις μαζι με τις διαστασεις.

μπεχ, τελειωσα την εργασια. απλα απαισια....


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: elefmylo on January 06, 2013, 20:53:26 pm
Αν κατάλαβα καλά, το κέρδος =τιμή πώλησης(ίδια για κάθε τεμάχιο της ομάδας)*αριθμός των τεμαχίων της ομάδας.
και για το κόστος θα πάρω κάθε στοιχείο metal της ομάδας* κόστος μετάλλου(διαφορετικό το ένα από το άλλο με τιμή που ορίστηκε με την αρχική στην κλάση metal) και θα τα αθροίσω?


Title: Re: [C++] Άσκηση F - 2012/2013 - Προθεσμία 06/01
Post by: Xleboniaris on January 06, 2013, 21:02:24 pm
Παιδιά, είμαι ΟΚ , με την εργασία την έχω τελειώσει απλά έχω ένα πρόβλημα στο compile :
επιγραμματικά  στην main έχω κάπου:
product<cylinder> cylinders;
cylinder *cylinder_array;

cylinder_array=cylinders.*b_short(); !!!!{b.short was not declare in this scope}

ενώ στη product έχω κανονικά την

{...T *b_short();}

με:
template <class T>
product<T>::product()
{....
...

return P; ( opou P , έχει οριστεί ως *P και περιέχει αντικείμενα τύου T)
}


Επίσης, επειδή έχει περάσει καιρός ... άλλες δυο ερωτήσεις
α) η production ορίζεται κάπως έτσι??
template <class X>      
float production(X *array,Metal *metal_array,int N,int Nm)

β) όταν κάνω δέσμευση με new θα τρέξουν οι constructors για κάθε αντικείμενο , η θέλει και μια επανάληψη όπου δημιουργεις ένα temp, και το δίνεις σε κάθε στοιχείο του πίνακα?(αυτό το κάνει η malloc μ φαίνεται)

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