THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: c0ndemn3d on May 26, 2012, 14:41:09 pm



Title: [Δομημένος Πρ.] Εργασία G
Post by: c0ndemn3d on May 26, 2012, 14:41:09 pm
Να γραφεί το πρόγραμμα το οποίο να διαχειρίζεται την παραμονή των αυτοκινήτων σε ένα σταθμό στάθμευσης. Στο πρόγραμμα, αφού διαβαστεί το ανά ώρα κόστος παραμονής ενός αυτοκινήτου στο σταθμό, να ορίζεται μια ατέρμων ανακύκλωση, σε κάθε επανάληψη της οποίας, μέσα από ένα μενού επιλογών, να διακρίνονται οι περιπτώσεις:

α) Κάποιο αυτοκίνητο βρίσκεται στην είσοδο του σταθμού.

β) Κάποιο αυτοκίνητο βρίσκεται στην έξοδο του σταθμού.

γ) Θέλουμε να τερματιστεί η ανακύκλωση.

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

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

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

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

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

Για τη διαχείριση του χρόνου παραμονής μπορείτε να χρησιμοποιήσετε τη συνάρτηση time() η οποία, όταν της δοθεί ως όρισμα η τιμή NULL, επιστρέφει το χρόνο σε δευτερόλεπτα που έχει περάσει από τα μεσάνυχτα της 1-1-1970. Η συνάρτηση ορίζεται στους μεταγλωττιστές της BORLAND στο αρχείο time.h. Φυσικά μπορείτε να χρησιμοποιήσετε οποιαδήποτε αντίστοιχη συνάρτηση διαθέτει ο μεταγλωττιστής που χρησιμοποιείτε.

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


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: evripidaros on May 28, 2012, 18:00:22 pm
Οι πινακίδες θεωρούνται char;


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: nastia on May 28, 2012, 20:51:22 pm
παιδια όταν λέει για την 1η περιπτωση να καταχωρειται ο αριθμος κυκλοφοριας και ο χρονος εισοδου εννοει τι ώρα μπηκε το αμαξι η πόση ωρα θα μεινει μεσα????


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 28, 2012, 20:57:28 pm
Οι πινακίδες θεωρούνται char;
Δε διευκρινίζει. Προσωπικά, τους πήρα σαν integer αριθμούς... (Μια εκφώνηση χωρίς ασάφεια, και θα τα 'χω δει όλα :D)

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


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: evripidaros on May 29, 2012, 02:31:30 am
Οι πινακίδες θεωρούνται char;
Δε διευκρινίζει. Προσωπικά, τους πήρα σαν integer αριθμούς... (Μια εκφώνηση χωρίς ασάφεια, και θα ταχω δει όλα :D)
Εγώ το πήρα char και το δούλεψα με strcmp(), αλλά τζάμπα παραπάνω κόπος, εφόσον το αφήνει αδιευκρίνιστο. Μα καλά πως έτυχε ο Κορτέσης να βάλει ασαφή εκφώνηση... Απίθανο μου φαίνεται...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Gru on May 29, 2012, 11:29:50 am
πως μπορω να διαγραψω τον αριθμο κυκλοφοριας απο το αρχειο? :-\


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on May 29, 2012, 11:56:57 am
οταν το ανοιγεις με fopen θα χρησιμοποιησεις την τιμη w
---------------------------------------------------------------------------------------------------------------------------
r - open a file in read-mode, set the pointer to the beginning of the file.
w - open a file in write-mode, set the pointer to the beginning of the file.
a - open a file in write-mode, set the pointer to the end of the file.
rb - open a binary-file in read-mode, set the pointer to the beginning of the file.
wb - open a binary-file in write-mode, set the pointer to the beginning of the file.
ab - open a binary-file in write-mode, set the pointer to the end of the file.
r+ - open a file in read/write-mode, if the file does not exist, it will not be created.
w+ - open a file in read/write-mode, set the pointer to the beginning of the file.
a+ - open a file in read/append mode.
r+b - open a binary-file in read/write-mode, if the file does not exist, it will not be created.
w+b - open a binary-file in read/write-mode, set the pointer to the beginning of the file.
a+b - open a binary-file in read/append mode.



Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: evripidaros on May 29, 2012, 15:50:44 pm
Καμία ιδέα για το πως θα αντιγράφουμε την τελευταία εγγραφή στη θέση της διαγεγραμμένης; Και πως θα διαγράφουμε βασικά...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on May 29, 2012, 23:33:38 pm
να ρωτησω κατι, η εκφωνηση λεει αν το αυτοκινητο ειναι στην εξοδο τοτε να κανουμε αναζητηση στο αρχειο και να βρισκουμε την ωρα που μπηκε στο γκαραζ κτλ
αφου στις παρατηρησεις λεει οτι μετα απο καθε ανοιγμα του αρχειου θα σβηνονται τα δεδομενα που εχει μεσα, πως θα κανουμε την αναζητηση;
δηλαδη μπαινει ενα αυτοκινητο το καταχωρουμε μετα ερχεται ενα αλλο το καταχωρουμε κι αυτο, μετα αν φυγει το πρωτο πως θα γινει η αναζητηση αφου θα εχουν σβηστει τα δεδομενα;
επισης λεει στο τελος να τυπωνονται οι πινακιδες οσων αυτοκινητων ειναι μεσα (παλι το ιδιο προβλημα...)
καλα μας δουλευει ο ηλιθιος κορτεσης;  ^idiot^
(εκτος εγω αν δεν καταλαβα καλα την εκφωνηση...)


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 30, 2012, 00:49:18 am
να ρωτησω κατι, η εκφωνηση λεει αν το αυτοκινητο ειναι στην εξοδο τοτε να κανουμε αναζητηση στο αρχειο και να βρισκουμε την ωρα που μπηκε στο γκαραζ κτλ
αφου στις παρατηρησεις λεει οτι μετα απο καθε ανοιγμα του αρχειου θα σβηνονται τα δεδομενα που εχει μεσα, πως θα κανουμε την αναζητηση;
δηλαδη μπαινει ενα αυτοκινητο το καταχωρουμε μετα ερχεται ενα αλλο το καταχωρουμε κι αυτο, μετα αν φυγει το πρωτο πως θα γινει η αναζητηση αφου θα εχουν σβηστει τα δεδομενα;
επισης λεει στο τελος να τυπωνονται οι πινακιδες οσων αυτοκινητων ειναι μεσα (παλι το ιδιο προβλημα...)
καλα μας δουλευει ο ηλιθιος κορτεσης;  ^idiot^
(εκτος εγω αν δεν καταλαβα καλα την εκφωνηση...)

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


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on May 30, 2012, 00:52:25 am
να ρωτησω κατι, η εκφωνηση λεει αν το αυτοκινητο ειναι στην εξοδο τοτε να κανουμε αναζητηση στο αρχειο και να βρισκουμε την ωρα που μπηκε στο γκαραζ κτλ
αφου στις παρατηρησεις λεει οτι μετα απο καθε ανοιγμα του αρχειου θα σβηνονται τα δεδομενα που εχει μεσα, πως θα κανουμε την αναζητηση;
δηλαδη μπαινει ενα αυτοκινητο το καταχωρουμε μετα ερχεται ενα αλλο το καταχωρουμε κι αυτο, μετα αν φυγει το πρωτο πως θα γινει η αναζητηση αφου θα εχουν σβηστει τα δεδομενα;
επισης λεει στο τελος να τυπωνονται οι πινακιδες οσων αυτοκινητων ειναι μεσα (παλι το ιδιο προβλημα...)
καλα μας δουλευει ο ηλιθιος κορτεσης;  ^idiot^
(εκτος εγω αν δεν καταλαβα καλα την εκφωνηση...)

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

ααα οκ καταλαβα thanks
(μια σωστη εκφωνηση δεν μπορει να γραψει αυτος ο ανθρωπος; ελπιζω στις εξετασεις να μην ειναι ετσι...)


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 30, 2012, 00:54:58 am
μια σωστη εκφωνηση δεν μπορει να γραψει αυτος ο ανθρωπος; ελπιζω στις εξετασεις να μην ειναι ετσι...

Έχω σοβαρές υποψίες ότι με την ελπίδα θα μείνουμε :o...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: 020400e on May 30, 2012, 04:33:07 am
Όλα αυτά θα τα καταχωρούμε σε .txt file?????


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on May 30, 2012, 04:36:52 am
ναι πχ
Code:
FILE *fp;
fp=fopen("c:\\test.txt", "w+b");

edit: μη μου πεις οτι τετοια ωρα γραφεις C :D :D :D


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: 020400e on May 30, 2012, 04:48:46 am
Όχι ρε, απλά δεν είχα τι να κάνω και είπα να κοιτάξω λίγο την εκφώνηση της εργασίας...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Mr K on May 30, 2012, 10:43:05 am
να ρωτησω κατι, η εκφωνηση λεει αν το αυτοκινητο ειναι στην εξοδο τοτε να κανουμε αναζητηση στο αρχειο και να βρισκουμε την ωρα που μπηκε στο γκαραζ κτλ
αφου στις παρατηρησεις λεει οτι μετα απο καθε ανοιγμα του αρχειου θα σβηνονται τα δεδομενα που εχει μεσα, πως θα κανουμε την αναζητηση;
δηλαδη μπαινει ενα αυτοκινητο το καταχωρουμε μετα ερχεται ενα αλλο το καταχωρουμε κι αυτο, μετα αν φυγει το πρωτο πως θα γινει η αναζητηση αφου θα εχουν σβηστει τα δεδομενα;
επισης λεει στο τελος να τυπωνονται οι πινακιδες οσων αυτοκινητων ειναι μεσα (παλι το ιδιο προβλημα...)
Το καναλι (ή ρεύμα ή αρχείο) σκεψου το σαν μια μεγαλη σειριακη σειρα θεσεων μνημης. Αποθηκευεις πρωτα τα στοιχεια ενος αμαξιου, μετα του αλλου, μετα του αλλου και αυτα γραφονται με την σειρα. Παει αυτο (για εισοδο αυτοκινητων).
Στην εξοδο  σου δινει ο χρηστης την πινακιδα. Και εσυ τρεχεις το αρχειο απο την αρχη, βρισκεις σε ποιο σημειο ειναι το αμαξι που θες, υπολογιζεις τις χαζομαρες που θελει και μετα γραφεις επανω απο τα στοιχεια του αμαξιου που εφυγε, τα στοιχεια του αμαξιου που γραφτηκε στο τελος του αρχειου (δηλαδη του αμαξιου που μπηκε τελευταιο).
Το κυριοτερο προβλημα σου ειναι οτι πλεον δεν υπαρχουν μεταβλητες για να δειξουν που ειναι το καθε τι στο αρχειο, αλλα ενας δεικτης (σκεψου τον σαν τον κερσορα του word), που πρεπει να τον μετακινεις μπρος και πισω ωστε να βρισκεται στην θεση που θες.
Υ.Γ.  Οταν ο κερσορας αυτος διαβαζει κατι, το προσπερναει οποτε πρεπει να τον γυρισεις πισω για να καλεσει την fread και να παρει τα στοιχεια που θελεις απο το καναλι..


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on May 30, 2012, 12:42:54 pm
thanks ησουν πολυ κατατοπιστικος :)


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: nastia on May 30, 2012, 16:03:14 pm

 και μετα γραφεις επανω απο τα στοιχεια του αμαξιου που εφυγε, τα στοιχεια του αμαξιου που γραφτηκε στο τελος του αρχειου (δηλαδη του αμαξιου που μπηκε τελευταιο).
