Κωδικοποίηση και αποκωδικοποίηση

Η επεξεργασία κειμένου, σε συνδυασμό με την παραδοσιακή γλώσσα Logo, διευκολύνει την κωδικοποίηση ενός μηνύματος. Ένα από τα πιο απλά παραδείγματα κωδικοποίησης είναι ο κώδικας του Καίσαρα. Ο Ιούλιος Καίσαρας χρησιμοποιούσε έναν κώδικα κατά τον οποίο μετακινούσε τα γράμματα του αλφαβήτου τρεις θέσεις δεξιά, προκειμένου να επικοινωνεί με το στρατό του. Σύμφωνα με τον κώδικα αυτό, το A γίνεται Δ, το B γίνεται E, το Γ γίνεται Ζ και ούτω καθεξής.

Κάθε γράμμα του υπολογιστή έχει έναν αριθμό που ονομάζεται κωδικός ASCII. Για την εργασία αυτή, θα χρησιμοποιήσουμε μόνο κεφαλαία γράμματα. Η Logo θα επιστρέψει τον κωδικό ASCII οποιουδήποτε χαρακτήρα. Οι αλφαβητικοί χαρακτήρες έχουν προτυποποιηθεί και ισχύουν για όλες τις πλατφόρμες υπολογιστών.

δείξε ascii "A
193

Ο μεταβιβαστής χαρ επιστρέφει το χαρακτήρα που αντιστοιχεί στον κωδικό ASCII.

δείξε χαρ 193
A

Οι αριθμοί του κώδικα ASCII για τα κεφαλαία γράμματα ξεκινούν από το 65 και φτάνουν ως το 90, ενώ τα κεφαλαία γράμματα του ελληνικού αλφαβήτου ξεκινούν από το 193 και φτάνουν ως το 217.

δείξε ascii "Ω
217

Η διαδικασία κωδικός είναι μια διαδικασία που παίρνει έναν αριθμό του κωδικού ASCII και τον αυξάνει κατά τρία. Η διαδικασία κωδικός κάνει επίσης έναν έλεγχο για ακραίες περιπτώσεις. Αν η διαδικασία κωδικός έχει ως αποτέλεσμα αριθμό μεγαλύτερο του 217 (δηλαδή τιμή εισόδου μεγαλύτερη από 214), τότε αυτός δεν θα είναι μέρος του συνόλου των κεφαλαίων γραμμάτων, γι' αυτό στη θέση του διαβάζει το αλφάβητο αφαιρώντας 25. Επίσης, όταν το αποτέλεσμα είναι αριθμός από 210 έως 212 (δηλαδή, τιμή εισόδου από 207 έως 209), τότε προστίθεται μια επιπλέον μονάδα.

