Οι αρχαίοι Έλληνες δεν άφησαν πίσω τους μόνο μια ασύλληπτη πνευματική κληρονομιά με τα θεωρητικά έργα τους: Αλλά, και με τα τεχνολογικά τους επιτεύγματα, παρέδωσαν στην ανθρωπότητα έναν τεχνολογικό πολιτισμό, που αν είχε αξιοποιηθεί, οι σημερινές μας δυνατότητες θα ήταν ασύγκριτα μεγαλύτερες. Τα κατασκευαστικά τους θαύματα, όπως ο χιλιομετρητής των Αθηνών, η ατμομηχανή του Ήρωνος, ο αστρολάβος των Αντικυθήρων, οι μηχανές του Αρχιμήδους κα. αποτελούν μερικά από τα πολλά και πολύτιμα δημιουργήματά τους. Εξ’ ίσου σημαντικά ήταν και τα επιτεύγματά τους στις επικοινωνίες. Χρησιμοποιώντας οπτικές ψηφιακές επικοινωνίες από το 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
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