[/quote]


Τι ακριβώς εννοείς μ'αυτό??


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 30, 2012, 16:19:48 pm
Τι ακριβώς εννοείς μ'αυτό??

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


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: autos.gr on May 30, 2012, 20:10:45 pm
Σύγκριση των πινακίδων που δινει ο χρήστης στην έξοδο με τις πινακίδες που θα υπάρχουν μέσα στο αρχείο με ποιά εντολή γίνετε? καμιά ιδέα?
Επίσης τον χρόνο τον έχω βάλει σαν long int και τις πινακίδες σαν string.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 30, 2012, 20:20:44 pm
Σύγκριση των πινακίδων που δινει ο χρήστης στην έξοδο με τις πινακίδες που θα υπάρχουν μέσα στο αρχείο με ποιά εντολή γίνετε? καμιά ιδέα?
Επίσης τον χρόνο τον έχω βάλει σαν long int και τις πινακίδες σαν string.

Αφού καλέσεις την συνάρτηση fread για να πάρεις μια τιμή από το αρχείο, μπορείς να συγκρίνεις αυτήν την τιμή (που θα είναι string) με την τιμή του string των πινακίδων που έδωσε ο χρήστης για έξοδο με την συνάρτηση strncmp. Για λεπτομέρεις/παράδειγμα χρήσης της: http://www.cplusplus.com/reference/clibrary/cstring/strncmp/


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: autos.gr on May 30, 2012, 20:45:04 pm
Κι εγώ την σκέφτηκα την fread αλλα δεν καταλαβαίνω πως θα βρεί που είναι γραμμένη η πινακίδα.Θα πρέπει με μια loop να σαρωθεί όλο το αρχείο με διαδοχικές fread ? δηλάδη να συκρίνει την πινακίδα με τα πρώτα 7 bytes μετα με τα επόμενα 7 κοκ? και πάλι μέσα στο αρχείο θα έχουμε και τον χρόνο εισαγωγής πέρα απο τις πινακίδες..pffffffff μπέρδεμα  :-\


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on May 30, 2012, 20:48:52 pm
Κι εγώ την σκέφτηκα την fread αλλα δεν καταλαβαίνω πως θα βρεί που είναι γραμμένη η πινακίδα.Θα πρέπει με μια loop να σαρωθεί όλο το αρχείο με διαδοχικές fread ? δηλάδη να συκρίνει την πινακίδα με τα πρώτα 7 bytes μετα με τα επόμενα 7 κοκ? και πάλι μέσα στο αρχείο θα έχουμε και τον χρόνο εισαγωγής πέρα απο τις πινακίδες..pffffffff μπέρδεμα  :-\

