THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: tomshare3 on October 29, 2008, 21:31:28 pm



Title: [C++] 2η εργασία 2008
Post by: tomshare3 on October 29, 2008, 21:31:28 pm
Η προθεσμία υποβολής της δεύτερης εβδομαδιαίας εργασίας είναι τη Δευτέρα 03/11, 23:59 (Προς αποφυγή σύγχυσης....). 

ΕΡΓΑΣΙΑ Β - Εισαγωγή στις κλάσεις (Hμ/νία λήξης δηλώσεων: 03/11/2008) Ομάδες

Να σχεδιαστεί και να υλοποιηθεί το λογισμικό το οποίο υπολογίζει και εκτυπώνει τη μισθοδοσία των υπαλλήλων μιας εταιρίας.

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

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

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

Σημείωση: Η μνήμη που θα δεσμεύεται για τα αντικείμενα να δεσμεύεται δυναμικά.


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 02, 2008, 14:34:50 pm
κανείς ε??? :( :(
καμμιά βοήθεια με τη malloc......κάποιος τυχερός που μπορεί να μπει στο φόρουμ????


Title: Re: [C++] 2η εργασία
Post by: Verminoz on November 02, 2008, 15:16:39 pm
Θέλει να χρησιμοποιήσετε malloc; Γιατί όχι το new operator; Δε σας το έχει διδάξει ακόμα;


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 02, 2008, 16:23:53 pm
να σου πω την αλήθεια δεν ξέρω τι έχει διδάξει γιατί δεν παρακολουθώ..... :-[.....
εγώ είδα δυναμική δέσμευση και το μυαλό μου πήγε στη μαλοκ! και επίσης είδα στο βιβλιο ότι η C δεν περιλαμβανει τους new και delete...
βέβαια μπορεί να έκανα και λάθος....
και πάλι όμως πως μπορώ να κάνω δυναμική δέσμευση με αντικείμενα?μετά πως τα δημιουργώ??


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 02, 2008, 16:31:00 pm
δλδ θα κάνω
Code:
όνομα_κλάσης *p;


p=new όνομα_κλάσης

και αν το p θέλω να είναι πίνακας???


Title: Re: [C++] 2η εργασία
Post by: Verminoz on November 02, 2008, 16:40:01 pm
Ναι αλλά εδώ κάνετε C++ όχι C! Πάντως αν δε σας έχει διδάξει ακόμα τα new και delete η mallon συνατάσσεται έτσι:

- για απλό array (μεγέθους n)

Code:
int n=10;
int *a;
a = (int*)malloc(n*sizeof(int));

- για διπλό pointer (πίνακας n x m)

Code:
int n=10,m=15,i;
int **a;

a = (int**)malloc(m*sizeof(int*));

for (i=0;i<m;++) {
       a[i] = (int*)malloc(n*sizeof(int));
}

Φυσικά στη θέση του int μπορείς να υπάρχει οποιοδήποτε είδος κλάσης!
Με την new τώρα:

- Για απλό array

Code:
klasi *p
int n=10;

p = new klasi [n];

- για πίνακα n x m

Code:
klasi **p
int i,n=10,m=15;

p = new klasi* [m];
for (i=0;i<m;i++) {
       p[i] = new klasi [n];
}


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 02, 2008, 16:55:24 pm

Με την new τώρα:

- Για απλό array

Code:
klasi **p
int n=10;

p = new klasi [n];



και εδώ θέλει δύο αστέρια??
πάντως θενξ νομίζω κατάλαβα!
δλδ αυτό το κάνουμε αφού μάθουμε το πλήθος που θέλουμε να φτιάξουμε έτσι ώστε να κάνουμε έναν πίνακα n αντικειμένων ε???


Title: Re: [C++] 2η εργασία
Post by: Verminoz on November 02, 2008, 17:00:48 pm
Ωπ σόρυ! Λάθος!!! Απλός pointer, δηλαδή ένα αστέρι!

Code:
klasi *p;
int n=10;

p = new klasi [n];

Ναι, πάντα δεσμεύεις συγκεκριμένο μέγεθος μνήμης, οπότε πρέπει να ξέρεις πόση θα δεσμεύσεις.


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 02, 2008, 17:03:21 pm
οκευ θενξ ε λοτ!!!!!! :)


Title: deleted
Post by: BOBoMASTORAS on November 02, 2008, 20:04:06 pm
deleted


Title: Re: [C++] 2η εργασία
Post by: Grecs on November 02, 2008, 22:59:55 pm
 Τα ποσοστα κρατησεων και φορων κλπ κλπ θα μπαινουνε απο το χρηστη του προγραμματος για τον καθε εργαζομενο??


Title: Re: [C++] 2η εργασία
Post by: crystal on November 02, 2008, 23:35:18 pm
Eχω προβλημα με την εκτυπωση των δεδομενων  :(
Οταν φτανει στην συναρτηση που τα εκτυπωνει, τελειωνει το προγραμμα.. κανεις καμια ιδεα???


Title: Re: [C++] 2η εργασία
Post by: crystal on November 02, 2008, 23:57:44 pm
pitsa?? :P


Title: Re: [C++] 2η εργασία
Post by: AgentCain on November 03, 2008, 00:06:55 am
Τα ποσοστα κρατησεων και φορων κλπ κλπ θα μπαινουνε απο το χρηστη του προγραμματος για τον καθε εργαζομενο??

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


Title: Re: [C++] 2η εργασία
Post by: AgentCain on November 03, 2008, 00:09:28 am
Eχω προβλημα με την εκτυπωση των δεδομενων  Sad
Οταν φτανει στην συναρτηση που τα εκτυπωνει, τελειωνει το προγραμμα.. κανεις καμια ιδεα???

Το σημείο που τα εκτυπώνει είναι από τα τελευταίες εντολές στον κώδικά σου? Δοκίμασες να βάλεις κάποια εντολή που να περιμένει κάποια είσοδο? π.χ. cin>>i;
Μπορεί η εκτύπωση να γίνεται αλλά εσύ να μην προλαβαίνεις να το δεις επειδή τελειώνει το πρόγραμμα και κλείνει την κονσόλα.


Title: Re: [C++] 2η εργασία
Post by: crystal on November 03, 2008, 00:34:32 am
Εχω βαλει μια cout πριν φτασει στην συναρτηση αλλα ουτε εκει φτανει

εδιτ Το ετρεξα στον borland και ειναι οκ, στον dev μου βγαζει προβλημα τελικα


Title: Re: [C++] 2η εργασία
Post by: mitsos_dlx on November 03, 2008, 02:01:55 am
Όταν λέει "Η μνήμη που θα δεσμεύεται για τα αντικείμενα να δεσμεύεται δυναμικά." τι εννοεί?

1) Να κάνουμε στη main ένα pointer τύπου κλάσης πχ για την κλάση A : A *p;  και να δεσμεύσουμε δυναμικά μνήμη για n  αντικείμενα ή

2) Να δημιουργήσουμε κανονικά τα αντικείμενα μας ( Α ob[n]; ) και μέσα στη  κλάση να έχουμε pointer αντί για μεταβλητές στο private μέρος ώστε να δεσμεύσουμε μέσω αυτού δυναμικά μνήμη για τις μεταβλητές της κλάσης (που μάλλον θα είναι οργανωμένες όλες μαζί σε κάποιο struct);

Στη περίπτωση 1 ουσιαστηκά δεν δημιουργούμε αντικείμενα...Απλά καταλαμβάνουμε μνήμη για αυτά , έτσι? Γιατί , ενώ οι διάφορες συναρτήσεις καλούνται κανονικά απο τη main  αν αντικαταστήσουμε την τελεία (.) με βέλος (->) γράφοντας πχ. p[ i ]->funtion(); η συνάρτηση αρχικών συνθηκών δεν εκτελείται καθόλου...


Title: Re: [C++] 2η εργασία
Post by: mitsos_dlx on November 03, 2008, 02:28:56 am
Για το τελευταίο έφταιγε που χρησιμοποιούσα malloc τόση ώρα. Με την new το αντικείμενο γίνεται μια χαρά και η συνάρτηση αρχικών συνθηκών του παίζει άψογα! :) 8)
Λογικό φένεται μία εντολή της C να τα κάνει μαντάρα με τα αντικείμενα της C++....


