THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: AckermanMik on May 16, 2013, 23:51:09 pm



Title: [Δομημένος Προγρ.] Εργασια F
Post by: AckermanMik on May 16, 2013, 23:51:09 pm
Άσκηση F Μέχρι 2/6


Μια εταιρία, που έχει ως αντικείμενο το χονδρεμπόριο, διατηρεί ένα αρχείο με τις παραγγελίες των πελατών της και ένα αρχείο με τα αποθέματα των προϊόντων που διακινεί. Στο αρχείο των πελατών, σε κάθε εγγραφή, καταχωρείται το όνομα του πελάτη ως ένα string με το πολύ 20 χαρακτήρες, ένας κωδικός για τον πελάτη με τη μορφή ενός ακεραίου τύπου int, ένας κωδικός για το προϊόν που θέλει ο πελάτης με τη μορφή ενός ακεραίου τύπου int και η ποσότητα της παραγγελίας του ως ένας αριθμός τύπου float. Στο αρχείο των προϊόντων που διακινεί η εταιρία, σε κάθε εγγραφή, καταχωρείται ως ένας ακέραιος τύπου int ένας κωδικός που δηλώνει τον τύπο του προϊόντος και ένας αριθμός τύπου float που δηλώνει την ποσότητα που υπάρχει ως απόθεμα στην αποθήκη.

Να γραφεί το πρόγραμμα το οποίο να διαχειρίζεται τη διακίνηση των προϊόντων της εταιρίας.

Στο πρόγραμμα να οριστεί ένα μενού με τις εξής επιλογές:

Επιλογή 1: Καταχώρηση νέου πελάτη στο αρχείο των πελατών.

Επιλογή 2: Διαγραφεί ενός πελάτη από το αρχείο των πελατών.

Επιλογή 3: Καταχώρηση νέου προϊόντος στο αρχείο των προϊόντων.

Επιλογή 4: Διαγραφή ενός προϊόντος από το αρχείο των προϊόντων.

Επιλογή 5: Καταχώρηση νέων παραγγελιών στο αρχείο των πελατών.

Επιλογή 6: Καταχώρηση νέων παραλαβών στο αρχείο των προϊόντων.

Επιλογή 7: Εκτέλεση των παραλιών.

Επιλογή 8: Έξοδος από το πρόγραμμα.

Για κάθε επιλογή να οριστεί και μια ξεχωριστή συνάρτηση.

Οι συναρτήσεις των επιλογών 1 και 3 να καταχωρούν μια μόνο εγγραφή σε κάθε κλήση τους χωρίς να καταχωρούν αντίστοιχες ποσότητες για το προϊόν.

Οι συναρτήσεις των επιλογών 2 και 4 να διαγράφουν μια μόνο εγγραφή σε κάθε κλήση τους.

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

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

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

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

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

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

