THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: ailouros on December 18, 2011, 16:57:31 pm



Title: [C++] Εργασία F [2011-2012]
Post by: ailouros on December 18, 2011, 16:57:31 pm
                                                                         
Άσκηση F
Για να επιλεγεί η πιο συμφέρουσα λύση για την εγκατάσταση ενός συστήματος κεντρικής θέρμανσης, για κάθε τύπο καυστήρα που κυκλοφορεί στην αγορά, οι καυστήρες που είναι διαθέσιμοι κατατάσσονται κατά φθίνουσα σειρά ως προς το λόγω P/FR, όπου P είναι η μέγιστη ισχύς που μπορεί να απόδοση ο καυστήρας και FR η ημερησία κατανάλωση καυσίμου για λειτουργία στη μέγιστή ισχύ. Από τη σειρά αυτή επιλέγεται ο καυστήρας με το μεγαλύτερο λόγω P/FR για τον οποίο όμως η μέγιστη ισχύς δεν είναι μικρότερη από την ελάχιστη ισχύ που απαιτείται για τις ανάγκες της εγκατάστασης και ταυτόχρονα το κόστος της αγοράς και της εγκατάστασής του δε ξεπερνά ένα ορισμένο ποσόν.
Για να γίνει σύγκριση ανάμεσα σε δύο διαφορετικούς τύπους καυστήρων, αφού επιλεγεί από κάθε τύπο ο καυστήρας που ικανοποιεί τις πιο πάνω απαιτήσεις, επιλέγεται ο φτηνότερος εφόσον έχει και το μικρότερο κόστος ετήσιας λειτουργίας. Σε διαφορετική περίπτωση επιλέγεται ο ακριβότερος και υπολογίζεται ο χρόνος απόσβεσης της επιπλέον δαπάνης για την αγορά και την εγκατάστασή του.
Να γραφεί το λογισμικό στο οποίο να ορίζεται η παραμετρική (template) κλάση device. Η κλάση να ορίζει την παράμετρο burner, η οποία δηλώνει τύπους αντικείμενων που ορίζουν οι κλάσεις που υλοποιούν διαφορετικούς τύπους καυστήρων. Η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να διαβάζει την τιμή της ακεραίας μεταβλητής n και να δεσμεύει δυναμικά μνήμη για έναν πίνακα με n αντικείμενα στον παραμετρικό τύπο burner. Η κλάση να διαθέτει ακόμη τη συνάρτηση b_short() η οποία να ταξινομεί τα αντικείμενα αυτά κατά φθίνουσα σειρά ως προς τον λόγω P/FR. Η συνάρτηση να επιστρέφει τη διεύθυνση του ταξινομημένου πίνακα.
Το λογισμικό να ορίζει ακόμη την παραμετρική συνάρτηση choice() η οποία να δέχεται, ως παραμέτρους, τους τύπους burner1 και burner2. Ο κάθε παραμετρικός τύπος να ορίζει έναν πίνακα από αντικείμενα που υλοποιούν καυστήρες του ίδιου τύπου ταξινομημένους κατά φθίνουσα σειρά ως προς τον λόγω P/FR. Η συνάρτηση, αφού από κάθε πίνακα, επιλέξει τον καυστήρα που ικανοποιεί τις προδιαγραφές που ορίστηκαν αρχικά, να επιστρέφει την ταυτότητα του καυστήρα που πρέπει να επιλεγεί σύμφωνα με τα κριτήρια που οριστήκαν και αφορούν την επιλογή καυστήρα ανάμεσα σε δύο καυστήρες διαφορετικού τύπου. Η συνάρτηση να υπολογίζει ακόμη και τον χρόνο απόσβεσης στην περίπτωση που επιλεγεί ο ακριβότερος καυστήρας.
Ως εφαρμογή να οριστούν οι κλάσεις oil_burner και gas_burner που υλοποιούν καυστήρες πετρελαίου και αερίου αντίστοιχα. Για τα αντικείμενα τις κάθε κλάσης, μέσα από μια συνάρτηση αρχικών συνθηκών, να διαβάζονται, για τον αντίστοιχο καυστήρα, μια ταυτότητα, η μέγιστη ισχύς, η αντίστοιχη ημερήσια κατανάλωση καυσίμου, το κόστος μιας μονάδας μέτρησης για το καύσιμό, το κόστος για την αγορά του καυστήρα και το κόστος της ετησίας συντήρησης. Για τους καυστήρες αερίου να διαβάζεται και ένα επιπλέον κόστος που αφορά τη σύνδεση του καυστήρα με το δίκτυο.
Η συνάρτηση main του λογισμικού να διαβάζει την ελάχιστη ισχύ που απαιτεί η εγκατάσταση, τα χρήματα που είναι διαθέσιμα για την αγορά και την εγκατάσταση του καυστήρα και τις ημέρες που λειτουργεί η θέρμανση κατά την διάρκεια του έτους. Στη συνέχεια να δημιουργεί δύο αντικείμενα στον τύπο της κλάσης device, το πρώτο με παράμετρο την κλάση oil_burner και το δεύτερο με παράμετρο την κλάση gas_burner. Για τους πίνακες που  θα δημιουργήσουν τα δύο αυτά αντικείμενα να κληθεί η συνάρτηση b_short() για να τους ταξινομήσει κατά φθίνουσα σειρά ως προς τον λόγω P/FR. Τέλος να κληθεί η συνάρτηση choice(), για τους δύο αυτούς πίνακες, για να υπολογιστεί και στη συνέχεια να τυπωθεί η ταυτότητα του καυστήρα που πρέπει να επιλεγεί καθώς και ο χρόνος απόσβεσης στην περίπτωση που θα επιλεγεί ο ακριβότερος καυστήρας.


