Εκφώνηση:
Η Ακρόπολη των Αθηνών αποτελεί, αν όχι το σημαντικότερο, ένα από τα σημαντικότερα δημιουργήματα της ανθρωπότητας. Η κατασκευή της Ακρόπολης από τη σύλληψη, τη σχεδίαση, τη μελέτη, το κτίσιμο και τη δημιουργία των αιώνιων γλυπτών της, αποκαλύπτουν το μεγαλείο του Ελληνικού πολιτισμού. Ένα από τα πάρα πολλά προβλήματα που είχαν να αντιμετωπίσουν οι Αρχαίοι Έλληνες ήταν η ανύψωση των μαρμάρων στον ιερό βράχο. Για να το επιτύχουν χρησιμοποίησαν ένα σύστημα με τροχαλίες, έτσι ώστε όταν κατέρχονταν μια άδεια άμαξα, να χρησιμοποιείται σαν αντίβαρο για την ανερχόμενη. Για την καλύτερη επίτευξη του σκοπού αυτού, ήταν προτιμότερο οι ελαφρύτερες άμαξες να ανέλθουν πρώτες. Ωστόσο, κατά η δημιουργία των γλυπτών της μετώπης του Παρθενώνα, μερικά ξεχωριστά κομμάτια πεντελικού μαρμάρου έπρεπε να μεταφερθούν άμεσα και σε συγκεκριμένη σειρά. Τα κομμάτια αυτά ήταν μικρά και πρακτικά μικρού βάρους (ενδεικτικό βάρος 1).
Πρόβλημα:
Να αναπτύξετε πρόγραμμα σε Γλώσσα, το οποίο αφού καταχωρίσει σε έναν πίνακα 100 θέσεων τα βάρη των μαρμάρων που πρέπει να μεταφερθούν με βάσει τη σειρά εξόρυξης, θα υπολογίσει και θα εμφανίζει τη σειρά μεταφοράς τους από το ελαφρύτερο προς το βαρύτερο. Τα βάρη με την ενδεικτική τιμή 1, αντιστοιχούν σε αυτά τα ξεχωριστά κομμάτια μαρμάρου, τα οποία πρέπει να μεταφερθούν με τη δεδομένη σειρά εμφάνισης (να εξαιρεθούν δηλαδή της ταξινόμησης). ΕΠΥ, 18ος Π.Δ.Π. (2006) Α’ Φάση
Λύση:
ΠΡΟΓΡΑΜΜΑ ΑΣΚ1_ΠΑΡ_Β_ΠΙΝ_ΜΑΡΜΑΡΑ_ΠΑΡΘΕΝΩΝΑ
ΣΤΑΘΕΡΕΣ
n=10 ! πλήθος μαρμάρων
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i, j, k, queue[n], monades[n], temp
ΠΡΑΓΜΑΤΙΚΕΣ: weight[n], weight_init[n],temp2
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΔΙΑΒΑΣΕ weight[i]
weight_init[i] <-- weight[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
monades[i] <-- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
k <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΔΙΑΒΑΣΕ queue[i]
ΑΝ queue[i]=1 ΤΟΤΕ
k <-- k+1
monades[k] <-- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n
ΓΙΑ j ΑΠΟ n ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ queue[j]>queue[j-1] ΤΟΤΕ
temp <-- queue[j]
queue[j] <-- queue[j-1]
queue[j-1] <-- temp
temp2 <-- weight[j]
weight[j] <-- weight[j-1]
weight[j-1] <-- temp2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
j <-- 1
k <-- 1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΑΝ i = monades[j] ΤΟΤΕ
ΓΡΑΨΕ weight_init[i]
j <-- j+1
ΑΛΛΙΩΣ
ΓΡΑΨΕ weight[k]
k <-- k+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Η λύση που προτείνει ο κ.Aepp.gr είναι αποδοτική αλλά δεν έχει έναν ενιαίο πίνακα όπως προϋποθέτει η άσκηση, κάνει την εμφάνιση από 2 ξεχωριστούς πίνακες. θα μπορούσε να κρατάει τις θέσεις των μαρμάρων που έχουν βάρος 1, να ταξινομεί που έχει διαβάσει κατά αύξουσα σειρά, να βρίσκει μέχρι ποια θέση είναι τα μάρμαρα με βάρος 1 και σε μια επανάληψη σε έναν καινούργιο πίνακα να βάζει τις μονάδες στις κατάλληλες θέσεις και να αντιγράφει τον ήδη ταξινομημένο πίνακα στις υπόλοιπες και έπειτα να τον εμφανίζει.
Ευχαριστώ πολύ για την βοήθεια σας στη συντήρηση και εξέλιξη του κώδικα!
Αν δεν σας είναι πρόβλημα, μπορείτε να εισάγετε την πρόταση σας ως σχόλιο.