Δεν υπάρχει προτεραιότητα στην εκτέλεση των παραγγελιών. Οι παραγγελίες εκτελούνται με τη σειρά που υπάρχουν οι αντίστοιχες εγγραφές στο αρχείο των πελατών.

 

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

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

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


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Λήσταρχος Γιαγκούλας on May 29, 2013, 22:17:35 pm
H άσκηση λέει πως η εταιρεία διατηρεί αρχείο με τις παραγγελίες κλπ-κλπ...
Τώρα στο πρόγραμμα που θα κάνουμε θα δημιουργήσουμε αρχείο ή θα θεωρήσουμε πως ήδη υπάρχει;
Αν δημιουργήσουμε αρχείο, θα θεωρήσουμε ότι έιναι γεμάτο;(π.χ. έχει 5 παραγγελίες και θα τις εισάγουμε εμείς; :o
Αν πάλι θεωρήσουμε πως υπάρχει δεν θα πρέπει να κάνουμε έλεγχο ύπαρξης;
 if(fp==NULL){
printf("error:cannot open file %s (sector x)\n",xfile);
      exit(x);
o oποιός θα δώσει null και πρόγραμμα ΤΕΛΟΣ;;;

Kάθε βοήθεια θα ήταν πολύτιμη ,
ευχαριστώ για τον χρόνο σας...


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Μουργόλυκος on May 31, 2013, 03:40:37 am
H άσκηση λέει πως η εταιρεία διατηρεί αρχείο με τις παραγγελίες κλπ-κλπ...
Τώρα στο πρόγραμμα που θα κάνουμε θα δημιουργήσουμε αρχείο ή θα θεωρήσουμε πως ήδη υπάρχει;
Αν δημιουργήσουμε αρχείο, θα θεωρήσουμε ότι έιναι γεμάτο;(π.χ. έχει 5 παραγγελίες και θα τις εισάγουμε εμείς; :o
Αν πάλι θεωρήσουμε πως υπάρχει δεν θα πρέπει να κάνουμε έλεγχο ύπαρξης;
 if(fp==NULL){
printf("error:cannot open file %s (sector x)\n",xfile);
      exit(x);
o oποιός θα δώσει null και πρόγραμμα ΤΕΛΟΣ;;;

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


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: PureForm on May 31, 2013, 12:33:08 pm
δηλαδη το αρχειο θα το φτιανχουμε μεσω τησ του προγραμματοσ και θα το διαχειριζομαστε η θα το φτιαχνουμε εμεισ και θα το ανοιγει η ασκση και θα το διαχειριζεται


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Λήσταρχος Γιαγκούλας on May 31, 2013, 12:38:16 pm
Quote
Ουσιαστικά θα φτιάξεις τα 2 αρχεία και αυτά θα γεμίζουν μες στο πρόγραμμα. Δηλαδή αρχικά είναι άδεια. Απλά μην κάνεις έλεγχο ύπαρξης και θα είσαι κομπλέ.

Ευχαριστώ


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Μουργόλυκος on May 31, 2013, 13:46:33 pm
δηλαδη το αρχειο θα το φτιανχουμε μεσω τησ του προγραμματοσ και θα το διαχειριζομαστε η θα το φτιαχνουμε εμεισ και θα το ανοιγει η ασκση και θα το διαχειριζεται
To 1o


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: vasilis1005 on May 31, 2013, 14:44:54 pm
πως θα δημιουργησω τα 2 αρχεια;
πρεπει να φτιαξω ξεχωριστη συναρτηση που να τα δημιουργει
ή γινεται να το κανω μεσα στις συναρτησεις; :(


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Μουργόλυκος on May 31, 2013, 16:53:09 pm
πως θα δημιουργησω τα 2 αρχεια;
πρεπει να φτιαξω ξεχωριστη συναρτηση που να τα δημιουργει
ή γινεται να το κανω μεσα στις συναρτησεις; :(
Στην main θα το κάνεις αυτό
Για να τα δημιουργήσεις γράφεις:
Code:
FILE *fp1, *fp2;


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: vasilis1005 on May 31, 2013, 17:17:58 pm
πως θα δημιουργησω τα 2 αρχεια;
πρεπει να φτιαξω ξεχωριστη συναρτηση που να τα δημιουργει
ή γινεται να το κανω μεσα στις συναρτησεις; :(
Στην main θα το κάνεις αυτό
Για να τα δημιουργήσεις γράφεις:
Code:
FILE *fp1, *fp2;

α οκ ;)
αρα μεσα στις συναρτησεις πρεπει να τα ανοιγω για γραψιμο ή για διαβασμα;

πως ομως θα τα ανοιξω μεσα στις συναρτησεις;
Code:
fopen=(fp1,"w");


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Μουργόλυκος on May 31, 2013, 18:01:36 pm
α οκ ;)
αρα μεσα στις συναρτησεις πρεπει να τα ανοιγω για γραψιμο ή για διαβασμα;

πως ομως θα τα ανοιξω μεσα στις συναρτησεις;
Code:
fopen=(fp1,"w");

Ανάλογα με την συνάρτηση ανοίγεις για διάβασμα ή γράψιμο.Μέσα στις συναρτήσεις γράφεις:
Code:
void synarthish(...){
     FILE *fp1;
     fp1=fopen("name", "ab");
     ...
}
Στο name είναι το όνομα του αρχείου που ανοίγεις. Ρωτάς το όνομα του αρχείου στην αρχή του προγράμματος.
Γενικά καλύτερα είναι να τα ανοίγεις δυαδικά (ab).


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: vasilis1005 on May 31, 2013, 19:26:47 pm
sorry για το πρηξιμο

ενα τελευταιο:

μηπως μπορει καποιος να μου εξηγησει τι κανουν αυτες οι 2 εντολες;

Code:
fseek(fp1,0,SEEK_SET);

fseek(fp1,-sizeof(fp1),SEEK_CUR);


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Αλντεμπαράν on May 31, 2013, 22:37:13 pm
sorry για το πρηξιμο

ενα τελευταιο:

μηπως μπορει καποιος να μου εξηγησει τι κανουν αυτες οι 2 εντολες;

Code:
fseek(fp1,0,SEEK_SET);

fseek(fp1,-sizeof(fp1),SEEK_CUR);
η fseek χρησιμοποιείτε για τυχαία προσπέλαση σε οποιοδήποτε σημείο του αρχείου.στην 1)μετακινεί την ένδειξη θέσης του αρχείου fp1 σε μια επόμενη θέση αυτού κατά 0 bytes από την αρχή του.(δλδ ο δείκτης εν τέλει θα δείχνει στο πρώτο byte του αρχείου)2) μετακινεί την ένδειξη θέσης του αρχείου fp1 σε μια προηγούμενη θέση αυτού κατά 4bytes όσο είναι το μέγεθος του pointer σε αρχείο.


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 01, 2013, 00:15:39 am
θελει και δομες?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Αλντεμπαράν on June 01, 2013, 01:09:03 am
θελει και δομες?
"η χρήση δομών σε αρχεία είναι κακή ιδέα γιατί καταστρέφει την φορητότητα του προγράμματος"  cplusplus.com said...


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: TechSupport on June 01, 2013, 02:54:11 am
θελει και δομες?
"η χρήση δομών σε αρχεία είναι κακή ιδέα γιατί καταστρέφει την φορητότητα του προγράμματος"  cplusplus.com said...
Ο κυριος Κορτεσης μας ειπε ομως πως  χρειαζονται για την εργασια οταν τις εκανε στη θεωρια!  :(


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Αλντεμπαράν on June 01, 2013, 10:24:25 am
θελει και δομες?
"η χρήση δομών σε αρχεία είναι κακή ιδέα γιατί καταστρέφει την φορητότητα του προγράμματος"  cplusplus.com said...
Ο κυριος Κορτεσης μας ειπε ομως πως  χρειαζονται για την εργασια οταν τις εκανε στη θεωρια!  :(
εγώ δεν είπα ότι ο κ.Κορτέσης έχει καλές ιδέες... 8)) ;D


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 01, 2013, 14:05:43 pm
ναι αυτο π θελω να πω ειναι αν απαιτειται δομη για την εργασια


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: PureForm on June 01, 2013, 14:57:00 pm
βαλεισ δεν βαλεισ δομεσ,σωστη ειτε λαθοσ ειναι η ασκηση σου παντα θα εχεισ τουλαχιστον μια απορια την οποια θεσ να του την ρωτησεισ αλλα ποτε δεν γινεται γιατι στο εργαστηριο δεν εχει χρονο ουτε τισ ασκησεισ να δει μονο να ρωταει αν κανουν compile και αν το κανεισ αυτο στην ταξη χωρισ τον κωδικα μπροστα σου ακρη δεν βγαινει κακα τα ψεματα
νμζ οτι αυτο ειναι το μεγαλυτερο προβλημα στο μαθημα
τσπ εγω εβαλα δομεσ και μ φενεται οτι ειναι πιο ευκολο να το διαχειριζομαι


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Αλντεμπαράν on June 01, 2013, 19:27:33 pm
ok έστω ότι χρησιμοποιείς δομή.Νομίζω ότι για να περάσεις τα στοιχεία της δομής στο αρχείο θα πρέπει να τα περάσεις ένα ένα μιας και δεν μπορείς απλά να "φυτέψεις"τα 26 byte της κάθε δομής στο αρχείο.Μήπως τελικά υπάρχει τρόπος να αντιγράφεις ολόκληρη την δομή γιατί αλλιώς δεν έχει κάποια χρήση η δομή...???


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 01, 2013, 19:48:54 pm
εγω παντως δεν βρισκω τον λογο υπαρξης δομής. :S


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Rocket on June 01, 2013, 20:27:03 pm
παιδιά καμιά βοήθεια με τη διαγραφή?  :(
πως θα υλοποιηθεί έτσι όπως το ζητάει να πηγαίνει η εγγραφή στο τέλος?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: tpt on June 01, 2013, 21:42:49 pm
παιδια να κανω μια ερωτηση η οποια θα μου ξεκαθαρισει πολλα στο μυαλο μου .Οταν μια σηναρτηση καλειται απο το προγραμμα να εκτελεσει τις εντολες που βρισκοντε μεσα στο σωμα της ,η σηναρτηση κανει αντιγραφα των μεταβλητων που εχει ωσ ορισματα τα χρησιμοποιει μεχρι να φτασει  στο τελος τησ εκτελεσης της και στην συνεχεια διαγραφονται ,Εμενα η ερωτηση μου ειναι οταν θα ανοιγω το αρχειο μεσα στην σηναρτηση και θα γραφω απευθειας μεσα στο αρχειο τοτε μετα απο την εξοδο απο την σηναρτηση οι μετατροπες που εκανα θ παραμεινουν???? ή θα πρεπει να το κανω με αλλον τροπο???


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: zidan on June 01, 2013, 22:26:15 pm
τις συναρτήσεις τις έκανα,το θέμα τι ορίσματα θα βάλω στις παρενθέσεις..? :D :D


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 13:07:22 pm
Αποριες :

(1) Εστω χρησιμοποιουμε δομες. Πρέπει να είναι 2 ? Μια για τους πελάτες και μία για τα προιόντα?

(2) Πάμε στην main. Η δηλωση θα είναι : structure clients *cl ? (όπου clients η δομη για τους πελάτες.)

(3) Θέλουμε να στείλουμε την δομή στην συνάρτηση. Τι όρισμα θα βάλουμε στην παρένθεση? πχ. void kataxwrisi(structure clients *cl,FILE *fp1) ??

(4) Έστω πέρασε στην συνάρτηση και επεξεργαζόμαστε το αρχείο. Τα στοιχεια της δομής αναγράφονται ως πχ cl.code ή *cl.code ??

(5) Επίσης, οι τροποποιήσεις γίνονται με fwrite? (αν είναι binary). Αν ναι είναι σωστή αυτή η σύνταξη : fwrite(&cl,sizeof(..),1,fp1) ?? Και τι μπαίνει στο sizeof(?).

Το ξέρω ότι ζητάω πολλά αλλά αν κάποιος έχει καταφέρει να βγάλει άκρη θα βοηθούσε πολύ. Ευχαριστώ.


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Μουργόλυκος on June 02, 2013, 13:23:25 pm
Αποριες :

(1) Εστω χρησιμοποιουμε δομες. Πρέπει να είναι 2 ? Μια για τους πελάτες και μία για τα προιόντα?

(2) Πάμε στην main. Η δηλωση θα είναι : structure clients *cl ? (όπου clients η δομη για τους πελάτες.)

(3) Θέλουμε να στείλουμε την δομή στην συνάρτηση. Τι όρισμα θα βάλουμε στην παρένθεση? πχ. void kataxwrisi(structure clients *cl,FILE *fp1) ??

(4) Έστω πέρασε στην συνάρτηση και επεξεργαζόμαστε το αρχείο. Τα στοιχεια της δομής αναγράφονται ως πχ cl.code ή *cl.code ??

(5) Επίσης, οι τροποποιήσεις γίνονται με fwrite? (αν είναι binary). Αν ναι είναι σωστή αυτή η σύνταξη : fwrite(&cl,sizeof(..),1,fp1) ?? Και τι μπαίνει στο sizeof(?).

Το ξέρω ότι ζητάω πολλά αλλά αν κάποιος έχει καταφέρει να βγάλει άκρη θα βοηθούσε πολύ. Ευχαριστώ.
(1) Ναι
(2)Η δήλωση είναι struct clients cl
(3)void kataxwrisi (struct clients cl,... (όχι το αρχείο)){
      FILE *fp;
      ...
   }
Ουσιαστικά το ξαναανοίγεις σε κάθε συνάρτηση.
(4)cl.code
(5)Δεν έχω καταλάβει και εγώ...


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: PureForm on June 02, 2013, 13:28:27 pm
1)θα μπορουσεσ και 2 ,εγω προσωπικα εφτιαξα πινακα δομων αν καταλαβαινεισ τι εννοω
2)με αυτο structure clients *cl δηλωνεισ οτι η μεταβλητη cl θα περιεχει εναν pointer που θα δειχνει σε μια δομη τυπου clients
3)αναλογα τι εχεισ δηλωσει πιο πριν,διαβασε θεωρια και θα καταλαβεισ αμεσωσ τι χρειαζεται να βαλεισ
4)αυτο *cl.code νμζ δενυπαρχει αλλα υπαρχει αυτο π.χ (cl)->code=2;   ,αλλιωσ ειναι οι ποιντερσ σε δομη,αν τωρα δεν εχεισ ορισει ποιοντερσ ειναι cl.code
5)ναι.τωρα για το sizeof δεν μπορω να πω οτι το εχω καταλαβει 100% αλλα νμζ το εξησ αν εχεισ fwrite(&cl,sizeof(cl),1,fp1)  αυτο θα σου γραψει ολη τν δομη(ισωσ και να κατλαβεισ αλλα απο οτι εννοω)

