THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: Exomag on January 06, 2013, 17:15:14 pm



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

Άσκηση F

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

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

Στο λογισμικό να οριστεί η κλάση taxation η οποία να υλοποιεί έναν φορολογούμενο. Στην κλάση να ορίζονται οι πίνακες:
1) balance : Tα στοιχεία του οποίου θα περιέχουν τα υπόλοιπα του λογαριάσου του φορολογούμενου για κάθε ένα από τα Ν χρόνια του ελέγχου. 
2) taking : Tα στοιχεία του οποίου θα περιέχουν τα ποσά των αναλήψεων που πραγματοποίησε ο φορολογούμενος για κάθε ένα από τα Ν χρόνια του ελέγχου.
3) taxis : Tα στοιχεία του οποίου θα περιέχουν τα ποσά που δήλωσε ο φορολογούμενος για κάθε ένα από τα Ν χρόνια του ελέγχου.
4) debt  : Tα στοιχεία του οποίου θα περιέχουν της διαφορές ανάμεσα στις καταθέσεις που έκανε ο φορολογούμενος και στο ποσό που δήλωσε στην εφορία για κάθε ένα από τα Ν χρόνια του ελέγχου.

Στην κλάση να ορίζονται ακόμη:
α) Ένας extractor, με επικάλυψη του τελεστή >, ο οποίος, αφού διαβάσει τον ΑΦΜ του φορολογούμενου, να διαβάζει τα στοιχεία των πινάκων balance,  taking και taxis.
β) Μια επικάλυψη του τελεστή new τέτοια ώστε να δεσμεύεται δυναμικά μνήμη για έναν πίνακα με αντικείμενα στον τύπο της κλάσης και για κάθε αντικείμενο του πίνακα, να δεσμεύει δυναμικά μνήμη για τους πίνακες balance, taking, taxis και debt. Η επικάλυψη να χρησιμοποιεί τον extractor για να διαβάσει τις τιμές των πινάκων balancetaking και taxis.
γ) Μια επικάλυψη του τελεστή delete στην οποία, όταν δοθεί η διεύθυνση του πίνακα των αντικειμένων που δεσμεύτηκε από την επικάλυψη του τελεστή new, να αποδεσμεύει όλη τη μνήμη που δεσμεύτηκε δυναμικά.
δ) Ένας insertor, με επικάλυψη του τελεστή <, ο οποίος να εκτυπώνει έναν πίνακα της μορφής
                                             Έτος          Αδήλωτο εισόδημα
                                            #####                #######.##
                                            #####                #######.##
                                            .
                                            .
                                            #####                #######.##

Στον πίνακα κάτω από την ετικέτα Έτος να εμφανίζεται η χρόνια για την οποία έγινε ο έλεγχος  και κάτω από την ετικέτα Αδήλωτο εισόδημα να εμφανίζεται το αντίστοιχο αδήλωτο εισόδημα. Η εκτύπωση του έτους να γίνεται σε 5 θέσεις και του αδήλωτου εισοδήματος σε 10 θέσεις από τις οποίες 2 για τα δεκαδικά ψηφία. Ο insertor  να εκτυπώνει ακόμη και το συνολικό αδήλωτο εισόδημα του φορολογούμενου και για τα Ν χρόνια που έγινε ο έλεγχος.

Στο λογισμικό να ορίζεται ακόμη η συνάρτηση chek() η οποία να δέχεται ως όρισμα ένα αντικείμενο τύπου taxation και να υπολογίζει τις τιμές των στοιχείων του πίνακα debt.

Η συνάρτηση main() του προγράμματος να διαβάζει τον αριθμό φορολογουμένων που θα ελεγχθούν, τον αριθμό Ν των ετών για τα οποία θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει ο έλεγχος. Στη συνέχεια να χρησιμοποιείται η επικάλυψη του τελεστή new για να δεσμευτεί η αναγκαία μνήμη για την καταχώριση των στοιχείων των φορολογουμένων που θα ελέγχουν και να χρησιμοποιεί τη συνάρτηση chek() για να ενημερώσει τον πίνακα debt για κάθε ένα από αντικείμενα του πίνακα.

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

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


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: gmtms on January 08, 2013, 03:25:51 am
Quote
Προσπαθήστε, ο αριθμός των φορολογουμένων που θα ελεγχθούν, ο αριθμός των ετών που θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει, να μην είναι μέλη της κλάσης taxation ούτε γενικές μεταβλητές.