Ο τρόπο που περιέγραψες είναι απόλυτα σωστός. Δεν νομίζω, άλλωστε, πως μπορεί να γίνει και με κάποιον άλλο τρόπο...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: nastia on May 30, 2012, 21:26:55 pm
Κι εγώ την σκέφτηκα την fread αλλα δεν καταλαβαίνω πως θα βρεί που είναι γραμμένη η πινακίδα.Θα πρέπει με μια loop να σαρωθεί όλο το αρχείο με διαδοχικές fread ? δηλάδη να συκρίνει την πινακίδα με τα πρώτα 7 bytes μετα με τα επόμενα 7 κοκ? και πάλι μέσα στο αρχείο θα έχουμε και τον χρόνο εισαγωγής πέρα απο τις πινακίδες..pffffffff μπέρδεμα  :-\

χρειαζεται και επανάληψη?
δεν θα μετακινήσεις τον κέρσορα με την fseek και μετά με την fread θα διαβάσεις το αρχείο μέχρι να βρεις αυτό που έδωσε ο χρήστης???


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: aggeliki on May 31, 2012, 14:10:45 pm
κατά την είσοδο του αυτοκινήτου όταν λέει ότι θέλει το χρόνο εισόδου τι ακριβώς θέλει να του δώσει ο χρήστης;


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: mamalos on May 31, 2012, 16:26:44 pm
Και μια παρατήρηση για το σβήσιμο των records, που σήμερα με ρωτήσατε στο μάθημα:

Δεν υπάρχει ANSI-C τρόπος που να διαγράφεις random περιεχόμενο ενός αρχείου. Ο μόνος τρόπος είναι είτε OS oriented, είτε ο brute-force.

To OS-oriented το αναφέρω για λόγους πληρότητας, και η εφαρμογή που θα το χρησιμοποιεί ΔΕ θα τρέχει σε όλα τα συστήματα, μόνο σε αυτά που είναι POSIX. Τα υπόλοιπα ίσως να έχουν δικό τους τρόπο. Στην περίπτωση αυτή, χρησιμοποιεί κανείς την truncate ή την ftruncate systemcall.

Ο γενικός τρόπος, ο οποίος είναι και αυτός που θα πρέπει να χρησιμοποιήσετε, αν θέλετε να είστε ANSI-C σωστοί, είναι να ανοίξεις ένα δεύτερο αρχείο για γράψιμο και μέσα του να γράφεις μόνο τα records που χρειάζεσαι. Στο τέλος, κλείνεις και τα δύο αρχεία, οπότε το δεύτερο αρχείο περιέχει ό,τι και το πρώτο ΕΚΤΟΣ από τις εγγραφές που δε θέλεις. Μετά (όρεξη να'χεις), ανοίγεις και τα δύο αρχεία και αντιγράφεις το 2ο στο 1ο (με μία while και με κάποια συνάρτηση τύπου fwrite/fread). Τώρα, έχεις δύο αντίγραφα του αρχείου που επιθυμείς. Για να μηδενίσεις το 2ο αρχείο, θυμίσου ότι γίνεται με την fopen και κατάλληλο mode. Για διαγραφή του αρχείου, πάλι πάμε σε OS oriented λύση, οπότε δε χρειάζεται να το χρησιμοποιήσετε (για την εργασία).


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: thanospr on May 31, 2012, 17:09:46 pm
Πως γινεται να σβησουμε τα στοιχεια του τελευταιου αυτοκινητου που μπηκε στο parking αφου τα βαλουμε στην θεση απ αυτο που βγηκε?Εγω δεν το εκανα να τα σβηνει απλα αν μπει αλλο αυτοκινητο τα δεδομενα του θα γραφτουν πανω σ αυτα που ειναι για σβησιμο.Ξερει κανεις πως γινεται να τα σβησουμε στο ιδιο αρχειο?


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: theodoep on May 31, 2012, 22:15:39 pm
Οταν βρούμε το χρόνο σε δευτερόλεπτα που έχει περάσει από τα μεσάνυχτα της 1-1-1970 πως θα βρούμε την τωρινή ώρα?


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 01, 2012, 00:03:24 am
Οταν βρούμε το χρόνο σε δευτερόλεπτα που έχει περάσει από τα μεσάνυχτα της 1-1-1970 πως θα βρούμε την τωρινή ώρα?
Μα τα δευτερόλεπτα που έχουν περάσει απο την 1-1-1970 δίνουν την τωρινή ώρα. Αν εννοείς σε μια πιο ευπαρουσίαστη μορφή, τότε μπορείς να μετατρέψεις τα δευτερόλεπτα στην τωρινή ημερομηνία/ώρα(string) μέσω της συνάρτησης ctime. Για λεπτομέρεις/παράδειγμα: http://www.cplusplus.com/reference/clibrary/ctime/ctime/


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: nastia on June 01, 2012, 09:19:52 am
παιδια εμεις απο τη στιγμη που δεν περναμε μεσα δομες η πινακες, μπορουμε να χρησιμοποιησουμε fread kai fwrite??αυτες δεν ειναι μονο για ομαδες δεδομενων ?αφου εμεις στελνουμε μονο τις πινακιδες και το χρονο που μπηκε μεσα.!!και δεν ειναι ουτε σε πινακες ουτε σε δομες


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Xleboniaris on June 01, 2012, 14:43:40 pm
O αριθμός κυκλοφορίας του αυτοκινήτου και ο  χρόνος  εισόδου, πρέπει να αποτελούν στοιχεία μιας δομής ή όχι? Εννοώ τι είναι καλύτερο να βάλω αυτά τα δυο μεγέθη σε μια δομή και να τα μεταφέρω στο αρχείο σαν δομές ή να τα βάλω να καταχωρούνται μόνα τους? Και τον χρόνο εισόδου τον δίνουμε καλόντας την συνάρτηση time() για το αμάξι που μπαίνει, έτσι?


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: anchelon on June 01, 2012, 17:24:21 pm
παιδιά να φανταστώ αυτή είναι η τελευταία εργασία ετσι??


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on June 01, 2012, 17:32:08 pm
ναι


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: tpt on June 01, 2012, 19:38:32 pm
O αριθμός κυκλοφορίας του αυτοκινήτου και ο  χρόνος  εισόδου, πρέπει να αποτελούν στοιχεία μιας δομής ή όχι? Εννοώ τι είναι καλύτερο να βάλω αυτά τα δυο μεγέθη σε μια δομή και να τα μεταφέρω στο αρχείο σαν δομές ή να τα βάλω να καταχωρούνται μόνα τους? Και τον χρόνο εισόδου τον δίνουμε καλόντας την συνάρτηση time() για το αμάξι που μπαίνει, έτσι?







Εχω την ιδια απορια.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 02, 2012, 00:47:34 am
παιδια εμεις απο τη στιγμη που δεν περναμε μεσα δομες η πινακες, μπορουμε να χρησιμοποιησουμε fread kai fwrite??αυτες δεν ειναι μονο για ομαδες δεδομενων ?αφου εμεις στελνουμε μονο τις πινακιδες και το χρονο που μπηκε μεσα.!!και δεν ειναι ουτε σε πινακες ουτε σε δομες
Οι συναρτήσεις fread και fwrite δεν αφορούν μόνο δομές/πίνακες, αλλά και ξεχωριστές μεταβλητές...

O αριθμός κυκλοφορίας του αυτοκινήτου και ο  χρόνος  εισόδου, πρέπει να αποτελούν στοιχεία μιας δομής ή όχι? Εννοώ τι είναι καλύτερο να βάλω αυτά τα δυο μεγέθη σε μια δομή και να τα μεταφέρω στο αρχείο σαν δομές ή να τα βάλω να καταχωρούνται μόνα τους? Και τον χρόνο εισόδου τον δίνουμε καλόντας την συνάρτηση time() για το αμάξι που μπαίνει, έτσι?
Εχω την ιδια απορια.
Όπως θες το κάνεις, είτε με μια δομή είτε με δύο ξεχωριστές μεταβλητές. Και τον χρόνο εισόδου τον βρίσκεις καλώντας την συνάρτηση time, η οποία περιλαμβάνεται στην βιβλιοθήκη time.h... Για λεπτομέρειες/παράδειγμα: http://www.cplusplus.com/reference/clibrary/ctime/time/


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: LaBomba8 on June 02, 2012, 00:51:53 am
me tin fwrite pws akribws pernaw string sto arxeio?


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 02, 2012, 01:04:30 am
me tin fwrite pws akribws pernaw string sto arxeio?

Code:
int main ()
{
  FILE *pFile;
  char string[5]="data";
  pFile=fopen("myfile.bin","w+b");
  fwrite(string,sizeof(string),1,pFile);
  fclose(pFile);
  return 0;
}

http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: LaBomba8 on June 02, 2012, 01:28:24 am
thanx.. kai kati akoma
tin wra pou perase pws tin ipologizw??


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 02, 2012, 02:04:45 am
thanx.. kai kati akoma
tin wra pou perase pws tin ipologizw??

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


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Mr K on June 02, 2012, 09:55:17 am
Κι εγώ την σκέφτηκα την fread αλλα δεν καταλαβαίνω πως θα βρεί που είναι γραμμένη η πινακίδα.Θα πρέπει με μια loop να σαρωθεί όλο το αρχείο με διαδοχικές fread ? δηλάδη να συκρίνει την πινακίδα με τα πρώτα 7 bytes μετα με τα επόμενα 7 κοκ? και πάλι μέσα στο αρχείο θα έχουμε και τον χρόνο εισαγωγής πέρα απο τις πινακίδες..pffffffff μπέρδεμα  :-\

Μεγαλη προσοχη, δεν σαρωνει 7 και μετα τα 7 επομενα. Σκεψου οτι εχεις αποθηκευσει και τον χρονο σε μια μεταβλητη float. Βαλε τον δεικτη να πηδαει 4 θεσεις και μετα  να σαρωνει τα υπολοιπα 7 bytes..


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Mr K on June 02, 2012, 09:59:08 am
Πως γινεται να σβησουμε τα στοιχεια του τελευταιου αυτοκινητου που μπηκε στο parking αφου τα βαλουμε στην θεση απ αυτο που βγηκε?Εγω δεν το εκανα να τα σβηνει απλα αν μπει αλλο αυτοκινητο τα δεδομενα του θα γραφτουν πανω σ αυτα που ειναι για σβησιμο.Ξερει κανεις πως γινεται να τα σβησουμε στο ιδιο αρχειο?

Ρωτησα τον μαμαλακη και μας ειπε δυο τροπους.
1) αποθηκευεις και μια μεταβλητη ν την οποια αυξανεις κατα 1 καθε φορα που μπαινει ενα αμαξι και την μειωνεις κατα 1 καθε φορα που εξερχεται ενα αμαξι. Ειτε την αποθηκευεις στο αρχειο και το σαρωνεις μεχρι να βρεις την τελικη τιμη ν, ειτε τρεχεις το προγραμμα σου για ν φορες με μια for επαναληψη
2)Μετακινεις το EOF (τελος του αρχειου) στην θεση που θελεις. (Ο μαμαλακης δεν ηταν σιγουρος πως γινεται αυτο ειπε θα το ψαξει και θα μας πει την επομενη φορα..ναι αφου ληξει η διορια)...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 02, 2012, 12:40:52 pm
Ρωτησα τον μαμαλακη και μας ειπε δυο τροπους.
1) αποθηκευεις και μια μεταβλητη ν την οποια αυξανεις κατα 1 καθε φορα που μπαινει ενα αμαξι και την μειωνεις κατα 1 καθε φορα που εξερχεται ενα αμαξι. Ειτε την αποθηκευεις στο αρχειο και το σαρωνεις μεχρι να βρεις την τελικη τιμη ν, ειτε τρεχεις το προγραμμα σου για ν φορες με μια for επαναληψη
2)Μετακινεις το EOF (τελος του αρχειου) στην θεση που θελεις. (Ο μαμαλακης δεν ηταν σιγουρος πως γινεται αυτο ειπε θα το ψαξει και θα μας πει την επομενη φορα..ναι αφου ληξει η διορια)...