ελπιζω να βοηθησα και οχι να μπερδεψα,σορρυ αν κατι δεν το λεω καλα και φανει λαθοσ
μακαρι παντωσ τα προβληματα που δημιουργουνται σε αυτη την ασκηση να σταματαγανε εδω :P


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 13:30:52 pm
ευχαριστω για τις απαντησεις παιδες.


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 13:33:47 pm
ενταξει ψιλοκωμικοτραγικη ειναι η ασκηση. Με βαση το τι εχει γινει σε θεωρια και ασκησεις.


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 13:49:15 pm
1)θα μπορουσεσ και 2 ,εγω προσωπικα εφτιαξα πινακα δομων αν καταλαβαινεισ τι εννοω
2)με αυτο structure clients *cl δηλωνεισ οτι η μεταβλητη cl θα περιεχει εναν pointer που θα δειχνει σε μια δομη τυπου clients
3)αναλογα τι εχεισ δηλωσει πιο πριν,διαβασε θεωρια και θα καταλαβεισ αμεσωσ τι χρειαζεται να βαλεισ
4)αυτο *cl.code νμζ δενυπαρχει αλλα υπαρχει αυτο π.χ (cl)->code=2;   ,αλλιωσ ειναι οι ποιντερσ σε δομη,αν τωρα δεν εχεισ ορισει ποιοντερσ ειναι cl.code
5)ναι.τωρα για το sizeof δεν μπορω να πω οτι το εχω καταλαβει 100% αλλα νμζ το εξησ αν εχεισ fwrite(&cl,sizeof(cl),1,fp1)  αυτο θα σου γραψει ολη τν δομη(ισωσ και να κατλαβεισ αλλα απο οτι εννοω)