Κατ'αρχάς όταν λέει "όχι γενικές μεταβλητές" απορρίπτει τη χρήση μίας και μοναδικής static int years;
Και τι σκατά να είναι; παράμετροι της new[] ;
Και άντε, να είναι παράμετροι της new[], που σκατά θα αποθηκευτεί η τιμή αυτή ώστε να μπορούμε να καλέσουμε πχ. την chek σωστά;

υγ: η χειρότερη μέρα της εβδομάδας είναι αυτή που αποφασίζω να ασχοληθώ με την εργασία c++. Κάθε φορά ανεβάζω πυρετό και πέφτει η ψυχολογία μου. Έχω δει όνειρα στα οποία κάνω χοντρή ζημιά στον Κορτέση. Αν υπάρχει κάρμα, το δικό του είναι μακράν υπό του μηδενός


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 16, 2013, 13:56:29 pm
Την ξεκίνησε κανεις΄? :o


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 16, 2013, 18:42:33 pm
Εδω: Μια επικάλυψη του τελεστή new τέτοια ώστε να δεσμεύεται δυναμικά μνήμη για έναν πίνακα με αντικείμενα στον τύπο της κλάσης και για κάθε αντικείμενο του πίνακα, να δεσμεύει δυναμικά μνήμη για τους πίνακες balance, taking, taxis και. debt. Η επικάλυψη να χρησιμοποιεί τον extractor για να διαβάσει τις τιμές των πινάκων balance,  taking και taxis.

τι εννοει η επικάλυψη να χρησιμοποιει τον extractor για να διαβασει τισ τιμες των πινάκων? σε τι χρησιμεύει δλδ? 8))


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: thanospr on January 17, 2013, 20:52:08 pm
Η επικαλυψη του τελεστη delete πως γινεται;Το πρωτο ορισμα απ οτι εχω καταλαβει πρεπει να ειναι void.Πρεπει να περασουμε κι ενα ακομα ορισμα που θα ειναι η διευθυνση του πινακα απο τα αντικειμενα τυπου taxation;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 17, 2013, 21:03:53 pm
Η επικαλυψη του τελεστη delete πως γινεται;Το πρωτο ορισμα απ οτι εχω καταλαβει πρεπει να ειναι void.Πρεπει να περασουμε κι ενα ακομα ορισμα που θα ειναι η διευθυνση του πινακα απο τα αντικειμενα τυπου taxation;

Το definition μέσα στην κλάση taxation νομίζω πως θα είναι:
Code:
void operator delete(void *pointer);


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: thanospr on January 18, 2013, 09:53:28 am
Και πως θα κανω free τους πινακες τις taxation; :-\


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Αλντεμπαράν on January 18, 2013, 11:04:42 am
αν έκανες μια ακόμη υπερφόρτωση για έναν ακόμη delete ειδικά για τους πίνακες που περιέχει ο κάθε λογαριασμός??


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: thanospr on January 18, 2013, 12:44:23 pm
Μεσα στην delete θα εχω ενα for loop για ολους τους φορολογούμενους και θα καλω την free για καθε πινακα;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 18, 2013, 15:09:05 pm
Και πως θα κανω free τους πινακες τις taxation; :-\
αν έκανες μια ακόμη υπερφόρτωση για έναν ακόμη delete ειδικά για τους πίνακες που περιέχει ο κάθε λογαριασμός??
Μεσα στην delete θα εχω ενα for loop για ολους τους φορολογούμενους και θα καλω την free για καθε πινακα;