Καλα χριστούγεννα  :D


Title: Re: [C++] Εργασία F [2011-2012]
Post by: alexis2044 on December 27, 2011, 18:06:00 pm
Πολύ ησυχία  :D

Υ.Γ Χρόνια πολλά!


Title: Re: [C++] Εργασία F [2011-2012]
Post by: pierikara on December 29, 2011, 14:57:56 pm
Τι εννοεί να ορίσουμε 1 παράμετρο burner;


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Ναταλία on December 29, 2011, 15:42:07 pm
εννοει απο οτι καταλαβαινω να ειναι μεσα στα <> η παραμετρος burner!


Title: Re: [C++] Εργασία F [2011-2012]
Post by: mafalda on December 30, 2011, 16:48:02 pm
Από το ppt με ονομα Mitres στο ethmmy:
"Ως μήτρες συναρτήσεων ορίζονται συναρτήσεις οι οποίες ως ορίσματα δέχονται παραμέτρους. Ο εκτελέσιμος κώδικας της συνάρτησης υλοποιείται όταν στη θέση της παραμέτρου δοθεί συγκεκριμένος τύπος δεδομένου.
Δήλωση μήτρας συνάρτησης:
template <class T>
Επιστρεφόμενη_τιμή όνομα(ορίσματα)"


Άρα μήπως εννοεί οτι το burner είναι όρισμα της κλάσης? :???:


εδιτ: ακυρο προφανώς....παραισθησεις από το πολύ φαϊ- οι κλάσεις δεν έχουν όρισμα :P
μεσα στα <> θα είναι μάλλον, όπως λέει και η ναταλια


Title: Re: [C++] Εργασία F [2011-2012]
Post by: mafalda on December 31, 2011, 12:15:58 pm
Την απόσβεση που λεει,πως θα την υπολογίσουμε;Θα ζητήσουμε π.χ. έναν συντελεστή απόσβεσης απο το χρήστη ή θα βάλουμε αυθαίρετα έναν δικό μας; Και μόνο για την διαφορά (κοστος_αγοράς_καυστήρα1-κοστος_αγοράς_καυστήρα2) ή για όλο το ποσό αγοράς του 1;


Title: Re: [C++] Εργασία F [2011-2012]
Post by: ValmadiaN on December 31, 2011, 15:25:14 pm
Την απόσβεση που λεει,πως θα την υπολογίσουμε;Θα ζητήσουμε π.χ. έναν συντελεστή απόσβεσης απο το χρήστη ή θα βάλουμε αυθαίρετα έναν δικό μας; Και μόνο για την διαφορά (κοστος_αγοράς_καυστήρα1-κοστος_αγοράς_καυστήρα2) ή για όλο το ποσό αγοράς του 1;

Έχεις τους καυστήρες Α και Β.
Ο Α κοστίζει 500 ευρώ και ο Β κοστίζει 1000 ευρώ.
Ο Α χρειάζεται ετησίος 100 ευρώ (για συντήρηση , καύσιμα κτλ..).
Ο Β χρειάζεται ετησίως 50 ευρώ.

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