ελπιζω να βοηθησα και οχι να μπερδεψα,σορρυ αν κατι δεν το λεω καλα και φανει λαθοσ
μακαρι παντωσ τα προβληματα που δημιουργουνται σε αυτη την ασκηση να σταματαγανε εδω :P

sizeof(cl) ή sizeof(clients) ?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: nikitas350 on June 02, 2013, 13:50:51 pm
ok έστω ότι χρησιμοποιείς δομή.Νομίζω ότι για να περάσεις τα στοιχεία της δομής στο αρχείο θα πρέπει να τα περάσεις ένα ένα μιας και δεν μπορείς απλά να "φυτέψεις"τα 26 byte της κάθε δομής στο αρχείο.Μήπως τελικά υπάρχει τρόπος να αντιγράφεις ολόκληρη την δομή γιατί αλλιώς δεν έχει κάποια χρήση η δομή...???

Μπορείς να περάσεις όλη την δομή σε ένα αρχείο με μία εντολή, άμα έχεις ανοίξει το αρχείο ως binary. (νομίζω ότι έτσι χάνεις σε φορητότητα όμως).

http://www.codingunit.com/c-tutorial-binary-file-io

Πέρα από αυτό το να χρησιμοποιείς δομή βοηθάει στο να έχεις το πρόγραμμα σου πιο οργανωμένο γύρω από το δεδομένα που έχεις. Το να λες ότι δεν έχει κάποια χρήση η δομή στην C είναι σαν να λες ότι στην C++ δεν έχουν καμμια χρήση οι κλάσεις (ντάξει τραβηγμένο παράδειγμα :P)