Όπως λέει και ο thanospr, θα κάνεις ένα loop μέσα στο οποίο θα καλείται η free για κάθε έναν (από τους τέσσερεις, άρα τέσσερα free σε κάθε loop) από τους πίνακες του στοιχείου εκείνου του loop.

Μια υπόδειξη είναι:
Code:
void taxation::operator delete(void *pointer)
{
    for (int i=0;i<data::get_N();i++) {
        //Εδώ τα 4 free
    }
    free(pointer);
}


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: nontas93 on January 18, 2013, 17:22:15 pm
Προσπαθήστε, ο αριθμός των φορολογουμένων που θα ελεγχθούν, ο αριθμός των ετών που θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει, να μην είναι μέλη της κλάσης taxation ούτε γενικές μεταβλητές.
Οποιος καταλαβε πως θα χειριζομαστε τα χρονια χωρις να ειναι μελος της κλασης ουτε γενικη μεταβλητη ας μας πει!!!


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 18, 2013, 17:34:10 pm
Προσπαθήστε, ο αριθμός των φορολογουμένων που θα ελεγχθούν, ο αριθμός των ετών που θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει, να μην είναι μέλη της κλάσης taxation ούτε γενικές μεταβλητές.
Οποιος καταλαβε πως θα χειριζομαστε τα χρονια χωρις να ειναι μελος της κλασης ουτε γενικη μεταβλητη ας μας πει!!!

Θα κάνεις μια άλλη κλάση (στον τύπο της οποίας δεν χρειάζεται να ορίσεις κάποια αντικείμενα) που θα έχει static μεταβλητές και συναρτήσεις-μέλη και θα χειρίζεται τα δεδομένα σου.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 18, 2013, 17:42:47 pm
Ρε παιδιά , έχω σκάσει...
Τι εννοεί όταν λέει να κάνουμε extractor ο οποίος, αφού διαβάσει τον ΑΦΜ του φορολογούμενου, να διαβάζει τα στοιχεία των πινάκων balance,  taking και taxis.??
Καταλαβαίνω οτι θα έχουμε πίνακα αντικειμένων taxation, εστω t όπου το κάθε αντικείμενο θα έχει επίσης έναν πίνακα balance,  taking  taxis και debt . Αλλά αφού διαβάσει το ΑΦΜ τι γινεται?
Θα ψαχνει ολον τον πινακα t να βρει τ συγκεκριμενο αντικειμενο κ απο κει απο καποιο καναλι θα διαβαζει τις τιμες???  ^banghead^


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 18, 2013, 18:08:55 pm
Ρε παιδιά , έχω σκάσει...
Τι εννοεί όταν λέει να κάνουμε extractor ο οποίος, αφού διαβάσει τον ΑΦΜ του φορολογούμενου, να διαβάζει τα στοιχεία των πινάκων balance,  taking και taxis.??
Καταλαβαίνω οτι θα έχουμε πίνακα αντικειμένων taxation, εστω t όπου το κάθε αντικείμενο θα έχει επίσης έναν πίνακα balance,  taking  taxis και debt . Αλλά αφού διαβάσει το ΑΦΜ τι γινεται?
Θα ψαχνει ολον τον πινακα t να βρει τ συγκεκριμενο αντικειμενο κ απο κει απο καποιο καναλι θα διαβαζει τις τιμες???  ^banghead^

Ο extractor θα δέχεται ένα από τα αντικείμενα του πίνακα t, όχι ολόκληρο τον πίνακα. Έπειτα θα διαβάζει όλα τα στοιχεία των πινάκων balance, taking, taxis και debt από το συγκεκριμένο αντικείμενο.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: nontas93 on January 18, 2013, 18:41:51 pm
Προσπαθήστε, ο αριθμός των φορολογουμένων που θα ελεγχθούν, ο αριθμός των ετών που θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει, να μην είναι μέλη της κλάσης taxation ούτε γενικές μεταβλητές.
Οποιος καταλαβε πως θα χειριζομαστε τα χρονια χωρις να ειναι μελος της κλασης ουτε γενικη μεταβλητη ας μας πει!!!