Για την αγορά του Β έδωσες 1000-500=500 ευρώ παραπάνω
ενώ κάθε χρόνο κερδίζεις 100-50=50 ευρώ.
Συνεπώς ο χρόνος απόσβεσης είναι
500/50=10 χρόνια.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: princess_of_the_dawn on January 03, 2012, 16:48:15 pm
τον λογο p/fr η b_short πώς θα τον βλέπει;
θα κάνουμε μία συνάρτηση που θα τον υπολογίζει και θα είναι friend σε oil_burner,gas_burner και device;


Title: Re: [C++] Εργασία F [2011-2012]
Post by: geomade on January 03, 2012, 17:53:03 pm
Εγώ έβαλα να τον βλέπει τον λόγο p/fr μέσω συναρτήσεων get_p, get_fr.
Όμως στη συνέχεια όταν καλώ την b_short (2 φορές) από την main μου εμφανίζει σφάλμα στους pointers των 2 πινάκων....και μάλλον φταίει ο τρόπος που διαβάζει τα p και fr. :-\

Δε νομίζω ότι μπορεί να είναι φιλική συνάρτηση η b_short επειδή είναι παραμετρική...ίσως κάνω και λάθος όμως.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Infinite Loop on January 03, 2012, 19:54:17 pm
Εγώ έβαλα να τον βλέπει τον λόγο p/fr μέσω συναρτήσεων get_p, get_fr.
Όμως στη συνέχεια όταν καλώ την b_short (2 φορές) από την main μου εμφανίζει σφάλμα στους pointers των 2 πινάκων....και μάλλον φταίει ο τρόπος που διαβάζει τα p και fr. :-\

Δε νομίζω ότι μπορεί να είναι φιλική συνάρτηση η b_short επειδή είναι παραμετρική...ίσως κάνω και λάθος όμως.

Δεν χρειαζεσαι accessors - ειναι ενας απο τους λογους που υπαρχουν οι friends. Οι template functions (προς Θεου - οχι "παραμετρικες"!  :P) γινεται να ειναι και friends, αλλα θελει προσοχη στο declaration τους μεσα στην κλαση σου.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Κάρβουνο on January 05, 2012, 17:07:13 pm
Δεν υποτίθεται ότι είναι προτιμότερο να χρησιμοποιούμε accessors, άμα μπορούμε;