Quote
4)αυτο *cl.code νμζ δενυπαρχει αλλα υπαρχει αυτο π.χ (cl)->code=2;   ,αλλιωσ ειναι οι ποιντερσ σε δομη,αν τωρα δεν εχεισ ορισει ποιοντερσ ειναι cl.code

Μπορείς να γράψεις cl->code=2 ή ισοδύναμα
(*cl).code, επειδή το * έχει μικρότερη προτεραιότητα από την τελεία.
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence)



Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: PureForm on June 02, 2013, 14:01:07 pm
1)θα μπορουσεσ και 2 ,εγω προσωπικα εφτιαξα πινακα δομων αν καταλαβαινεισ τι εννοω
2)με αυτο structure clients *cl δηλωνεισ οτι η μεταβλητη cl θα περιεχει εναν pointer που θα δειχνει σε μια δομη τυπου clients
3)αναλογα τι εχεισ δηλωσει πιο πριν,διαβασε θεωρια και θα καταλαβεισ αμεσωσ τι χρειαζεται να βαλεισ
4)αυτο *cl.code νμζ δενυπαρχει αλλα υπαρχει αυτο π.χ (cl)->code=2;   ,αλλιωσ ειναι οι ποιντερσ σε δομη,αν τωρα δεν εχεισ ορισει ποιοντερσ ειναι cl.code
5)ναι.τωρα για το sizeof δεν μπορω να πω οτι το εχω καταλαβει 100% αλλα νμζ το εξησ αν εχεισ fwrite(&cl,sizeof(cl),1,fp1)  αυτο θα σου γραψει ολη τν δομη(ισωσ και να κατλαβεισ αλλα απο οτι εννοω)