Θα κάνεις μια άλλη κλάση (στον τύπο της οποίας δεν χρειάζεται να ορίσεις κάποια αντικείμενα) που θα έχει static μεταβλητές και συναρτήσεις-μέλη και θα χειρίζεται τα δεδομένα σου.
καλη ιδεα..
προφανως θα ειναι παραγομενη απο την taxation ετσι ?? πως θα γινει αυτο χωρις να ορισω αντικειμενα στον τυπο της??


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 18, 2013, 18:53:44 pm
Προσπαθήστε, ο αριθμός των φορολογουμένων που θα ελεγχθούν, ο αριθμός των ετών που θα γίνει ο έλεγχος και το έτος από το οποίο θα αρχίσει, να μην είναι μέλη της κλάσης taxation ούτε γενικές μεταβλητές.
Οποιος καταλαβε πως θα χειριζομαστε τα χρονια χωρις να ειναι μελος της κλασης ουτε γενικη μεταβλητη ας μας πει!!!

Θα κάνεις μια άλλη κλάση (στον τύπο της οποίας δεν χρειάζεται να ορίσεις κάποια αντικείμενα) που θα έχει static μεταβλητές και συναρτήσεις-μέλη και θα χειρίζεται τα δεδομένα σου.
καλη ιδεα..
προφανως θα ειναι παραγομενη απο την taxation ετσι ?? πως θα γινει αυτο χωρις να ορισω αντικειμενα στον τυπο της??

Δεν θα είναι παραγόμενη της taxation! Για παράδειγμα, μια πρόχειρη υλοποιήση αυτού που λέω (που το είπε, βασικά, ο Κορτέσης στην τάξη):

Code:
class data
{
private:
    static int N;
public:
    data() { }
    static int get_N() {return N;}
    static void set_N(int _N) {N=_N;}
};

int data::N;

Έπειτα, σε οποιοδήποτε κομμάτι του προγράμματος σου, μπορείς να κάνεις access το N με την εντολή data::get_N() και να του ορίσεις μια τιμή x με την εντολή data::set_N(x).


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 18, 2013, 19:30:51 pm
Ρε παιδιά , έχω σκάσει...
Τι εννοεί όταν λέει να κάνουμε extractor ο οποίος, αφού διαβάσει τον ΑΦΜ του φορολογούμενου, να διαβάζει τα στοιχεία των πινάκων balance,  taking και taxis.??
Καταλαβαίνω οτι θα έχουμε πίνακα αντικειμένων taxation, εστω t όπου το κάθε αντικείμενο θα έχει επίσης έναν πίνακα balance,  taking  taxis και debt . Αλλά αφού διαβάσει το ΑΦΜ τι γινεται?
Θα ψαχνει ολον τον πινακα t να βρει τ συγκεκριμενο αντικειμενο κ απο κει απο καποιο καναλι θα διαβαζει τις τιμες???  ^banghead^

Ο extractor θα δέχεται ένα από τα αντικείμενα του πίνακα t, όχι ολόκληρο τον πίνακα. Έπειτα θα διαβάζει όλα τα στοιχεία των πινάκων balance, taking, taxis και debt από το συγκεκριμένο αντικείμενο.

Ευχαριστώ ! Απλα (sorry με εχει μπερδεψει η συγκεκριμενη εργασια) μπορεις να μου εξηγήσεις πως θα το κάνω αυτό σαν υλοποιήση?
Θα δέχεται ο extractor όρισμα (τύπου taxation tax ) διπλα απο το (istream &c,taxation &p) ??
και μετα θα ειναι cout<<"dwse to upoloipo tou logoariasmou tou\n";
c>>tax.balance ???


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 18, 2013, 19:46:37 pm
Ο extractor θα δέχεται ένα από τα αντικείμενα του πίνακα t, όχι ολόκληρο τον πίνακα. Έπειτα θα διαβάζει όλα τα στοιχεία των πινάκων balance, taking, taxis και debt από το συγκεκριμένο αντικείμενο.
Ευχαριστώ ! Απλα (sorry με εχει μπερδεψει η συγκεκριμενη εργασια) μπορεις να μου εξηγήσεις πως θα το κάνω αυτό σαν υλοποιήση?
Θα δέχεται ο extractor όρισμα (τύπου taxation tax ) διπλα απο το (istream &c,taxation &p) ??
και μετα θα ειναι cout<<"dwse to upoloipo tou logoariasmou tou\n";
c>>tax.balance ???