Ο Μαμαλάκης πρότεινε, επίσης, έναν τρίτο τρόπο:
3) Κάθε φορά που θες να αφαιρέσεις την καταχώρηση ενός αμαξιού που φεύγει, δημιουργείς ένα νέο αρχείο στο οποίο θα αντιγράψεις όλες τις καταχωρήσεις πέρα απο αυτήν που ήθελες να διαγράψεις. Έπειτα διαγράφεις το αρχικό αρχείο... (Αυτός ο τρόπος αποκλίνει, εν μέρει, από την εκφώνηση)


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on June 02, 2012, 17:54:36 pm
να ρωτησω κατι οταν περναμε το string στο αρχειο πρεπει να περναμε και την τιμη null που ειναι στο τελος ή οχι;


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Carnot on June 03, 2012, 00:18:23 am
Πώς διαβάζουμε από το αρχείο strings ή integers???


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Mr K on June 03, 2012, 10:33:55 am
να ρωτησω κατι οταν περναμε το string στο αρχειο πρεπει να περναμε και την τιμη null που ειναι στο τελος ή οχι;

Ναι και το \0 που θεωρειται οτι πιανει 1 δηλαδη αν π.χ οι πινακιδες εχουν 7 στοιχεια κανε εναν πινακα με 8


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Mr K on June 03, 2012, 10:41:01 am
Πώς διαβάζουμε από το αρχείο strings ή integers???