ελπιζω να βοηθησα και οχι να μπερδεψα,σορρυ αν κατι δεν το λεω καλα και φανει λαθοσ
μακαρι παντωσ τα προβληματα που δημιουργουνται σε αυτη την ασκηση να σταματαγανε εδω :P

sizeof(cl) ή sizeof(clients) ?
στο παραδειγμα σου η δομη δεσμευει μνημη οτν κανεισ αυτο  structure clients cl;
τοτε η μεταβλητη cl δεσμευει χωρο στη μνημη
οποτε εσυ για να γραψεισ το περιεχομενο τησ δομησ σου χρησιμοποιεισ το cl
δεν ξερω αν εγινα κατανοητοσ
μπορεισ να το δεισ και αλλιωσ αν δεν σε επεισα,μετα για να βαλεισ τιμεσ η να κανεισ οτι θεσ με τα στοιχεια τισ δομησ "παιζεισ" ετσι π.χ cl.code(για τον κωδικο του πελατη),cl.onoma(για το oνομα του πελατη)κλπ δεν χρησιμποιεισ πουθενα το clients


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: Αλντεμπαράν on June 02, 2013, 14:58:19 pm
ok έστω ότι χρησιμοποιείς δομή.Νομίζω ότι για να περάσεις τα στοιχεία της δομής στο αρχείο θα πρέπει να τα περάσεις ένα ένα μιας και δεν μπορείς απλά να "φυτέψεις"τα 26 byte της κάθε δομής στο αρχείο.Μήπως τελικά υπάρχει τρόπος να αντιγράφεις ολόκληρη την δομή γιατί αλλιώς δεν έχει κάποια χρήση η δομή...???