Το definition θα είναι (μέσα στην κλάση taxation):
Code:
friend istream& operator>(istream &stream,taxation &object);

Θα την καλείς ως εξής:
Code:
cin>object_of_type_taxation;

Και μέρος της υλοποίησης της, για παράδειγμα, θα είναι:
Code:
istream& operator>(istream &stream,taxation &object)
{
    for (int i=0;i<data::get_N();i++) {
            cout<<"Υπόλοιπο Λογαριασμού = ";
            stream>>object.balance[i];
    return stream;
}


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 18, 2013, 19:50:45 pm
Υπερ-ευχαριστώ !!!


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: thanospr on January 18, 2013, 20:56:15 pm
Ουσιαστικα εδω τσαμπα τους βαζουμε τους extractors ετσι δεν ειναι;Και με μια συναρτηση δεν θα μπορουσαμε να το κανουμε αυτό; Ειναι χρησιμο για να μπορουμε με ενα cout να γραφουμε δεδομενα και στην κονσολα αλλα και σε ενα αρχειο π.χ..Κανω λαθος;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 14:26:14 pm
τα  free στην delete μέσα πως θα γίνουν΄?  γτ δν περνει free(balance) free(taxis) και τα λοιπά. :-[

 for (int i=0;i<data::get_N();i++) {
        //Εδώ τα 4 free
    }


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 14:41:59 pm
στν new θα έχει ως όρισμα size_t size?

και απο κάτω θα έιναι κάπως έτσι?
if((p=(taxation*)malloc(size))==NULL)
      {
         cout<<"Allocation failure for forologoumenous!\n";
         exit(1);
      }
      
      if((bal=(float*)malloc(sizeof(float)*(stoixeia::get_years()))==NULL))
           {
              cout<<"Allocation error for balance\n";
              exit(2);
           }

αλλα για τον float *bal δεν το δέχεται το bal gia ton balance ετσι. πρέπει αν γίνει static;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 14:55:37 pm
τα  free στην delete μέσα πως θα γίνουν΄?  γτ δν περνει free(balance) free(taxis) και τα λοιπά. :-[

 for (int i=0;i<data::get_N();i++) {
        //Εδώ τα 4 free
    }

Εφόσον έχεις έναν pointer σε αντικείμενα τύπου taxation (έστω p), θα κάνεις μέσα σε ένα loop:
Code:
 for (int i=0;i<data::get_N();i++) {
        free(p[i].balance);
        //τα υπόλοιπα 3 free
    }


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 14:57:36 pm
στν new θα έχει ως όρισμα size_t size?

και απο κάτω θα έιναι κάπως έτσι?
if((p=(taxation*)malloc(size))==NULL)
      {
         cout<<"Allocation failure for forologoumenous!\n";
         exit(1);
      }
      
      if((bal=(float*)malloc(sizeof(float)*(stoixeia::get_years()))==NULL))
           {
              cout<<"Allocation error for balance\n";
              exit(2);
           }

αλλα για τον float *bal δεν το δέχεται το bal gia ton balance ετσι. πρέπει αν γίνει static;

Μέσα σε ένα loop θα αναφέρεσαι στους πίνακες του εκάστωτε στοιχείου μέσω του αντικειμένου που ανήκουν. Δηλαδή, για παράδειγμα,
Code:
		if((p[i].bal=(float*)malloc(sizeof(float)*(stoixeia::get_years()))==NULL))
  {
  cout<<"Allocation error for balance\n";
  exit(2);
  }


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 15:04:39 pm
αφτο το loop θα τρέχει για τον αριθμο φορολογούμενων?

και μέσα στν delete δεν μ πέρνει p.balance..

πρέπει με΄σα στν κλάση να τα δηλώσω ως static float *balance?


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 15:07:25 pm
αφτο το loop θα τρέχει για τον αριθμο φορολογούμενων?
Ναι

και μέσα στν delete δεν μ πέρνει p[ i ].balance..

πρέπει με΄σα στν κλάση να τα δηλώσω ως static float *balance?
Πες πρώτα τι error σου βγάζει ο compiler.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 15:15:14 pm
μεσα στην delete αμα ορίσω taxation *p

και πω free(p.balance) oπου float *balance στν κλαση taxation

βγάζει expression must be a pointer to a complete object
κατω απο το p βγάζει κόκκινο.

οσο για τν new που πέρνει όρισμα size_t size

μέσα της:

taxation *p;
      
      if((p=(taxation*)malloc(size))==NULL)
      {
         cout<<"Allocation failure for forologoumenous!\n";
         exit(1);
      }
      
             bal=new float(stoixeia::get_years());
            
              if(bal==0)
              {
              cout<<"Allocation error for balance\n";
              exit(2);
              }
βγάζει error κατω απο το bal(balance dld) και λέει a nonstatic member reference must be relative to a specific object

πρέπει αν ορισω τους pointers ως static στην taxation?


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 15:26:23 pm
μεσα στην delete αμα ορίσω taxation *p

και πω free(p.balance) oπου float *balance στν κλαση taxation

βγάζει expression must be a pointer to a complete object
κατω απο το p βγάζει κόκκινο.

οσο για τν new που πέρνει όρισμα size_t size

μέσα της:

taxation *p;
      
      if((p=(taxation*)malloc(size))==NULL)
      {
         cout<<"Allocation failure for forologoumenous!\n";
         exit(1);
      }
      
             bal=new float(stoixeia::get_years());
            
              if(bal==0)
              {
              cout<<"Allocation error for balance\n";
              exit(2);
              }
βγάζει error κατω απο το bal(balance dld) και λέει a nonstatic member reference must be relative to a specific object

πρέπει αν ορισω τους pointers ως static στην taxation?

Στην delete δεν θα ορίσεις κάποιον δικό σου pointer, θα χρησιμοποιήσεις αυτόν που θα λάβεις από τα ορίσματα της delete.

Στην new δεν θα γράψεις ποτέ σκέτο bal. Πάντα θα αναφέρεσαι στους πίνακες μέσω ενός αντικειμένου:
Code:
p[i].bal=new float(stoixeia::get_years());


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 15:51:24 pm
βγάζει στηn delete αυτο που είπα πιο πριν

expression must be a pointer to a complete object οταν βάζω free(p.balance);

καυ αυτο που λες για την new to καταλαβα


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 16:23:13 pm
o constructor της taxation πρέπει να κάνει κτ η μπά? 8))


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 16:39:44 pm
o constructor της taxation πρέπει να κάνει κτ η μπά? 8))