με την fread. Πας τον δεικτη στην αρχη του string που θελεις και γραφεις
fread([εδω το ονομα του string(μεταβλητη) στο οποιο θα αποθηκευσεις το string που θα φερεις απο το αρχειο, ΠΡΟΣΟΧΗ να εχει το συμβολο & μπροστα], [εδω το μεγεθος του string με τον τελεστη sizeof μπροστα],[εδω ποσες φορες θελεις να αρχισει να διαβασει και να φερει απο το καναλι ο δεικτης το μεγεθος που εγραψες πριν],[εδω το ονομα του δεικτη])

Συνολο 4 ορισματα..


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: thanospr on June 03, 2012, 11:16:29 am
να ρωτησω κατι οταν περναμε το string στο αρχειο πρεπει να περναμε και την τιμη null που ειναι στο τελος ή οχι;

Αν το κανεις με fputs αυτη η συνάρτηση στέλνει το string στο αρχείο χωρις το \0.Μετα ομως θα πρεπει στην fgets να βαλεις ως δευτερο ορισμα τα bytes που θελεις να περασεις +1 για να βαλει μονο του το \0.Δηλαδή στην συγκεκριμενη περιπτωση θα εχεις εναν char num[8]; και θα στειλει η fputs τα 7 bytes ενω στην fgets θα βαλεις σαν ορισμα να διαβασει 8 bytes και αυτην θα διαβασει 7 και στο τελευταιο θα βαλει \0.Οπως θελεις το κανεις αρκει να ξερεις εσυ και να προχωρας την βελονα αναλογα.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on June 03, 2012, 15:03:25 pm
ρε παιδια οταν περναω την ωρα στο αρχειο και μετα παω να δω αν οντως εχει περαστει, το ανοιγω και μου βγαζει κατι κινεζικα :-\ :???:

ο κωδικας μου (που εχει σχεση με την εισαγωγη των στοιχειων  του αυτοκινητου)
Code:
char licence_plate[8],*buffer;

    time_t seconds;
    FILE *fp;
    fp=fopen("C:\\Temp\\cars.txt","w+b");
    if(fp==NULL){
        printf("Error opening the file\n");
        return 1;
    }
 
            fgets(licence_plate,8,stdin);
            fwrite(licence_plate,sizeof(licence_plate),1,fp);
            seconds=time(NULL);
            buffer=ctime(&seconds);
            fwrite(buffer,sizeof(buffer),1,fp);



