A-L-I-V-E Δημοσιεύτηκε Ιανουάριος 11, 2012 #1 Κοινοποίηση Δημοσιεύτηκε Ιανουάριος 11, 2012 Έχω να παραδώσω μια εργασία μέχρι την τρίτη και έχω ψιλοκολλήσει στην τελευταία άσκηση. Δεν θέλω λύσεις, απλά όποιος μπορεί να βοηθήσει, να μου δείξει σχετικές σημειώσεις που θα μπορούσα να διαβάσω ούτως ώστε να βρω το δρόμο για τη λύση. Έχω κάτι στο μυαλό μου αλλά δεν ξέρω κατά πόσο θα μπορέσω να το υλοποιήσω και να είναι σωστό. Στο spoiler έχω όλη την εκφώνηση της τελευταίας άσκησης. Το πρώτο κομμάτι που αφορά την εισαγωγή δεδομένων σε μονοδιάστατο πίνακα το έχω. Στα υπόλοιπα είμαι 50-50. Ευχαριστώ προκαταβολικά.Στη συγκεκριμένη υποεργασία ασχολούμαστε με μια μέθοδο ταξινόμησης που χρησιμοποιείται συχνά, ιδίως όταν ταξινομούμε ένα πλήθος δεδομένων «με το χέρι».Ως παράδειγμα, υποθέστε ότι είστε καθηγητής σε ένα Πανεπιστήμιο και ότι έχετε λάβει ένα πλήθος γραπτών από τους φοιτητές σας. Έστω ότι θέλετε να ταξινομήσετε αυτά τα γραπτά σε αύξουσα αλφαβητική σειρά με βάση το όνομα του φοιτητή/φοιτήτριας.Μία πιθανή τεχνική που μπορείτε να ακολουθήσετε είναι η εξής:Βήμα 1 - Προεπεξεργασία:Βήμα 1.1: Βάλε όλα τα γραπτά που αρχίζουν από ‘Α’ σε μια ομάδα.Βήμα 1.2: Βάλε όλα τα γραπτά που αρχίζουν από ‘Β’ σε μια άλλη ομάδα.Βήμα 1.3: Επανάλαβε την ίδια διαδικασία για τα υπόλοιπα γραπτά τοποθετώντας τα στις αντίστοιχες ομάδες.Βήμα 2 - Ταξινόμηση: Ταξινόμησε την κάθε ομάδα ξεχωριστά. Χρησιμοποίησε οποιονδήποτε αλγόριθμο επιθυμείς.Βήμα 3 - Συνένωση: Ξεκινώντας από την πρώτη ομάδα (και συνεχίζοντας με τις υπόλοιπες κατά σειρά), τοποθέτησε τα γραπτά σε μια νέα, τελική ομάδα. Η ομάδα αυτή θα περιέχει όλα τα γραπτά ταξινομημένα.Παρά τη φαινομενική πολυπλοκότητα της τεχνικής αυτής, ενδέχεται ότι καταμερίζοντας τα δεδομένα κατά το στάδιο της προεπεξεργασίας θα έχετε ευκολότερο ή τουλάχιστον πιο διαχειρίσιμο έργο στη συνέχεια.Χρησιμοποιήστε την πιο πάνω τεχνική ώστε να ταξινομήσετε ένα πλήθος Ν φυσικών αριθμών. Για λόγους ευκολίας, θεωρήστε ότι οι αριθμοί αυτοί βρίσκονται στο διάστημα [0, 99], δηλαδή από το 0 μέχρι και το 99.Να γραφούν διαδικασίες σε ψευδοκώδικα, σύμφωνα με τις ακόλουθες προδιαγραφές:• Το πλήθος Ν των αριθμών δίνεται ως σταθερά. Θεωρήστε ότι όλοι οι αριθμοί εισάγονται από το πληκτρολόγιο, με τον απαραίτητο αμυντικό προγραμματισμό, και τοποθετούνται σε έναν μονοδιάστατο πίνακα με όνομα DATA. Η είσοδος των δεδομένων θα πρέπει να γίνει με το υποπρόγραμμα ΕΙΣΑΓΩΓΗ_ΔΕΔΟΜΕΝΩΝ.• Χρησιμοποιήστε ακριβώς 10 ομάδες για το στάδιο της προεπεξεργασίας. Η πρώτη ομάδα θα περιέχει τους αριθμούς που ανήκουν στο διάστημα [0, 9], η δεύτερη ομάδα θα περιέχει τους αριθμούς που ανήκουν στο διάστημα [10, 19] κ.ο.κ. Χρησιμοποιήστε έναν δισδιάστατο πίνακα με όνομα GROUPS για να αποθηκεύσετε αυτές τις ομάδες. Ο πίνακας αυτός θα έχει 10 γραμμές (μία για κάθε ομάδα). Το πλήθος των στηλών του πίνακα ανήκει στα ζητούμενα της υποεργασίας και θα πρέπει να σχολιάσετε την επιλογή σας. Η προεπεξεργασία των δεδομένων να αναπτυχθεί στο υποπρόγραμμα ΠΡΟΕΠΕΞΕΡΓΑΣΙΑ.• Στο υποπρόγραμμα ΤΑΞΙΝΟΜΗΣΗ, ταξινομήστε τα δεδομένα που έχουν ομαδοποιηθεί στο στάδιο της προεπεξεργασίας. Χρησιμοποιήστε οποιονδήποτε αλγόριθμο επιθυμείτε, από αυτούς που βρίσκονται στο 2ο Τόμο ή οπουδήποτε.(Υπόδειξη: Θα πρέπει προφανώς να γνωρίζετε το πλήθος των αριθμών που ανήκουν σε κάθε ομάδα - γραμμή του δισδιάστατου πίνακα. Το πλήθος αυτό πρέπει να υπολογίζεται στο στάδιο της προεπεξεργασίας και να αποθηκεύεται σε πίνακα με όνομα PLITHOS.)• Στο υποπρόγραμμα ΣΥΝΕΝΩΣΗ, συνενώστε τα ταξινομημένα δεδομένα εισάγοντάς τα στον αρχικό πίνακα.• Τυπώστε τον ταξινομημένο πίνακα με το υποπρόγραμμα ΕΚΤΥΠΩΣΗ_ΔΕΔΟΜΕΝΩΝ.Για λόγους ομοιομορφίας, ακολούθως δίνεται η επικεφαλίδα, το τμήμα δηλώσεων και το κυρίως πρόγραμμα.Αναπτύξτε τα υποπρογράμματά σας στο σημείο που υποδεικνύεται. Δηλώστε και σχολιάστε κατάλληλα το πλήθος των στηλών του πίνακα GROUPS.ΑΛΓΟΡΙΘΜΟΣ ΤΑΞΙΝΟΜΗΣΗ_4_ΥΠΟΕΡΓΑΣΙΑΣΤΑΘΕΡΕΣ Ν=15; //Το μέγεθος του πίνακα//ΔΕΔΟΜΕΝΑDATA: ARRAY[1..N] OF INTEGER; //Ο πίνακας των στοιχείων// GROUPS: ARRAY[1..10, 1..??] OF INTEGER; //Ο πίνακας των ομάδων////Σημειώστε στη δήλωση το πλήθος των στηλών του πίνακα GROUPS////Εξηγήστε σε αυτό το σχόλιο τον λόγο για τον οποίο επιλέξατε// //αυτό το πλήθος// PLITHOS:ARRAY[1..10] OF INTEGER; //περιέχει το πλήθος κάθε// //ομάδας, υπολογίζεται κατά την προεπεξεργασία////_________________________________________________________________////_____Εδώ θα γράψετε τα υποπρογράμματά σας________________________////_________________________________________________________________//ΑΡΧΗ //Κυρίως πρόγραμμα// //Εισαγωγή δεδομένων// ΥΠΟΛΟΓΙΣΕ ΕΙΣΑΓΩΓΗ_ΔΕΔΟΜΕΝΩΝ(%DATA); //Προεπεξεργασία// ΥΠΟΛΟΓΙΣΕ ΠΡΟΕΠΕΞΕΡΓΑΣΙΑ(DATA, %GROUPS, %PLITHOS); //Ταξινόμηση// ΥΠΟΛΟΓΙΣΕ ΤΑΞΙΝΟΜΗΣΗ(%GROUPS, PLITHOS); //Συνένωση// ΥΠΟΛΟΓΙΣΕ ΣΥΝΕΝΩΣΗ(%DATA, GROUPS, PLITHOS); //Εκτύπωση τελικού πίνακα// ΥΠΟΛΟΓΙΣΕ ΕΚΤΥΠΩΣΗ_ΔΕΔΟΜΕΝΩΝ(DATA)ΤΕΛΟΣ //Κυρίως Προγράμματος// Link to comment Share on other sites More sharing options...
backgman Ιανουάριος 12, 2012 #2 Κοινοποίηση Ιανουάριος 12, 2012 Καλησπέρα,για να βρεις το πλήθος των στηλών του πίνακα GROUPS θα πρέπει να σκεφτείς ποιά είναι η χειρότερη περίπτωση που έχεις (όσον αφορά την είσοδο) για το πρόγραμμά σου:Αν κάποιος σου δώσει Ν αριθμούς να ταξινομήσεις και πρέπει να μπούν και οι Ν αριθμοίσε μία γραμμή του πίνακα GROUPS (πχ έχεις είσοδο Ν αιθμούς στο διάστημα [0, 9]).Άρα το πλήθος των στηλών του GROUPS πρέπει να είναι Ν για να καλύπτεις αυτές τις περιπτώσεις.Στην υπορουτήνα ΥΠΟΛΟΓΙΣΕ ΠΡΟΕΠΕΞΕΡΓΑΣΙΑ διαβάζοντας τα δεδομένα DATA και ελέγχοντας σεποιο διάστημα ανήκουν (με ένα CASE ή IF-ELSEIF-ELSE) τα τοποθετείς στην ανάλογη γραμμή τουπίνακα GROUPS και καθε φορά που βάζεις έναν αριθμό στη γραμμή k του GROUPS αυξάνεις την μεταβλητήPLITHOS[k] κατα 1, ωστε να υπολογίζεις και το πλήθος των αριθμών κάθε γραμμής (έχεις αρχικοποιήσει όλεςτις γραμμές του PLITHOS στο 1 ή στο 0).Στην υπορουτήνα ΥΠΟΛΟΓΙΣΕ ΤΑΞΙΝΟΜΗΣΗ θα ταξινομήσεις κάθε γραμμή του πίνακα GROUPS με βάσητο πλήθος των αριθμών που υπάρχουν στη συγκεκριμένη γραμμή και τέλος θα ενώσεις όλες τις γραμμές με τη σειρά σε ένα τελικό πίνακα (ταξινομημένο) στην υπορουτήνα ΥΠΟΛΟΓΙΣΕ ΣΥΝΕΝΩΣΗ. Link to comment Share on other sites More sharing options...
A-L-I-V-E Ιανουάριος 12, 2012 Author #3 Κοινοποίηση Ιανουάριος 12, 2012 Για τις στήλες του πίνακα GROUPS το είχα σκεφτεί αυτό το ενδεχόμενο αλλά ήθελα και μια επιβεβαίωση. Στην ΠΡΟΕΠΕΞΕΡΓΑΣΙΑ κατάφερα να ξεχωρίσω τις ομάδες και να τις καταχωρήσω στις αντίστοιχες στήλες του GROUPS αλλά τώρα που βλέπω την απάντησή σου μάλλον ο δικός μου τρόπος ήταν λίγο ανορθόδοξος. Έκανα τα εύκολα δύσκολα δηλαδή. Το άλλαξα όπως μου πρότεινες και ταξινόμησα τον GROUPS με ταξινόμηση δυαδικής παρεμβολής. Μέχρι στιγμής μου φαίνονται όλα εντάξει μιας και στα υπόλοιπα συμφωνούν οι γνώμες μας. Θα τα τσεκάρω πάλι πριν στείλω την εργασία και ελπίζω να είμαστε σωστοί. Σε ευχαριστώ πολύ για τη βοήθεια και το χρόνο σου. Αν έρθεις καμιά βόλτα από το Βόλο στείλε πμ να κεράσω τσίπουρα... Link to comment Share on other sites More sharing options...
A-L-I-V-E Ιανουάριος 14, 2012 Author #4 Κοινοποίηση Ιανουάριος 14, 2012 Κάτι ακόμα... αν έχω τις παρακάτω μεταβλητές...i:integer και out:booleanτι είναι πιο σωστό;να γράψω πχ ενόσω i<10 and out=false επαπανάλαβε ή ενόσω i<10 and (not out) επαπανάλαβε;ή είναι και τα δύο σωστά; Link to comment Share on other sites More sharing options...
backgman Ιανουάριος 17, 2012 #5 Κοινοποίηση Ιανουάριος 17, 2012 Κάτι ακόμα... αν έχω τις παρακάτω μεταβλητές...i:integer και out:booleanτι είναι πιο σωστό;να γράψω πχ ενόσω i<10 and out=false επαπανάλαβε ή ενόσω i<10 and (not out) επαπανάλαβε;ή είναι και τα δύο σωστά;Καλησπέρα, και τα 2 σωστά είναι απο προγραμματιστική άποψη αλλα δε ξέρω αν είναικαι τα 2 σωστά για ψευδοκώδικα. Νομίζω το πρώτο είναι πιο ασφαλές. Link to comment Share on other sites More sharing options...
Inglor Ιανουάριος 17, 2012 #6 Κοινοποίηση Ιανουάριος 17, 2012 Νομίζω ισχύει ο ίδιος άγραφος κανόνας με τον κώδικα:- Γράψε κώδικα όσο απλά θα ήθελες να διαβάζεις κώδικαδηλαδήΜπορείς να το γράψεις και ωςWHILE(NOT(i>= 10 AND out))...και πάλι σωστό είναι απλά αυξάνεις την δυσκολία να το καταλάβει κάποιος. Link to comment Share on other sites More sharing options...
A-L-I-V-E Ιανουάριος 17, 2012 Author #7 Κοινοποίηση Ιανουάριος 17, 2012 Ευχαριστώ πολύ για την πολύτιμη βοήθειά σας! Παρέδωσα την εργασία και από τις λιγοστές γνώσεις που έχω αποκτήσει μέχρι στιγμής είμαι ικανοποιημένος από τις απαντήσεις μου. Ελπίζω για τα καλύτερα. Θα σας ενημέρωσω μόλις βγει η βαθμολογία. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.