Απορία σε άσκηση συγχώνευσης

Ξεκίνησε από despoina, 29 Ιαν 2013, 02:08:14 ΜΜ

« προηγούμενο - επόμενο »

despoina

Η Τρίτη Λυκείου ενός σχολείου αποτελείταπο από 2 τμήματα 25 και 30 μαθητών αντίστοιχα.Να γράψετε αλγόριθμο ο οποίος να διαβάζει για κάθε τμήμα το όνομα των μαθητών του και τον βαθμό απολυτηρίων τους και να τα καταχωρίζει σε μονοδιάστατους πίνακες ΌνομαΑ και ΌνομαΒ για τα ονόματα του ά και β΄τμήματος και ΒαθμόςΑ και ΒαθμόςΒ για τους βαθμούς των μαθητών του πρώτου και δεύτερου τμήματος αντίστοιχα. Αν θεωρήσουμε ότι τα στοιχεία των μαθητών κάθε τάξης δόθηκαν από τον καλύτερο μαθητή στο χειρότερο, ο αλγόριθμος να εμφανίζει τους δέκα καλύτερους μαθητές και από τα δύο τμήματα.

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

gthal

Αν θες, γράψε το τμήμα της λύσης που σε μπερδεύει για να το δουμε
Φιλικά,
Γιώργος Θαλασσινός

despoina

i<--1
j<--1
κ<--1
όσο (i<=25) και (j<=30) επανάλαβε
        αν Β1<Β2[j] τότε ! εδώ νομίζω ότι χρειάζεται >
               Βολ[κ]<-- Β1
               Ονολ[κ]<-- Ον1[j]
               i<--i+1

despoina


noname

Αν το ζητούμενο είναι μόνο να εμφανιστούν οι 10 καλύτεροι δεν είναι απαραίτητη η συγχώνευση. Μπορείς να συγκρίνεις τα στοιχεία των Β1 και Β2 -με διαφορετικό δείκτη στον καθένα- και να χρησιμοποιήσεις έναν μετρητή. Όταν ο μετρητής θα έχει μετρήσει 10 θα σταματάει.
Από την εκφώνηση που δίνεις φαίνεται να έχεις δίκιο για τον συγκριτικό τελεστή. Ο μεγαλύτερος βαθμός θα πρέπει να καταχωρίζεται πρώτα στον συγχωνευμένο πίνακα.

gthal

Ναι, δίκιο έχεις.
Θα έπρεπε να είναι > ή >=
Φιλικά,
Γιώργος Θαλασσινός

odysseas

Παράθεση από: noname στις 30 Ιαν 2013, 12:22:33 ΠΜ
Αν το ζητούμενο είναι μόνο να εμφανιστούν οι 10 καλύτεροι δεν είναι απαραίτητη η συγχώνευση. Μπορείς να συγκρίνεις τα στοιχεία των Β1 και Β2 -με διαφορετικό δείκτη στον καθένα- και να χρησιμοποιήσεις έναν μετρητή. Όταν ο μετρητής θα έχει μετρήσει 10 θα σταματάει.

Αυτό που περιγράφεις συγχώνευση είναι, απλά σταματά πριν εξαντληθούν οι πίνακες, όταν κ>10.

noname

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

odysseas

Παράθεση από: noname στις 30 Ιαν 2013, 09:07:09 ΠΜ
Έγραψα ότι δεν είναι συγχώνευση με την έννοια του ότι αν ζητά μόνο εμφάνιση στοιχείων τότε δεν είναι απαραίτητη η συνένωση των δύο πινάκων σε έναν τρίτο.

Κατάλαβα, σωστό. Δεν είχα προσέξει την αρχική διατύπωση, είδα μόνο οτι στη λύση χρησιμοποιεί τρίτο πίνακα.

despoina


mokasa

Τρεις παρατηρήσεις, αν κάνω λάθος παρακαλώ διορθώστε με :
α) Θέλει λίγη προσοχή στην περίπτωση ισοβαθμίας του 10ου με τον 11ο, 12ο, ... μαθητή. Η εκφώνηση δεν διευκρινίζει τι πρέπει να γίνει, φαντάζομαι όμως οτι πρέπει να συνεχίζει, ίσως και με αλφαβητική παράθεση των ονομάτων.
β) Σαν εναλλακτική (αλλά όχι αποδοτική λύση βέβαια) θα μπορούσαμε να ενώσουμε τους πίνακες και μετά να κάνουμε παράλληλη ταξινόμηση βαθμών και ονομάτων, με επιπλέον κριτήριο την αλφαβητική σειρά σε περίπτωση ισοβαθμίας, θα είναι πιο εύκολη και δίκαιη η τελική παρουσίαση των ονομάτων των μαθητών.
γ) Το θέμα δεν πρέπει να είναι στους πολυδιάστατους πινακες αλλά στους μονοδιάστατους (το λέω γιατί έφαγα ώρα να το ψάχνω εκεί).