εδω παραθετω αλλο κωδικα που σκεφτηκα για να αντικαταστησω τη ctime αλλα και παλι βγαζω σκατα αποτελεσματα >:(

Code:
char licence_plate[8],buffer[24];

    time_t seconds;
    struct tm *local;
    FILE *fp;
    fp=fopen("C:\\Temp\\cars.txt","w+b");
    if(fp==NULL){
        printf("Error opening the file\n");
        return 1;
    }
 
            fgets(licence_plate,8,stdin);
            fwrite(licence_plate,sizeof(licence_plate),1,fp);
            seconds=time(NULL);
            local=localtime(&seconds);
            strftime(buffer,sizeof(buffer),"%a %b %d %T %Y",local);
            fwrite(buffer,sizeof(buffer),1,fp);

μπορειτε να μου πειτε τη μαλακια κανω;

υγ το αρχειο πρεπει να ειναι .bin ή .txt; 


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: thanospr on June 03, 2012, 15:19:49 pm
Βαλε fp=fopen("C:/Temp/cars.bin","w+b"); και πες αν εγινε κατι.Ουτε τις πινακιδες δεν σου δείχνει?Τα δευτερολεπτα για να τα δεις πρέπει να τα ανοιξεις με καποιο binary viewer για να δεις ολα πως αποθηκευτηκαν byte byte.Ο Κορτεσης μας ειπε οτι αν τα αποθηκευσεις ως txt επειδη θα αποθηκευει κι αλλα και δεν θα ξερεις που βρισκονται τα δεδομενα σου για να τα ξαναδιαβασεις.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 03, 2012, 15:55:07 pm
ρε παιδια οταν περναω την ωρα στο αρχειο και μετα παω να δω αν οντως εχει περαστει, το ανοιγω και μου βγαζει κατι κινεζικα :-\ :???:

μπορειτε να μου πειτε τη μαλακια κανω;

υγ το αρχειο πρεπει να ειναι .bin ή .txt; 

Όταν χειρίζεσαι ένα αρχείο ως δυαδικό(binary) τότε, αν πας να το ανοίξεις ως αρχείο κειμένου (πχ με το notepad), μόνο οι χαρακτήρες θα φαίνονται "κανονικά". Τα νούμερα θα στα δείχνει "κινέζικα". Όταν ένα αρχείο είναι δυαδικό τότε ο μόνος τρόπος για να δεις "ατόφιο" το περιεχόμενο του είναι πχ με την εντολή hexdump (για UNIX περιβάλλοντα) ή με κάποιο πρόγραμμα(που είναι φτιαγμένο ειδικά και για αυτόν τον σκοπό) σε Windows (μπορεί να υπάρχει και στα Windows κάποια εντολή για το cmd που να κάνει την ίδια δουλειά, και να μου διαφεύγει)...

Επίσης, το μόνο πράμα που επηρεάζει η κατάληξη του αρχείου είναι με ποιό πρόγραμμα θα ανοίγουν (by default) τα αρχεία. Αν, για παράδειγμα, αλλάξεις την κατάληξη ενός αρχείου .txt σε .mp3, το μόνο πρόβλημα που θα έχεις είναι ότι αν επιχειρήσεις να ανοίξεις το αρχείο θα ανοίξει (by default πάντα) με τον Windows Media Player. Αν όμως διαλέξεις να ανοίξεις το .mp3 συγκεκριμένα με το notepad, τότε θα σου δείξει κανονικά το περιεχόμενο του...

Ελπίζω να μην σε μπέρδεψα παρπάνω. Αν κάποιο από αυτά που λέω είναι λάθος, ας με διορθώσει κάποιος...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: manos on June 03, 2012, 16:16:01 pm
char pinakida[7]; 
int k=0;
char p[7];   
FILE *fp;
fp=fopen("aytokinhta","w+b");
 
char c;
while (1){
     printf("Pieste to plhktro c gia eisodo neoy aytokinhtoy sto parking\n");
     printf("Pieste to plhktro d gia eksodo aytokinhtoy apo to parking\n");
     printf("Pieste allo plhktro  gia na termatistei h eisodos kai h eksodos aytokinhtwn\n");
     c=getch();
     if (c=='C' || c=='c'){
               
         printf("Dwse pinakida\n");       
         scanf("%s",&pinakida);
         fwrite(pinakida,sizeof pinakida,1,fp);
         k++;
         } 
     else {       
          break;
          }
    } 
fread(p,7,1,fp);
 
printf(" %s\n",p);

Θέλω να περασω την πρώτη πινακίδα στον πίνακα p και να την εκτυπωσω.Εδώ το p το βγάζει κενό ξέρει κανείς γιατί?


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Exomag on June 03, 2012, 16:34:00 pm
Θέλω να περασω την πρώτη πινακίδα στον πίνακα p και να την εκτυπωσω.Εδώ το p το βγάζει κενό ξέρει κανείς γιατί?

Μία διόρθωση που θα έκανα είναι να βγάλω το & στην scanf. Δηλαδή:
Code:
scanf("%s",pinakida);
Δοκίμασε το. Δε ξέρω κατά πόσο αυτό θα διορθώσει το πρόβλημα που έχεις ;)

ΥΣ: Μπορείς να χρησιμοποιείς τα κατάλληλα tags όταν θέλεις να γράψεις κώδικα, για να είναι ο κώδικας πιο ευανάγνωστος και copy-friendly...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Sub-Zero on June 03, 2012, 16:41:34 pm
Μια ερώτηση παιδιά σχετικά με την έξοδο του αυτοκινήτου...Υποτίθεται ότι με την fread και strcmp θα βρούμε και θα αντικαταστήσουμε τη πινακίδα που έδωσε ο χρήστης, αλλά επειδή και οι χρόνοι είναι καταχωρημένοι δίπλα απ την πιναικίδα πως λέμε στο πρόγραμμα να τους προσπεράσει;


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Niobe on June 03, 2012, 18:04:48 pm
η ctime επιστρεφει τον χρονο ως στρινγκ η ως ιντ?? κοιταξα στο cplusplus αλλα δεν καταλαβαινω σαν τι πρεπει να το δηλωσω..