Δεν λέει τίποτα η εκφώνση, εγώ τον άφησα κενό.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: pentium4 on January 19, 2013, 19:14:12 pm
[ασχετιλα]

ποιο κομματι θεωριας διαβαζω για την εργασια;
[/ασχετιλα]


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: papatasoylis on January 19, 2013, 19:26:05 pm
επικαλύψεις και στατικές συναρτήσεις πιο πολύ. 8))


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: pentium4 on January 19, 2013, 19:54:57 pm
επικαλύψεις και στατικές συναρτήσεις πιο πολύ. 8))

θενξ φιλος!


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: triapavl on January 19, 2013, 20:07:39 pm


Εφόσον έχεις έναν pointer σε αντικείμενα τύπου taxation (έστω p), θα κάνεις μέσα σε ένα loop:
Code:
 for (int i=0;i<data::get_N();i++) {
        free(p[i].balance);
        //τα υπόλοιπα 3 free
    }

Αυτό ακριβώς έχω κάνει στη delete και μου βγάζει errors pointer of type 'void*' used in arithmetic και 'void*' is not a pointer-to-object file...τι φάση;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 19, 2013, 20:38:50 pm


Εφόσον έχεις έναν pointer σε αντικείμενα τύπου taxation (έστω p), θα κάνεις μέσα σε ένα loop:
Code:
 for (int i=0;i<data::get_N();i++) {
        free(p[i].balance);
        //τα υπόλοιπα 3 free
    }