Title: Re: [C++] Εργασία F [2011-2012]
Post by: raf on January 05, 2012, 19:21:03 pm
"Το λογισμικό να ορίζει ακόμη την παραμετρική συνάρτηση choice() η οποία να δέχεται, ως παραμέτρους, τους τύπους burner1 και burner2. Ο κάθε παραμετρικός τύπος να ορίζει έναν πίνακα από αντικείμενα που υλοποιούν καυστήρες του ίδιου τύπου ταξινομημένους κατά φθίνουσα σειρά ως προς τον λόγω P/FR. "
Βασικά εδώ δημιουργείς μια κλάση, που εχει μια συνάρτηση  template και αυτή η κλάση κληρονομεί τα χαρακτηριστικά της κλάσης device ,σωστά?
Γιατί αλλιώς τι..? θα κάθεσαι να δευσμευεις δυναμικά ξανά πίνακα και μετά θα κάνεις ξανά ταξινόμηση???
εεεε??? :-\


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Endeavour X on January 06, 2012, 17:29:04 pm
Βασικά εδώ δημιουργείς μια κλάση, που εχει μια συνάρτηση  template και αυτή η κλάση κληρονομεί τα χαρακτηριστικά της κλάσης device ,σωστά?
Και τί κλάση θα 'ναι αυτή; Βασικά γιατί να κληρονομηθούν τα χαρακτηριστικά της device;


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Salvation on January 07, 2012, 22:27:36 pm
Η συνάρτηση choice που λεει, δεν θα πρεπει να παιρνει σαν ορισματα τις διευθυνσεις των πινακων και τον αριθμο στοιχείων του καθενος; Γιατι έτσι οπως την γραφει ειναι σαν να μην παιρνει ορισματα.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Salvation on January 08, 2012, 00:10:11 am
Τότε πως θα έχει πρόσβαση στους πίνακες; Αφού η b_short καλείται στη main.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: Endeavour X on January 08, 2012, 00:14:20 am
Τότε πως θα έχει πρόσβαση στους πίνακες; Αφού η b_short καλείται στη main.
σορρυ για την b_short καταλβα αρχικα. Η choice εχει ορίσματα απο κάθε είδος καυστήρα αλλά οχι τις διευθήνσεις των πινάκων. Τουλάχιστο εγώ δε το έκανα έτσι.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: giapapva on January 08, 2012, 19:51:26 pm
Ξέρει κανεις αν την choice θα την ορίσουμε εξωτερικά ή μεσα σε κάποια κλάση?? Για ορίσματα θα της δωσουμε αντικειμενα τυπου device?????? >:( >:(


Title: Re: [C++] Εργασία F [2011-2012]
Post by: JakeLaMotta on January 08, 2012, 20:49:23 pm
Ξέρει κανεις αν την choice θα την ορίσουμε εξωτερικά ή μεσα σε κάποια κλάση?? Για ορίσματα θα της δωσουμε αντικειμενα τυπου device?????? >:( >:(

Η choice δεν χρειάζεται να είναι μέλος κάποιας κλάσης,είναι απλά μια παραμετρική συνάρτηση που καλεί η main.Για ορίσματα,της δίνεις τους δύο πίνακες που σου επιστρέφει η b_short.Φαντάζομαι και τις μεταβλητές για την ελάχιστη ισχύ,τα διαθέσιμα χρήματα και τις μέρες λειτουργίας,που διαβάζει η main,για να κάνεις τους υπολογισμούς που πρέπει.


Title: Re: [C++] Εργασία F [2011-2012]
Post by: giapapva on January 08, 2012, 21:10:26 pm
Ξέρει κανεις αν την choice θα την ορίσουμε εξωτερικά ή μεσα σε κάποια κλάση?? Για ορίσματα θα της δωσουμε αντικειμενα τυπου device?????? >:( >:(

Η choice δεν χρειάζεται να είναι μέλος κάποιας κλάσης,είναι απλά μια παραμετρική συνάρτηση που καλεί η main.Για ορίσματα,της δίνεις τους δύο πίνακες που σου επιστρέφει η b_short.Φαντάζομαι και τις μεταβλητές για την ελάχιστη ισχύ,τα διαθέσιμα χρήματα και τις μέρες λειτουργίας,που διαβάζει η main,για να κάνεις τους υπολογισμούς που πρέπει.

Ετσι το έχω κάνει το ζήτημα είναι πως χτυπαει ο κομπαιλερ. Μου βγαζει διάφορα μηνύματα για τις τιμες των συναρτήσεων. Δεν ξέρω κατα πόσο πχ σε ένα παραμετρικό αντικείμενο γίνεται να καλέσουμε συνάρτηση εσωτερική μιας μή παραμετρικής κλασης...εγώ έκανα πχ burner a; (a.geto(i)).get_fr()   --> η a.geto(i) επιστρέφει αντικείμενο τυπου burner και η συναρτηση get_fr() ειναι εσωτερική στην κλάση gas_burner και oil_burner. Οι ασκήσεις που μας έκανε δεν ζητούσαν κάτι τέτοιο οπότε δεν ξερω αν αυτό που γράφω στον κώδικα είναι σωστο (παρόλο που το συγκεκριμένο δεν χτυπαει στον κομπάιλερ) πφφφφφφφφφφφ!!!   :o


Title: Re: [C++] Εργασία F [2011-2012]
Post by: JakeLaMotta on January 08, 2012, 21:15:35 pm

Ετσι το έχω κάνει το ζήτημα είναι πως χτυπαει ο κομπαιλερ. Μου βγαζει διάφορα μηνύματα για τις τιμες των συναρτήσεων. Δεν ξέρω κατα πόσο πχ σε ένα παραμετρικό αντικείμενο γίνεται να καλέσουμε συνάρτηση εσωτερική μιας μή παραμετρικής κλασης...εγώ έκανα πχ burner a; (a.geto(i)).get_fr()   --> η a.geto(i) επιστρέφει αντικείμενο τυπου burner και η συναρτηση get_fr() ειναι εσωτερική στην κλάση gas_burner και oil_burner. Οι ασκήσεις που μας έκανε δεν ζητούσαν κάτι τέτοιο οπότε δεν ξερω αν αυτό που γράφω στον κώδικα είναι σωστο (παρόλο που το συγκεκριμένο δεν χτυπαει στον κομπάιλερ) πφφφφφφφφφφφ!!!   :o

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