madas Δημοσ. 14 Απριλίου 2011 Share Δημοσ. 14 Απριλίου 2011 παιδια εχω για την σχολη την παρακατω ασκηση Στην εργασία αυτή θα υλοποιήσετε ένα απλοποιημένο σύστημα κράτησης αεροπορικών εισιτηρίων. Για κάθε πτήση θα αποθηκεύονται ο κωδικός της πτήσης, η αφετηρία, ο προορισμός, η ώρα αναχώρησης, η ώρα άφιξης, τιμή του εισιτηρίου, ο τύπος του αεροπλάνου που πραγματοποιεί τη συγκεκριμένη πτήση, το πλήθος των θέσεων του αεροπλάνου καθώς και το πλήθος των κρατήσεων που έχουν γίνει. Βασική υπόθεση της εργασίας είναι ότι ο χρήστης θα έχει καθορίσει το κωδικό της πτήσης που ενδιαφέρεται. Στην περίπτωση που δεν υπάρχει απευθείας πτήση μεταξύ δύο αεροδρομίων ο χρήστης θα δίνει όλες τους κωδικούς των ενδιάμεσων πτήσεων. Το σύστημα σε αυτή τη περίπτωση θα πρέπει να ελέγχει την ορθότητα της εισόδου του χρήστη. Π.χ ο προορισμός της πρώτης πτήσης πρέπει να ίδιος με την αφετηρία της δεύτερης ή η ώρα αναχώρησης της δεύτερης πρέπει να αργότερα από την ώρα της άφιξης της πρώτης πτήσης. Αν τα δεδομένα εισόδου είναι ορθά, στη συνέχεια ελέγχεται αν υπάρχουν διαθέσιμες θέσεις σε όλες τις πτήσεις που εισήγαγε ο χρήστης. Αν και αυτός ο έλεγχος είναι θετικός, γίνεται η δέσμευση των θέσεων στις πτήσεις. Για κάθε επιβάτη η εταιρεία θα πρέπει να αποθηκεύει τα προσωπικά του στοιχεία (ονοματεπώνυμο, αριθμός διαβατηρίου, εθνικότητα, διεύθυνση, τηλέφωνο) καθώς και τις πτήσεις στις οποίες θα ταξιδεύσει. Στην περίπτωση που δεν υπάρχουν διαθέσιμες θέσεις σε κάποια/ες πτήσεις που εισήγαγε ο χρήστης του συστήματος, ο χρήστης μπαίνει σε ουρά αναμονής σε κάθε μία από τις πτήσεις που ενδιαφέρεται ακόμα και σε αυτές που έχουν διαθέσιμες θέσεις. Στην περίπτωση που κάποιος επιβάτης ακυρώσει το ταξίδι του, θα ελέγχονται οι ουρές αναμονής των πτήσεων που ακυρώνονται. Σε κάθε ουρά θα γίνεται αναζήτηση για τον «αρχαιότερο» χρήστη για τον οποίο υπάρχουν διαθέσιμες θέσεις σε όλες τις πτήσεις του ταξιδιού του. Αν η αναζήτηση είναι επιτυχής, ο χρήστης διαγράφεται από όλες τις ουρές αναμονής στις οποίες βρίσκεται και στη συνέχεια γίνεται δέσμευση των θέσεων για κάθε μία πτήση του. Συνοπτικά το σύστημα θα πρέπει να υποστηρίζει την προσθήκη νέων πτήσεων, τη διαγραφή πτήσεων, την εκτύπωση των λεπτομερειών μίας πτήσης, ενός επιβάτη, τη κράτηση και ακύρωση θέσεων. Σε κάθε περίπτωση θα πρέπει να επιλέξετε τις κατάλληλες δομές δεδομένων που ελαχιστοποιούν τον απαιτούμενο χώρο για την αποθήκευση των δεδομένων του συστήματος. Εχω καταλαβει στο περιπου τι πρεπει ν κανω. Αυτο που θα ηθελα να ρωτησω ειναι που θα αποθηκευσω τις πτησεις και ολες τις πληροφοριες τους??? θα τα αποθηκευσω σε λιστες???(καθως θελει προσθηκη, διαγραφη , αναζητηση). και αν ναι μπορει να μου στειλει καποιος καποιο παραδειγμα πως το περιπου γινεται αυτο??? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
fotis4u Δημοσ. 14 Απριλίου 2011 Share Δημοσ. 14 Απριλίου 2011 Σε τι σημείο έχεις φτάσει την άσκηση σου ? Ανέβασε μέχρι πιο σημείο έχεις φτάσει το κώδικά σου, ώστε να σε βοηθήσουμε για το τι πρέπει να κάνεις στην συνέχεια (εκτός και εάν θέλεις ετοιματζίδικα πράγματα). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 14 Απριλίου 2011 Μέλος Share Δημοσ. 14 Απριλίου 2011 Σε τι σημείο έχεις φτάσει την άσκηση σου ? Ανέβασε μέχρι πιο σημείο έχεις φτάσει το κώδικά σου, ώστε να σε βοηθήσουμε για το τι πρέπει να κάνεις στην συνέχεια (εκτός και εάν θέλεις ετοιματζίδικα πράγματα). Κωδικα δεν εχω γραψει ακομη καθως θελω να βρω κατι πανω σε λιστες(ειτε θεωρια, ειτε παραδειγματα) ετσι ωστε να αρχισω να μπαινω στο νοημα. οποτε μαλλον κατι ετοιματζιδικο στην παρουσα φαση θα με βοηθουσε για να δω πως λειτουργουν ολα αυτα στην πραξη. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
fotis4u Δημοσ. 14 Απριλίου 2011 Share Δημοσ. 14 Απριλίου 2011 Συμβουλή μου είναι ξεκίνα να υλοποιείς τον κώδικα (ορίσματα, τύπους, default τιμές) και με τις απλές συναρτήσεις (ελέγχους κτλπ.) και από εκεί και πέρα σε βοηθάμε. Γιατί τώρα τα ερωτήματά σου είναι πολύ γενικά και όχι ειδικά. Θα ξεκινήσω αν την υλοποιώ και εγώ και σε όποιο σημείο κολλήσεις post-αρε να σου απαντήσουμε. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 14 Απριλίου 2011 Μέλος Share Δημοσ. 14 Απριλίου 2011 Συμβουλή μου είναι ξεκίνα να υλοποιείς τον κώδικα (ορίσματα, τύπους, default τιμές) και με τις απλές συναρτήσεις (ελέγχους κτλπ.) και από εκεί και πέρα σε βοηθάμε. Γιατί τώρα τα ερωτήματά σου είναι πολύ γενικά και όχι ειδικά. Θα ξεκινήσω αν την υλοποιώ και εγώ και σε όποιο σημείο κολλήσεις post-αρε να σου απαντήσουμε. Καποιο link σχετικα με λιστες δεν παιζει?????? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
virxen75 Δημοσ. 14 Απριλίου 2011 Share Δημοσ. 14 Απριλίου 2011 Καποιο link σχετικα με λιστες δεν παιζει?????? Link Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 17 Απριλίου 2011 Μέλος Share Δημοσ. 17 Απριλίου 2011 παιδια ευχαριστω πολυ για ολες τις απαντησεις σας αλλα ακομη δεν εχω καταφερει να βγαλω ακρη... :( ας το παρω απο την αρχη το προβλημα. εχω αυτο το sruct και εχω ορισει πανω 8 μεταβλητες δομης >struct hellenic_airways/*Δημιουργία δομής που περιέχει τα στοιχεία της κάθε πτήσης.*/ { string kwdikos;//Κωδικός πτήσης string afetiria;//Αφετηρία πτήσης string proorismos;//Προορισμός πτήσης float anaxwrisi;//Ώρα αναχώρησης float afiksi;//Ώρα άφιξης int timi;//Τιμή εισιτηρίου string tupos;//Τύπος αεροπλάνου int plithosThesewn;//Πλήθος θέσεων int plithosKratisewn;//Πλήθος κρατήσεων }; struct hellenic_airways ptisi1,ptisi2,ptisi3,ptisi4,ptisi5,ptisi6,ptisi7,ptisi8;/*Ορισμός μεταβλητών δομής.*/ αυτο που θελω να κανω ειναι να μπορω κατα τη διαρκεια του προγραμματος να μπορω να σβηνω η να φτιαχνω νεες πτησεις. με ποιο τροπο μπορω να το κανω αυτο?????? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 18 Απριλίου 2011 Μέλος Share Δημοσ. 18 Απριλίου 2011 καμια βοηθεια κανεις?????????? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
MitsakosGR Δημοσ. 18 Απριλίου 2011 Share Δημοσ. 18 Απριλίου 2011 παιδια ευχαριστω πολυ για ολες τις απαντησεις σας αλλα ακομη δεν εχω καταφερει να βγαλω ακρη... :( ας το παρω απο την αρχη το προβλημα. εχω αυτο το sruct και εχω ορισει πανω 8 μεταβλητες δομης >struct hellenic_airways/*Δημιουργία δομής που περιέχει τα στοιχεία της κάθε πτήσης.*/ { string kwdikos;//Κωδικός πτήσης string afetiria;//Αφετηρία πτήσης string proorismos;//Προορισμός πτήσης float anaxwrisi;//Ώρα αναχώρησης float afiksi;//Ώρα άφιξης int timi;//Τιμή εισιτηρίου string tupos;//Τύπος αεροπλάνου int plithosThesewn;//Πλήθος θέσεων int plithosKratisewn;//Πλήθος κρατήσεων }; struct hellenic_airways ptisi1,ptisi2,ptisi3,ptisi4,ptisi5,ptisi6,ptisi7,ptisi8;/*Ορισμός μεταβλητών δομής.*/ αυτο που θελω να κανω ειναι να μπορω κατα τη διαρκεια του προγραμματος να μπορω να σβηνω η να φτιαχνω νεες πτησεις. με ποιο τροπο μπορω να το κανω αυτο?????? Ένας απλός τρόπος θα ήταν να αποθηκεύεις τις πτήσεις σου σε ένα πίνακα τύπου hellenic_airways. Αυτό έχει περιορισμό όμως γιατί πρέπει να ορίζεις από την αρχή τις μέγιστες πτήσεις που θα έχεις (υπερβολικός χώρος στην μνήμη χωρίς λόγο και περιορισμός μεγέθους) ή να αλλάζεις κάθε φορά που προσθέτεις-αφαιρείς πτήση τον μέγεθος του πίνακα (πιο δυναμικό αλλά καταναλώνει περισσότερους πόρους συστήματος). Αν σου επιτρέπεται μπορείς να χρησιμοποιήσεις το vector από το STL της C++ όπου υπάρχουν έτοιμες όλες οι λειτουργίες εισαγωγής και διαγραφής και η αναζήτηση είναι πολύ εύκολη. Αν θέλεις μπορείς να χρησιμοποιήσεις λίστα αλλά αν σου επιτρέπεται η STL τότε καλύτερα vector. Για λίστα πρέπει να βάλεις άλλες δύο μεταβλητές hellenic_airways* prev;//κρατάει το προηγούμενο item στη λίστα (ή null αν είναι πρώτο) hellenic_airways* next;//κρατάει το επόμενο item στη λίστα (ή null αν είναι τελευταίο) και φυσικά να φτιάξεις τα αντίστοιχα functions. Αφού είσαι σε C++ γιατί δεν δουλεύεις με Classes καλύτερα; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 18 Απριλίου 2011 Μέλος Share Δημοσ. 18 Απριλίου 2011 Ένας απλός τρόπος θα ήταν να αποθηκεύεις τις πτήσεις σου σε ένα πίνακα τύπου hellenic_airways. Αυτό έχει περιορισμό όμως γιατί πρέπει να ορίζεις από την αρχή τις μέγιστες πτήσεις που θα έχεις (υπερβολικός χώρος στην μνήμη χωρίς λόγο και περιορισμός μεγέθους) ή να αλλάζεις κάθε φορά που προσθέτεις-αφαιρείς πτήση τον μέγεθος του πίνακα (πιο δυναμικό αλλά καταναλώνει περισσότερους πόρους συστήματος). Αν σου επιτρέπεται μπορείς να χρησιμοποιήσεις το vector από το STL της C++ όπου υπάρχουν έτοιμες όλες οι λειτουργίες εισαγωγής και διαγραφής και η αναζήτηση είναι πολύ εύκολη. Αν θέλεις μπορείς να χρησιμοποιήσεις λίστα αλλά αν σου επιτρέπεται η STL τότε καλύτερα vector. Για λίστα πρέπει να βάλεις άλλες δύο μεταβλητές hellenic_airways* prev;//κρατάει το προηγούμενο item στη λίστα (ή null αν είναι πρώτο) hellenic_airways* next;//κρατάει το επόμενο item στη λίστα (ή null αν είναι τελευταίο) και φυσικά να φτιάξεις τα αντίστοιχα functions. Αφού είσαι σε C++ γιατί δεν δουλεύεις με Classes καλύτερα; Σε ευχαριστω για το ενδιαφερον!!! Η εργασια πρεπει να γινει με λιστα, αλλα εγω δεν εχω αρκετες γνωσεις για αυτο. μηπως μπορεις να γινεις λιγο πιο αναλυτικος για τον τροπο με τον οποιο θα το υλοποιησω αυτο??? τα functions για δημιουργια και διαγραφη κομβου τα εχω αλλα δυστυχως δεν ξερω πως να τα συνδεσω ολα αυτα :unsure: για αυτο χρειαζομαι μια βοηθεια... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
MitsakosGR Δημοσ. 18 Απριλίου 2011 Share Δημοσ. 18 Απριλίου 2011 Για να φτιάξεις μία λίστα χρειάζεσαι αντικείμενα τα οποία θα λειτουργούν ως κόμβοι της λίστας. Στην προκειμένη περίπτωση το struct που έχεις (hellenic_airways). Κάθε κόμβος πρέπει να δείχνει στον προηγούμενό του και στον επόμενό του (για αυτό και η προσθήκη των pointers στο προηγούμενό μου post). Αυτό που πρέπει να κάνεις είναι να δημιουργήσεις functions μες τις οποίες θα δημιουργείς καινούργιους κόμβους, αντιστοιχείς τον κόμβο μέσα στην λίστα (αρχή, τέλος, μέση ανάλογα που χρειάζεται) και να διαγράφεις κόμβους. Όλα αυτά γίνονται με τους pointers μέσα στο κάθε αντικείμενο. Πχ αν θέλεις να προσθέσεις ένα κόμβο πας στον προηγούμενό του και στον pointer next κάνεις ένα new hellenic_airways (αν μιλάμε για τον τελευταίο πάντα, καταλαβαίνεις ότι αν είναι ενδιάμεσος θα πρέπει να αλλάξεις τα prev και next και στα γειτονικά του). Μελέτησε λίγο τον κώδικα του virxen75 για να καταλάβεις πως λειτουργεί και μετά θα δεις ότι είναι, σχετικά, απλό. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 19 Απριλίου 2011 Μέλος Share Δημοσ. 19 Απριλίου 2011 Για να φτιάξεις μία λίστα χρειάζεσαι αντικείμενα τα οποία θα λειτουργούν ως κόμβοι της λίστας. Στην προκειμένη περίπτωση το struct που έχεις (hellenic_airways). Κάθε κόμβος πρέπει να δείχνει στον προηγούμενό του και στον επόμενό του (για αυτό και η προσθήκη των pointers στο προηγούμενό μου post). Αυτό που πρέπει να κάνεις είναι να δημιουργήσεις functions μες τις οποίες θα δημιουργείς καινούργιους κόμβους, αντιστοιχείς τον κόμβο μέσα στην λίστα (αρχή, τέλος, μέση ανάλογα που χρειάζεται) και να διαγράφεις κόμβους. Όλα αυτά γίνονται με τους pointers μέσα στο κάθε αντικείμενο. Πχ αν θέλεις να προσθέσεις ένα κόμβο πας στον προηγούμενό του και στον pointer next κάνεις ένα new hellenic_airways (αν μιλάμε για τον τελευταίο πάντα, καταλαβαίνεις ότι αν είναι ενδιάμεσος θα πρέπει να αλλάξεις τα prev και next και στα γειτονικά του). Μελέτησε λίγο τον κώδικα του virxen75 για να καταλάβεις πως λειτουργεί και μετά θα δεις ότι είναι, σχετικά, απλό. την γενικη ιδεα πιστευω πως την καταλαβα αφου μελετησα και τον κωδικα του virxen75. αυτο που δεν μπορω να καταλαβω ακομη ειναι το πως θα βαλω τις 8 πτησεις που θελω. θα φτιαξω 8 struct και μετα αναλογα με την επιλογη θα διαγραφω και θα φτιαχνω νεα??? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
MitsakosGR Δημοσ. 19 Απριλίου 2011 Share Δημοσ. 19 Απριλίου 2011 Όχι. Θα έχεις στην main σου (ή σε κάποια κλάση, ανάλογα τι σε βολεύει) ένα pointer τύπου hellenic_airways που θα δείχνει το πρώτο στοιχείο της λίστας. >hellenic_airways* listStart; Το στοιχείο αυτό θα του δώσεις την τιμή Null έτσι ώστε να ξέρεις ότι δεν δείχνει πουθενά.Γενικά όλους τους δείκτες μέσα στη λίστα θα τους ορίζεις από την αρχή σε Null ώστε να μπορείς να ελέγχεις αν δείχνουν σε κάποιο πραγματικό κόμβο ή σε τυχαία δεδομένα της μνήμης. Μετά θα φτιάξεις μία function η οποία δημιουργεί ένα αντικείμενο τύπου hellenic_airways, αρχικοποιεί το αντικείμενο (πχ θέτει τιμές στο next και prev =null) και σου επιστρέφει ένα δείκτη προς το αντικείμενο αυτό. >hellenic_airways* createNode(); Αυτό το αντικείμενο τώρα πρέπει να το βάλεις στην λίστα σου. Για να το κάνεις αυτό θα πρέπει να φτιάξεις άλλες function οι οποίες να παρέχουν τις απαραίτητες λειτουργίες που χρειάζεσαι, πχ >bool insertNodeAtEnd(hellenic_airways* startOfList,hellenic_airways* node); //Δέχεται σαν όρισμα έναν δείκτη στην αρχή της λίστας και ένα δείκτη σε ένα κόμβο // και αντιστοιχεί τον κόμβο αυτό στο τέλος της λίστας. Επιστρέφει true αν πέτυχε και false αν απέτυχε. Μέσα στην insertNodeAtEnd() θα κάνεις όλες τις απαραίτητες ενέργειες για να αντιστοιχίσεις τον κόμβο στο τέλος της λίστας. Για το συγκεκριμένο παράδειγμα δηλαδή θα πρέπει: 1. Να μετακινηθείς στο τέλος της λίστας (μεταπηδώντας από τον ένα κόμβο στον άλλο -μέσω του hellenic_airways* next;- μέχρι να βρεις έναν κόμβο να δείχνει σε null τιμή) 2. Να ορίσεις τον τελευταίο αυτό κόμβο να δείχνει στο node που έρχεται σαν όρισμα (μέσω της τιμής next) 3. Να ορίσεις στο node-όρισμα την μεταβλητή prev να δείχνει στο τελευταίο στοιχείο της λίστας (βήματος 1) Αντίστοιχα θα φτιάξεις τις υπόλοιπες λειτουργίες που χρειάζεσαι. Ελπίζω να σε βοήθησα. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
madas Δημοσ. 20 Απριλίου 2011 Μέλος Share Δημοσ. 20 Απριλίου 2011 Όχι. Θα έχεις στην main σου (ή σε κάποια κλάση, ανάλογα τι σε βολεύει) ένα pointer τύπου hellenic_airways που θα δείχνει το πρώτο στοιχείο της λίστας. >hellenic_airways* listStart; Το στοιχείο αυτό θα του δώσεις την τιμή Null έτσι ώστε να ξέρεις ότι δεν δείχνει πουθενά.Γενικά όλους τους δείκτες μέσα στη λίστα θα τους ορίζεις από την αρχή σε Null ώστε να μπορείς να ελέγχεις αν δείχνουν σε κάποιο πραγματικό κόμβο ή σε τυχαία δεδομένα της μνήμης. Μετά θα φτιάξεις μία function η οποία δημιουργεί ένα αντικείμενο τύπου hellenic_airways, αρχικοποιεί το αντικείμενο (πχ θέτει τιμές στο next και prev =null) και σου επιστρέφει ένα δείκτη προς το αντικείμενο αυτό. >hellenic_airways* createNode(); Αυτό το αντικείμενο τώρα πρέπει να το βάλεις στην λίστα σου. Για να το κάνεις αυτό θα πρέπει να φτιάξεις άλλες function οι οποίες να παρέχουν τις απαραίτητες λειτουργίες που χρειάζεσαι, πχ >bool insertNodeAtEnd(hellenic_airways* startOfList,hellenic_airways* node); //Δέχεται σαν όρισμα έναν δείκτη στην αρχή της λίστας και ένα δείκτη σε ένα κόμβο // και αντιστοιχεί τον κόμβο αυτό στο τέλος της λίστας. Επιστρέφει true αν πέτυχε και false αν απέτυχε. Μέσα στην insertNodeAtEnd() θα κάνεις όλες τις απαραίτητες ενέργειες για να αντιστοιχίσεις τον κόμβο στο τέλος της λίστας. Για το συγκεκριμένο παράδειγμα δηλαδή θα πρέπει: 1. Να μετακινηθείς στο τέλος της λίστας (μεταπηδώντας από τον ένα κόμβο στον άλλο -μέσω του hellenic_airways* next;- μέχρι να βρεις έναν κόμβο να δείχνει σε null τιμή) 2. Να ορίσεις τον τελευταίο αυτό κόμβο να δείχνει στο node που έρχεται σαν όρισμα (μέσω της τιμής next) 3. Να ορίσεις στο node-όρισμα την μεταβλητή prev να δείχνει στο τελευταίο στοιχείο της λίστας (βήματος 1) Αντίστοιχα θα φτιάξεις τις υπόλοιπες λειτουργίες που χρειάζεσαι. Ελπίζω να σε βοήθησα. man σ ευχαριστω πολυ για την βοηθεια (και την υπομονη που διεχνεις :D ). μελετησα τον κωδικα του virxen75 και εγραψα την insert μονο για τον κωδικο της πτησης >void insert( HellenicAirwaysPointer *s, string code ) /*η συνάρτηση αυτή μας επιτρέπει να τοποθετούμε ένα νέο κόμβο στην λίστα μας και μάλιστα ταξινομημένα!!!*/ { HellenicAirwaysPointer newPtr, previousPtr, currentPtr;/* ορίζει 3 δείκτες σε δομή listNode*/ newPtr = (HellenicAirwaysPointer) malloc( sizeof( HellenicAirways ) );/*χρησιμοποιούμε την malloc για να δεσμεύσουμε μνήμη τόσων bytes όσο και το μέγεθος της δομής ListNode*/ if ( newPtr != NULL ) { /* ελέγχουμε αν η malloc δέσμευσε μνήμη για τον νέο κόμβο της λίστας μας*/ /*βάζω τιμές στα πεδία του νέου κόμβου της λίστας.*/ newPtr->kwdikos = code;/*πεδίο data παίνει την τιμή της παραμέτρου που πέρασε από το κεντρικό πρόγραμμα καλώντας την συνάρτηση αυτή.δηλαδή τον αριθμό που πληκτρολόγησα*/ newPtr->nextPtr = NULL;/*πεδίο nextPtr ορίζω να δείχνει στο NULL*/ previousPtr = NULL;/*δίνω τιμή NULL στον δείκτη previousPtr*/ currentPtr = *s;/*δίνω στον δείκτη currentPtr την τιμή του δείκτη που πέρασε σαν παράμετρος από το κεντρικό πρόγραμμα*/ while ( currentPtr != NULL && code > currentPtr->kwdikos ) { /*όσο ο δείκτης currentPtr δεν είναι NULL ή ο αριθμός που πληκτρολόγησα και πέρασα σαν παράμετρο στην συνάρτηση αυτή είναι μεγαλύτερη από την τιμή του πεδίου data του τρέχον κόμβου της λίστας. κάνε ....*/ previousPtr = currentPtr;/*κάνω το δείκτη previousPtr να δείχνει στον τρέχων κόμβο*/ currentPtr = currentPtr->nextPtr;/*και το δείκτη currentPtr να δείχνει στον επόμενο κόμβο*/ }/*Εδώ ουσιαστικά διατρέχουμε την λίστα μέχρι να βρούμε σε πια θέση πρέπει να μπει ο καινούργιος κόμβος έτσι ώστε να είναι ταξινομημένη η λίστα μας*/ if ( previousPtr == NULL ) { /*Αν μπει μετά τον τελευταίο τότε*/ newPtr->nextPtr = *s; *s = newPtr; } else { previousPtr->nextPtr = newPtr;/*Αφου βρήκα ανάμεσα σε ποιους κόμβους θα μπει ο νέος βάζω τον δείκτη του αριστερά κόμβου να δέιχνει στον νέο κόμβο*/ newPtr->nextPtr = currentPtr;/*και το δείκτη του νέου κόμβου να δείχνει στον δεξιά κόμβου*/ /*με τον όρο αριστερός και δεξιός κόμβος εννοώ τους κόμβους ανάμεσα στους οποίους θα παρεμβληθεί ο νέος*/ } } else printf( "oxi eparkis mnimi gia to %s.Den proste8ike stin lista\n", code );/*εμφανίζει μήνυμα λάθους δεν υπάρχει διαθέσιμη μνήμη το στοιχείο δεν προσθέθηκε στην λίστα*/ } θα δουλεψει αυτο το πραγμα η δεν παιζει??? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
MitsakosGR Δημοσ. 20 Απριλίου 2011 Share Δημοσ. 20 Απριλίου 2011 C++ ή C χρησιμοποιείς;;;; Γιατί κάνεις τα πάντα σε C (εκτός από τα String που χρησιμοποιείς) αλλά στον τίτλο λες C++ ;;;; >if (previousPtr == NULL) { /*Αν μπει μετά τον τελευταίο τότε*/ newPtr->nextPtr = *s; *s = newPtr; } Αυτό είναι για την περίπτωση που μπαίνει στην πρώτη θέση, όχι στην τελευταία... Απ'ότι είδα όμως θα δουλέψει σαν κώδικας, δεν έχεις κάποιο πρόβλημα (δεν το δοκίμασα απλά απ'ότι βλέπω). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.