Αυτό ακριβώς έχω κάνει στη delete και μου βγάζει errors pointer of type 'void*' used in arithmetic και 'void*' is not a pointer-to-object file...τι φάση;

Κάνε:
Code:
 for (int i=0;i<data::get_N();i++) {
        free(((taxation*)pointer)[i].balance);
        //τα υπόλοιπα 3 free
    }


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Infinite Loop on January 19, 2013, 20:42:49 pm
Επειδη εδω και καιρο εχω αποφασισει οτι εχω καλυτερα και πιο παραγωγικα πραγματα να κανω στην ζωη μου απο το να προσπαθω να αποκρυπτογραφησω τις εργασιες του stk (οπως για παραδειγμα να τραβηξω 5 ωρες μαλακια), οταν ο τρισμεγιστος λεει:
Quote
Μια επικάλυψη του τελεστή new τέτοια ώστε να δεσμεύεται δυναμικά μνήμη για έναν πίνακα με αντικείμενα
προφανως εννοει τον τελεστη new[], και οχι τον new, σωστα; Αλλιως τι σκατα;


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: triapavl on January 19, 2013, 20:44:30 pm
Thanks...τουλάχιστον δε μου βγάζει errors τώρα...


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Αλντεμπαράν on January 20, 2013, 16:04:38 pm
ενώ κάνει compile κολλάει το προγραμμα μεσα στον operator>>[istream &operator>>(istream &stream,taxation &obj)] όταν φτάνει στην γραμμή:stream>>obj.afm; .Καμία ιδέα για το τι φταίει??? :-\:-\


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 20, 2013, 17:43:54 pm
Μπορεί κάποιος να εξηγήσει , πως γίνεται ο insertor ?
Να εκτυπώνεται ο πίνακας που θέλει?
Ειδικά το κομμάτι που λέει Η εκτύπωση του έτους να γίνεται σε 5 θέσεις και του αδήλωτου εισοδήματος σε 10 θέσεις από τις οποίες 2 για τα δεκαδικά ψηφία.....


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: anchelon on January 20, 2013, 18:45:06 pm
Μπορεί κάποιος να εξηγήσει , πως γίνεται ο insertor ?
Να εκτυπώνεται ο πίνακας που θέλει?
Ειδικά το κομμάτι που λέει Η εκτύπωση του έτους να γίνεται σε 5 θέσεις και του αδήλωτου εισοδήματος σε 10 θέσεις από τις οποίες 2 για τα δεκαδικά ψηφία.....
+1 κατι σε manipulators μου κάνει.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 20, 2013, 21:05:29 pm
Exomag , αν μπορεις μου εξηγεις τι ακριβως κανει αυτή η εντολή?

int data::N;

που την εβαλες κατω ακριβως απο την δηλωση της κλασης data?


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Luffy on January 20, 2013, 21:57:00 pm
Την αρχικοποιει με τη τιμη μηδεν νομιζω.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: anchelon on January 20, 2013, 22:01:59 pm
κανείς καμια βοήθεια με τν εκτύπωση του insertor?? :-\


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 20, 2013, 22:53:14 pm
Exomag , αν μπορεις μου εξηγεις τι ακριβως κανει αυτή η εντολή?

int data::N;

που την εβαλες κατω ακριβως απο την δηλωση της κλασης data?