για κωδικός :ΑριθμΧαρ
κάνε "ΑριθμΧαρ :ΑριθμΧαρ + 3
αν :ΑριθμΧαρ > 217 [κάνε "ΑριθμΧαρ :ΑριθμΧαρ - 25]
αν (και :ΑριθμΧαρ > 209 :ΑριθμΧαρ < 213) [κάνε "ΑριθμΧαρ :ΑριθμΧαρ + 1]
έξοδος :ΑριθμΧαρ
τέλος

δείξε κωδικός 193
196

Η διαδικασία κωδικός χρησιμοποιεί την εντολή έξοδος και έχει, επομένως, οριστεί ως μεταβιβαστής. (Διαβάστε την ενότητα Διαδικασίες με έξοδο.)
δείξε κωδικός 215
193

Αν χρησιμοποιήσετε τη διαδικασία κωδικός, μπορείτε να μετακινήσετε κάθε γράμμα. Παρατηρήστε το επόμενο πλαίσιο κειμένου που ονομάζεται Καίσαρας:

Οι εντολές επιλογή και ΔρΜ επιλέγουν ένα χαρακτήρα:

ΑρχήΚειμένου
επιλογή ΔρΜ

Επιλέγεται το "T".

δείξε ascii επιλεγμένο
212

Το επιλεγμένο επιστρέφει την επιλογή ως λέξη.

δείξε κωδικός ascii επιλεγμένο
215

Η οδηγία που ακολουθεί αντικαθιστά τον επιλεγμένο χαρακτήρα (T) με το χαρακτήρα που προκύπτει από τη μετάθεσή του, κατά την κωδικοποίηση (Χ):

παρεμβολή χαρ κωδικός ascii επιλεγμένο

Η Logo διαβάζει την οδηγία με τον εξής τρόπο:

Η παρεμβολή αναζητά την τιμή της εισόδου του. Το χαρ είναι η επόμενη λέξη.
Το χαρ αναζητά την τιμή της εισόδου του. Το κωδικός είναι η επόμενη λέξη.
Το κωδικός αναζητά την τιμή της εισόδου του. Το ascii είναι η επόμενη λέξη.
Το ascii αναζητά την τιμή της εισόδου του. Το επιλεγμένο είναι η επόμενη λέξη.
Το επιλεγμένο επιστρέφει T στο ascii.
Το ascii επιλεγμένο επιστρέφει 212 στο κωδικός.
Το κωδικός ascii επιλεγμένο επιστρέφει 215 στο χαρ.
Το χαρ 215 επιστρέφει Χ στην παρεμβολή.
Η παρεμβολή τοποθετεί ένα Χ στο σημείο όπου βρίσκεται ο δρομέας.

Η διαδικασία κωδικοποίηση χρησιμοποιεί αυτή την οδηγία για να μετακινήσει όλους τους χαρακτήρες του κειμένου κατά τρεις θέσεις.

για κωδικοποίηση
αν ΤέλοςΚειμένου? [στοπ]
επιλογή ΔρΜ
παρεμβολή χαρ κωδικό ascii επιλεγμένο
κωδικοποίηση
τέλος

Ο κανόνας διακοπής ΤέλοςΚειμένου? κάνει έναν έλεγχο για να διαπιστώσει αν ο δρομέας βρίσκεται στο τέλος του κειμένου.

Το πρόγραμμα κωδικοποίηση δεν είναι τέλειο και τα διαστήματα και το ". " είναι όλα κωδικοποιημένα. Μια καλή ιδέα είναι να ασχοληθείτε με τα σημεία στίξης χωριστά. Οι κωδικοί ASCII των σημείων στίξης μπορούν να βρεθούν για να βελτιώσουν το κωδικός. Η έκδοση που ακολουθεί χρησιμοποιεί την εντολή ανήκει? για να εντοπίσει τους κωδικούς ASCII για τα ακόλουθα σημεία στίξης -- διάστημα . , : ? !

για κωδικός :ΑριθμΧαρ
αν ανήκει? :ΑριθμΧαρ [32 33 44 46 58 63] [εξ :ΑριθμΧαρ]
κάνε "ΑριθμΧαρ :ΑριθμΧαρ + 3
αν :ΑριθμΧαρ > 217 [κάνε "ΑριθμΧαρ :ΑριθμΧαρ - 25]
αν (και :ΑριθμΧαρ > 209 :ΑριθμΧαρ < 213) [κάνε "ΑριθμΧαρ :ΑριθμΧαρ + 1]
έξοδος :ΑριθμΧαρ
τέλος

Τώρα πρέπει να εκτελείται σωστά η κωδικοποίηση:

ΑρχήΚειμένου
κωδικοποίηση

Οι διαδικασίες αποκωδικοποίησης του κειμένου αναιρούν τα αποτελέσματα της κωδικοποίηση. Το αντικωδικός παίρνει τον κωδικό ASCII ενός γράμματος και αφαιρεί 3, ή πράττει ανάλογα για τις εξαιρέσεις. Η αποκωδικοποίηση αντικαθιστά τον κωδικοποιημένο χαρακτήρα με τον αρχικό χαρακτήρα.

για αντικωδικός :ΑριθμΧαρ
αν ανήκει? :ΑριθμΧαρ [32 33 44 46 58 63] [εξ :ΑριθμΧαρ]
κάνε "ΑριθμΧαρ :ΑριθμΧαρ - 3
αν :ΑριθμΧαρ < 193 [κάνε "ΑριθμΧαρ :ΑριθμΧαρ + 25]
αν (και :ΑριθμΧαρ > 207 :ΑριθμΧαρ < 211) [κάνε "ΑριθμΧαρ :ΑριθμΧαρ -1]
έξοδος :ΑριθμΧαρ
τέλος

για αποκωδικοποίηση
αν ΤέλοςΚειμένου? [στοπ]
επιλογή ΔρΜ
παρεμβολή χαρ αντικωδικός ascii επιλεγμένο
αποκωδικοποίηση
τέλος

Για να αποκωδικοποιήσετε το μήνυμα, πληκτρολογήστε:
ΑρχήΚειμένου
αποκωδικοποίηση