Title: Re: [C++] 2η εργασία
Post by: Grecs on November 03, 2008, 03:46:03 am
Λοιπον δε ξερω αν ειναι χαζη η ερωτηση αλλα τεσπα:


Εχω το προγραμμα ετοιμο και δουλευει τελεια κι εχω δηλωσει το καθαρο μισθο και το μεικτο ως τυπου Float καθως με τα ποσοστα προκυπτουν και δεκαδικα. Στις εκτυπωσεις μου βγαζει το Ε δλδ 1,732423Ε- κλπ κλπ. Νομιζω οτι εχει να κανει με την δηλωση μεταβλητης κανεις βοηθεια??


Title: Re: [C++] 2η εργασία
Post by: Grecs on November 03, 2008, 03:58:50 am
Bασικα ειχα κανει μαλακεια μεσα στην συναρτηση που τα υπολογιζει και το βρηκα


Title: Re: [C++] 2η εργασία
Post by: asousos on November 03, 2008, 06:04:11 am
"με τη δημιουργία των αντικειμένων, να εισάγεται το όνομα και ένας κωδικός για κάθε εργαζόμενο..."

Δηλαδή constructor function για να βάζεις όνομα και κωδικό με την δημιουργία του αντικειμένου... αλλά


"...και να υπάρχουν οι κατάλληλες συναρτήσεις για το διάβασμα των δεδομένων που αφορούν τον κάθε υπάλληλο..."