Είναι, στην ουσία, μια δήλωση της static μεταβλητής data::N. Πρέπει να την κάνεις για κάθε static μεταβλητή που έχεις και, σε περίπτωση που δεν δώσεις εσύ κάποια αρχική τιμή, αρχικοποιείται η τιμή 0.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Alice_8 on January 20, 2013, 23:12:16 pm
Thanks !!!! :)


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: manos on January 20, 2013, 23:39:23 pm
Στον insertor γράφω αυτήν την επανάληψη

Code:
for(int i=0;i<xronia;i++){
   s.width(5);
   s<<arxiko_etos+i<<"               ";
   s.width(10);
   s.precision(3);
  
   s<<obj.debt[i]<<"\n";
   debt_ol=debt_ol+obj.debt[i];
   }  
και μου εμφανίζει το αδήλωτο εισόδημα σε επιστημονική μορφή (π.χ. 1e +003 ).
Δοκίμασα και την  εντολή    s.unsetf(ios::scientific);    αλλά δεν διορθώνεται.Ξέρει κανείς ποιο είναι το πρόβλημα?            


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: zos on January 20, 2013, 23:42:51 pm
Exomag , αν μπορεις μου εξηγεις τι ακριβως κανει αυτή η εντολή?

int data::N;

που την εβαλες κατω ακριβως απο την δηλωση της κλασης data?

Είναι, στην ουσία, μια δήλωση της static μεταβλητής data::N. Πρέπει να την κάνεις για κάθε static μεταβλητή που έχεις και, σε περίπτωση που δεν δώσεις εσύ κάποια αρχική τιμή, αρχικοποιείται η τιμή 0.

Αν και δεν πρέπει να κάνω τον έξυπνο(:D) δεν είναι ακριβώς δήλωση αλλά ένα reference για να την 'βλέπει' το υπόλοιπο πρόγραμμα έξω από την κλάση. Όσον αφορά την αρχικοποίηση νομίζω οι static αυτόματα είναι 0.


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Exomag on January 20, 2013, 23:50:16 pm
Exomag , αν μπορεις μου εξηγεις τι ακριβως κανει αυτή η εντολή?

int data::N;

που την εβαλες κατω ακριβως απο την δηλωση της κλασης data?

Είναι, στην ουσία, μια δήλωση της static μεταβλητής data::N. Πρέπει να την κάνεις για κάθε static μεταβλητή που έχεις και, σε περίπτωση που δεν δώσεις εσύ κάποια αρχική τιμή, αρχικοποιείται η τιμή 0.

Αν και δεν πρέπει να κάνω τον έξυπνο(:D) δεν είναι ακριβώς δήλωση αλλά ένα reference για να την 'βλέπει' το υπόλοιπο πρόγραμμα έξω από την κλάση. Όσον αφορά την αρχικοποίηση νομίζω οι static αυτόματα είναι 0.

Δεν ξέρω τις λεπτομέριες, λογικά έχεις δίκιο ;) (ώρα να το παίξω υπεράνω :P)
Πάντως πρέπει να γράφεις την εντολή έξω από την κλάση, αν θέλεις να χρησιμοποιήσεις την static μεταβλητή στο υπόλοιπο πρόγραμμα, και αυτή θα πάρει αρχικά την τιμή 0 (εκτός και αν δώσεις άλλη εσύ).


Title: Re: [C++] Άσκηση G - 2012/2013 - Προθεσμία 20/01
Post by: Eragon on January 21, 2013, 01:24:29 am
Στον insertor γράφω αυτήν την επανάληψη

Code:
for(int i=0;i<xronia;i++){
   s.width(5);
   s<<arxiko_etos+i<<"               ";
   s.width(10);
   s.precision(3);
  
   s<<obj.debt[i]<<"\n";
   debt_ol=debt_ol+obj.debt[i];
   }  
και μου εμφανίζει το αδήλωτο εισόδημα σε επιστημονική μορφή (π.χ. 1e +003 ).
Δοκίμασα και την  εντολή    s.unsetf(ios::scientific);    αλλά δεν διορθώνεται.Ξέρει κανείς ποιο είναι το πρόβλημα?            
Δοκίμασε s.setf(ios::fixed) ή κανε #include <iomanip> και s<<fixed