Μπορείς να περάσεις όλη την δομή σε ένα αρχείο με μία εντολή, άμα έχεις ανοίξει το αρχείο ως binary. (νομίζω ότι έτσι χάνεις σε φορητότητα όμως).

http://www.codingunit.com/c-tutorial-binary-file-io


πολύ χρήσιμο το link ;)


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: George_RT on June 02, 2013, 21:07:45 pm
εγω παντως δεν βρισκω τον λογο υπαρξης δομής. :S
Τώρα κάνουμε απλά πράγματα για αυτό δεν σου φαίνεται οτι χρειάζονται στο άλλο εξάμηνο με την C++ θα είσαι ευτυχής που υπάρχουν :P

τις συναρτήσεις τις έκανα,το θέμα τι ορίσματα θα βάλω στις παρενθέσεις..? :D :D

Θα βάλεις το αρχείο που έχεις δημιουργήσει (λογικά στην main) και της δομές που θα διαχειριστείς μέσα στην συνάρτηση


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: demP on June 02, 2013, 21:22:15 pm
ανεβαζουμε 3 αρχεια? δλδ και τα 2 *.dat ή μονο τo *.cpp ?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 22:44:27 pm
εγω παντως δεν βρισκω τον λογο υπαρξης δομής. :S
Τώρα κάνουμε απλά πράγματα για αυτό δεν σου φαίνεται οτι χρειάζονται στο άλλο εξάμηνο με την C++ θα είσαι ευτυχής που υπάρχουν :P

τις συναρτήσεις τις έκανα,το θέμα τι ορίσματα θα βάλω στις παρενθέσεις..? :D :D

Θα βάλεις το αρχείο που έχεις δημιουργήσει (λογικά στην main) και της δομές που θα διαχειριστείς μέσα στην συνάρτηση

To αρχειο πως το στελνουμε στην συναρτηση?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: George_RT on June 02, 2013, 22:48:32 pm
ανεβαζουμε 3 αρχεια? δλδ και τα 2 *.dat ή μονο τo *.cpp ?
Μόνο το .cpp η .c δεν σου δίνει έτσι και αλλιώς καν την δυνατότητα να ανεβάσεις 3 αρχεία 

εγω παντως δεν βρισκω τον λογο υπαρξης δομής. :S
Τώρα κάνουμε απλά πράγματα για αυτό δεν σου φαίνεται οτι χρειάζονται στο άλλο εξάμηνο με την C++ θα είσαι ευτυχής που υπάρχουν :P

τις συναρτήσεις τις έκανα,το θέμα τι ορίσματα θα βάλω στις παρενθέσεις..? :D :D

Θα βάλεις το αρχείο που έχεις δημιουργήσει (λογικά στην main) και της δομές που θα διαχειριστείς μέσα στην συνάρτηση

To αρχειο πως το στελνουμε στην συναρτηση?

void test(FILE *arxeio)
{
}



Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 22:50:03 pm
δεν μπορουμε απλα να δηλωνουμε τον Poionter FILE *fp σε καθε συναρτηση ξεχωριστα?


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: George_RT on June 02, 2013, 22:54:54 pm
δεν μπορουμε απλα να δηλωνουμε τον Poionter FILE *fp σε καθε συναρτηση ξεχωριστα?
Εννοείς να δημιουργείς σε κάθε συνάρτηση το αρχείο ;
Μπορείς να το κανείς εάν λες αυτό αλλά δεν είναι ορθό να γίνεται !


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: reservoir dog on June 02, 2013, 23:01:00 pm
μαλιστα. σε ευχαριστω/


Title: Re: [Δομημένος Προγρ.] Εργασια F
Post by: heavy melon on June 11, 2013, 12:04:49 pm
μπορεί κάποιος να ανεβάσει μια σωστή F εργασία;