από ότι φαίνεται από την συνέχεια, είναι σαν να σου λέει να είναι ξεχωριστές οι συναρτήσεις που θα διαβάζουν τα δεδομένα. Κρίμα δεν είναι?? Γιατί εμένα με βολεύει πάρα πολύ να διαβάζει όλα τα δεδομένα στην constructor function και δεν βρίσκω και λόγο να μην το κάνει...

Εεε? τι λέτε? Αυτό εννοεί?


Title: Re: [C++] 2η εργασία
Post by: AgentCain on November 03, 2008, 10:01:50 am
You are as free as a bird to do as you please  :D

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


Title: deleted
Post by: BOBoMASTORAS on November 03, 2008, 13:01:35 pm
deleted


Title: deleted
Post by: BOBoMASTORAS on November 03, 2008, 13:05:36 pm
deleted


Title: Re: [C++] 2η εργασία
Post by: Verminoz on November 03, 2008, 13:11:01 pm

Αλλά είναι λίγο άκυρο και είναι καλό η ανάγνωση των τιμών να μη γίνεται από το constructor.

Κορτεσιανές μέθοδοι...


Title: Re: [C++] 2η εργασία
Post by: Emfanever on November 03, 2008, 23:27:16 pm
You are as free as a bird to do as you please  :D

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

Μπορείς να κάνεις πατέντα δλδ

A=(misthos*) malloc(sizeof(misthos)*n)

και μετά για να εκτελεστούν οι συναρτήσεις αρχικών συνθηκών

Code:
for (i=0;i<n;i++){
    misthos temp;
    A[i]=temp;
}
Σχετικά με τις ξεχωριστές συναρτήσεις για είσοδο, μπορούμε να τις κάνουμε και να τις τρέχουμε μέσα στη συνάρτηση αρχικών συνθηκών.


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 04, 2008, 01:46:26 am
Α μία μικρή υποσημείωση. Για την αποδέσμεση χρησιμοποιείς το τελεστή delete
Δλδ:
Code:
A *a;
a=new A(constructor arguments);
delete a;

Αλλά όταν έχεις πίνακα:
Code:
Α *a;
a=new A[34];
delete[] a;

κοινώς όταν δεσμεύεις πίνακα κάνεις delete[]

Επίσης όταν δεσμεύεις πίνακα δε μπορείς να δώσεις ορίσματα στον constructor. Καλείται πάντα ο default που δεν έχει ορίσματα. Αν θέλεις να βάλεις και ορίσματα πρέπει μετά την new να ορίσεις το αντικέμενο έτσι:
Code:
A *a;
a=new A[43];
for(unsigned int i=0;i<43;++i
    a[i]=A(constructor arguments);
/*
    more code here
*/
delete[] a;

εγώ πειράζει που δεν έβαλα delete στο πρόγραμμα????


Title: Re: [C++] 2η εργασία
Post by: pitsa on November 04, 2008, 01:46:59 am
Eχω προβλημα με την εκτυπωση των δεδομενων  :(
Οταν φτανει στην συναρτηση που τα εκτυπωνει, τελειωνει το προγραμμα.. κανεις καμια ιδεα???
pitsa?? :P

χαχαχαχαχαχαχαχαχαχαχα!!!
τώρα το είδα!!!! :P


Title: Re: [C++] 2η εργασία
Post by: Emfanever on November 04, 2008, 01:49:49 am
εγώ πειράζει που δεν έβαλα delete στο πρόγραμμα????

Και να το έβαζες (στο τέλος του προγράμματος) θα ήταν τυπικό, γιατί έτσι και αλλιώς με τον τερματισμό του προγράμματος ελευθερώνεται η μνήμη.


Title: deleted
Post by: BOBoMASTORAS on November 04, 2008, 22:51:09 pm
deleted