Υ.Γ. τα στοιχεια καθε αμαξιου τα εχω σε δομη που την περναω στο αρχειο.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on June 03, 2012, 18:35:52 pm
να ρωτησω κατι πανω στη ctime
αφου μετατρεπει την ωρα στη μορφη Www Mmm dd hh:mm:ss yyyy
πως θα βρω μετα ποσες ωρες εμεινε το αμαξι στο γκαραζ;
πως γινεται να περασω κατευθειαν το αποτελεσμα της time που ειναι αριθμος;
 
επισης μεσα στο αρχειο τα δεδομενα τα θεωρουμε ως ενα 2x2 πινακα
πχ ασδ1234 ωρα
     ηγε5678 ωρα
    ...
ή ως ενα "κατεβατο" απο string;
πχ ασδ1234
     ωρα
     ηγε5678
     ωρα
     ...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: thanospr on June 03, 2012, 20:07:51 pm
να ρωτησω κατι πανω στη ctime
αφου μετατρεπει την ωρα στη μορφη Www Mmm dd hh:mm:ss yyyy
πως θα βρω μετα ποσες ωρες εμεινε το αμαξι στο γκαραζ;
πως γινεται να περασω κατευθειαν το αποτελεσμα της time που ειναι αριθμος;
 
επισης μεσα στο αρχειο τα δεδομενα τα θεωρουμε ως ενα 2x2 πινακα
πχ ασδ1234 ωρα
     ηγε5678 ωρα
    ...
ή ως ενα "κατεβατο" απο string;
πχ ασδ1234
     ωρα
     ηγε5678
     ωρα
     ...

FILE *fp;
int seconds;
seconds=time(NULL);
fwrite(&seconds,sizeof seconds,1,fp);
Και μετα την ωρα που ειναι να βγει καλεις ξανα την time με ορισμα NULL την καταχωρεις σε μια αλλη μεταβλητη και τα αφαιρεις.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Jim D. Ace on June 03, 2012, 20:09:14 pm
να ρωτησω κατι πανω στη ctime
αφου μετατρεπει την ωρα στη μορφη Www Mmm dd hh:mm:ss yyyy
πως θα βρω μετα ποσες ωρες εμεινε το αμαξι στο γκαραζ;
πως γινεται να περασω κατευθειαν το αποτελεσμα της time που ειναι αριθμος;
 
επισης μεσα στο αρχειο τα δεδομενα τα θεωρουμε ως ενα 2x2 πινακα
πχ ασδ1234 ωρα
     ηγε5678 ωρα
    ...
ή ως ενα "κατεβατο" απο string;
πχ ασδ1234
     ωρα
     ηγε5678
     ωρα
     ...

FILE *fp;
int seconds;
seconds=time(NULL);
fwrite(&seconds,sizeof seconds,1,fp);
Και μετα την ωρα που ειναι να βγει καλεις ξανα την time με ορισμα NULL την καταχωρεις σε μια αλλη μεταβλητη και τα αφαιρεις.

thanks  :) την καταχωρουσα σαν time_t και μετα δεν μπορουσα να την περασω...


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Thunderjohn on June 03, 2012, 21:05:45 pm
Μια ερώτηση για την τελευταία περίπτωση στην έξοδο από την επανάληψη, όταν θα τυπώνουμε τους αριθμούς κυκλοφορίας πειράζει αν θα εμφανίζετε πάνω από 1 φορές ο αριθμός του τελευταίου αυτοκινήτου(εφόσον έχει αντικαταστήσει τις τιμές των αυτοκινήτων που έχουν φύγει)?

Edit: Άκυρο το έφτιαξα ώστε να μην τις εμφανίζει πάνω από 1 φορές. Άν θέλει κανείς λεπτομέριες ας ρωτήσει  8))


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Locke on June 03, 2012, 22:27:05 pm
Πώς γίνεται να συγκρίνω την πινακίδα ενός αυτοκινήτου με αυτά που έχω ήδη στο αρχέιο με την strncmp; Πρέπει να μεταφέρω μία μία τις πινακίδες από το αρχείο σε έναν πίνακα και να χρησιμοποιήσω αυτόν για τη σύγκριση; Δεν γίνεται αμέσως από το αρχείο;


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: Thunderjohn on June 03, 2012, 22:34:15 pm
Πώς γίνεται να συγκρίνω την πινακίδα ενός αυτοκινήτου με αυτά που έχω ήδη στο αρχέιο με την strncmp; Πρέπει να μεταφέρω μία μία τις πινακίδες από το αρχείο σε έναν πίνακα και να χρησιμοποιήσω αυτόν για τη σύγκριση; Δεν γίνεται αμέσως από το αρχείο;
Έτσι όπως το είπες, αν και η διαδικασία γίνεται πιο εύκολη με τη χρήση δόμων.


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: heavy melon on June 10, 2012, 15:18:12 pm
μπορεί κάποιος να ανεβάσει μια εργασία που τρέχει?
Γιατί ο Κορτέσης δεν έχει ανεβάσει ακόμη για G,F


Title: Re: [Δομημένος Πρ.] Εργασία G
Post by: skipper on June 12, 2012, 01:11:57 am
μπορεί κάποιος να ανεβάσει μια εργασία που τρέχει?
Γιατί ο Κορτέσης δεν έχει ανεβάσει ακόμη για G,F

+1