Οι αρχαίοι Έλληνες δεν άφησαν πίσω τους μόνο μια ασύλληπτη πνευματική κληρονομιά με τα θεωρητικά έργα τους: Αλλά, και με τα τεχνολογικά τους επιτεύγματα, παρέδωσαν στην ανθρωπότητα έναν τεχνολογικό πολιτισμό, που αν είχε αξιοποιηθεί, οι σημερινές μας δυνατότητες θα ήταν ασύγκριτα μεγαλύτερες. Τα κατασκευαστικά τους θαύματα, όπως ο χιλιομετρητής των Αθηνών, η ατμομηχανή του Ήρωνος, ο αστρολάβος των Αντικυθήρων, οι μηχανές του Αρχιμήδους κα. αποτελούν μερικά από τα πολλά και πολύτιμα δημιουργήματά τους. Εξ’ ίσου σημαντικά ήταν και τα επιτεύγματά τους στις επικοινωνίες. Χρησιμοποιώντας οπτικές ψηφιακές επικοινωνίες από το 12 πΧ. αιώνα μετέφεραν το μήνυμα της νίκης από την Τροία στις Μυκήνες μέσα σε λίγα 24ωρα. Από τα μέσα του 9ου πΧ χρησιμοποίησαν κωδικοποίηση του Ελληνικού αλφαβήτου (Καδμεία γραφή) για τη μετάδοση κειμένων με οπτική κωδικοποίηση σε Καρτεσιανές συντεταγμένες! Το εκπληκτικό είναι ότι κωδικοποίησαν το αλφάβητο με βάση την εντροπία του κάθε γράμματος. Στον παρακάτω πίνακα φαίνεται για παράδειγμα μια τέτοια κωδικοποίηση, όπου το γράμμα Μ αντιστοιχεί σε τρεις οριζόντια και τρεις κάθετα αναμμένους δαυλούς.
¥ | ¥ | ¥ | |||
¥ | Ε | Ο | Θ | Ζ | |
¥ | Α | Β | Δ | Γ | Σ |
¥ | Ι | Ν | Μ | Κ | Λ |
Η | Τ | Ρ | Φ | Ω | |
Υ | Π | Ξ | Χ | Ψ |
Η βασική αρχή αυτής της κωδικοποίησης είναι τα γράμματα να ταξινομούνται με βάση τη φθίνουσα σειρά εμφάνισής τους. Τα γράμματα με τη μεγαλύτερη συχνότητα εμφάνισης θα απαιτούν το άναμμα λιγότερων δαυλών και αντίστοιχα αυτά με τη μικρότερη συχνότητα εμφάνισης, περισσότερων.
Πρόβλημα: Να αναπτύξετε ένα πρόγραμμα το οποίο: Θα “διαβάζει” ένα κείμενο χαρακτήρα – χαρακτήρα και αφού καταμετρήσει πόσες φορές εμφανίζεται κάθε χαρακτήρας (Κεφαλαία Ελληνικά & κενό σύνολο 25 χαρακτήρες) θα τους εμφανίζει με σειρά φθίνουσας εμφάνισης, εμφανίζοντας και την αντίστοιχη συχνότητα εμφάνισης ώστε να τύχουν καλλίτερης κωδικοποίησης. Η εισαγωγή χαρακτήρων θα τερματίζεται όταν εισαχθεί ο χαρακτήρας ‘.’ 20ος ΠΔΠ (2008) Α’ Φάση
ΛΥΣΗ
ΠΡΟΓΡΑΜΜΑ ΑΣΚ2_ΠΑΡΑΡΤΗΜΑ_Β_ΙΕΠ_ΒΑΣΙΚΕΣ_ΕΝΝΟΙΕΣ ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: character, letter[25], temp2 ΑΚΕΡΑΙΕΣ: i, j, total_chars, temp, letter_count[25] ΠΡΑΓΜΑΤΙΚΕΣ: frequency ΛΟΓΙΚΕΣ: done ΑΡΧΗ ! Αρχικοποίηση πίνακα αλφαβήτου letter[1] <-- 'Α' letter[2] <-- 'Β' letter[3] <-- 'Γ' letter[4] <-- 'Δ' letter[5] <-- 'Ε' letter[6] <-- 'Ζ' letter[7] <-- 'Η' letter[8] <-- 'Θ' letter[9] <-- 'Ι' letter[10] <-- 'Κ' letter[11] <-- 'Λ' letter[12] <-- 'Μ' letter[13] <-- 'Ν' letter[14] <-- 'Ξ' letter[15] <-- 'Ο' letter[16] <-- 'Π' letter[17] <-- 'Ρ' letter[18] <-- 'Σ' letter[19] <-- 'Τ' letter[20] <-- 'Υ' letter[21] <-- 'Φ' letter[22] <-- 'Χ' letter[23] <-- 'Ψ' letter[24] <-- 'Ω' letter[25] <-- '!' ! Αντί του κενού χαρακτήρα ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 25 letter_count[i] <-- 0 ! πλήθος γραμμάτων ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ total_chars <-- 0 ! πλήθος χαρακτήρων ΔΙΑΒΑΣΕ character ΟΣΟ character <> '.' ΕΠΑΝΑΛΑΒΕ total_chars <-- total_chars + 1 ! Αναγνώριση χαρακτήρα με αναζήτηση στον letter done <-- ΨΕΥΔΗΣ i <-- 1 ΟΣΟ done = ΨΕΥΔΗΣ ΚΑΙ i<=25 ΕΠΑΝΑΛΑΒΕ ΑΝ character = letter[i] ΤΟΤΕ done <-- ΑΛΗΘΗΣ letter_count[i] <-- letter_count[i] + 1 ΤΕΛΟΣ_ΑΝ i <-- i + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ character ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Ταξινόμηση πίνακα letter_count Για i ΑΠΟ 2 ΜΕΧΡΙ 25 ΓΙΑ j ΑΠΟ 25 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1 ΑΝ letter_count[j] > letter_count[j-1] ΤΟΤΕ temp <-- letter_count[j-1] letter_count[j-1] <-- letter_count[j] letter_count[j] <-- temp ! παράλληλη ταξινόμηση του πίνακα letter temp2 <-- letter[j-1] letter[j-1] <-- letter[j] letter[j] <-- temp2 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'ΓΡΑΜΜΑ - ΣΥΧΝΟΤΗΤΑ (%):' Για i ΑΠΟ 1 ΜΕΧΡΙ 25 frequency <-- letter_count[i] / total_chars * 100 ΓΡΑΨΕ letter[i], ' - ', frequency ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Πρόσφατα σχόλια