Προσπέλαση χαρακτήρων ASCII κειμένου με τον Διερμηνευτή της Γλώσσας

Ξεκίνησε από Zlaton, 22 Οκτ 2025, 06:52:54 ΠΜ

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

Zlaton

Χαίρετε.

Είμαι μαθητής της Γ΄ Λυκείου, και εδώ και λίγες ημέρες σκέφτομαι σχετικά με το πρόβλημα προσπέλασης χαρακτήρων κειμένου στην Γλώσσα. Έχω καταλήξει στο ότι είναι πρακτικά αδύνατο εγχείρημα με τις δυνατότητες που ορίζονται στο ΑΕΠΠ, αλλά δεν τελειώνει εδώ το θέμα.

Ο Διερμηνευτής που δημιούργησε ο κ. Άλκης Γεωργόπουλος έχει δυνατότητα της χρήσης του τελεστή + για συνένωση κειμένων. Απ'ότι φαίνεται, αυτή η προσθήκη στην Γλώσσα είναι το μόνο που χρειάζεται για προσπέλαση χαρακτήρων από ένα συγκεκριμένο διάστημα. Για να μου απλοποιηθεί η δουλειά, ορίζω αυτό το διάστημα ως τους χαρακτήρες ASCII 32-126 (κενός χαρακτήρας εώς ~).

Αυτό το οποίο προσπαθεί να επιτύχει το πρόγραμμά μου είναι, αφού του δωθεί μια αλφαριθμητική τιμή, να βρει ποιος συνδυασμός χαρακτήρων του δοθέντος διαστήματος ισούται με αυτήν. Θα μπορούσα να το κάνω να δοκιμάζει τους συνδυασμούς έναν-έναν, αλλά χάρη στους συγκριτικούς τελεστές, μπορούν οι δοκιμές να γίνονται πιο μεθοδικά, περιορίζοντας την αλφαριθμητική τιμή σε ολόενα μικρότερα διαστήματα, μέχρι να προσεγγιστεί πλήρως.

Για να κατανοήσετε καλύτερα την διαδικασία, θα σας δείξω ένα παράδειγμα υλοποίησής της με μικρότερο διάστημα (A εώς F) και το κείμενο
'BAD'.

Πρώτα, συγκρίνει το κείμενο με κάθε στοιχείο του διαστήματος. Βρίσκει ότι το πρώτο στοιχείο το οποίο είναι μικρότερο από το κείμενο είναι το
'C', οπότε ο πρώτος χαρακτήρας είναι ο αμέσως μικρότερος, δηλαδή το 'B'. Ύστερα, συγκρίνει το κείμενο με το 'B' συνενωμένο με κάθε στοιχείο του διαστήματος. Βρίσκει ότι η πρώτη συνένωση από την οποία είναι μικρότερο το κείμενο είναι η συνένωση ('B' + 'B'), οπότε ο δεύτερος χαρακτήρας είναι ο αμέσως μικρότερος, δηλαδή το 'A'. Τέλος, συγκρίνει το κείμενο με το 'BA' συνενωμένο με κάθε στοιχείο του διαστήματος. Βρίσκει ότι η πρώτη συνένωση από την οποία είναι μικρότερο το κείμενο είναι η συνένωση ('BA' + 'E'), οπότε ο τρίτος χαρακτήρας του κειμένου είναι ο αμέσως μικρότερος, δηλαδή το 'D'. Αφού το κείμενο 'BAD' στο οποίο καταλήγει είναι ίσο με το αρχικό, τελειώνει η διαδικασία και έχει βρεθεί κάθε χαρακτήρας του κειμένου.

Ο κώδικας σε Γλώσσα και Ψευδογλώσσα είναι συνημμένος στο μήνυμα. Μπορείτε να τον δοκιμάσετε στον Διερμηνευτή. Αν έχετε καθόλου προτάσεις για βελτιώσεις του κώδικα ή του μηνύματός μου, σας παρακαλώ να τις εκφράσετε.

pgrontas

Συγχαρητήρια για την προσπάθεια!
Επιδοκιμάζω την ονοματαλογία μεταβλητών.
Ευχαριστίες και για το ότι μας έμαθες ότι η ΓΛΩΣΣΑ υποστηρίζει τη συνένωση με + (δεν το είχα φανταστεί πόσο μάλλον δοκιμάσει)


Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Zlaton

Να υπενθυμίσω ότι η συνένωση χαρακτήρων με τον τελεστή '+' γίνεται μόνο με τον διερμηνευτή. Δεν συμπεριλαμβάνεται πουθενά ως δυνατότητα στα βιβλία που μας δώθηκαν.

pgrontas

Εννοείται, στον διερμηνευτή αναφερομουν
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

Αν δεν κάνω λάθος ο Άλκης στην υλοποίηση του Διερμηνευτή έβαλε και κάνα δυο χαρακτηριστικά βολικά που όμως δεν υποστηρίζονται στο specification της ΓΛΩΣΣΑΣ από το σχολικό βιβλίο. Είναι για να μπορεί κάποιος να κάνει κάτι παραπάνω. Αν θυμάμαι καλά υπήρχε και μια ΓΡΑΨΕ_ που δεν έγραφε χαρακτήρα αλλαγής γραμμής δίνοντας της δυνατότητα να μείνει ο κέρσορας στην ίδια γραμμή. Από ότι θυμάμαι κάπως έτσι ήταν και η συνένωση αλφαριθμητικών όπου ο Άλκης υπερφόρτωσε τον τελεστή +.

Κατά τα άλλα... μπράβο στο μαθητή για το πρόγραμμα. Σπάνιο να βλέπεις μαθητή με τέτοιο ενδιαφέρον. Αν δεν κάνω λάθος, ψάχνεις ένα ένα τους χαρακτήρες μέχρι να ξεπεράσεις το αλφαριθμητικό. Μπορείς να το κάνει πιο γρήγορο αν πηγαίνεις κάθε φορά στη μέση του διαστήματος των χαρακτήρων κάνοντας δυαδική αναζήτηση. 

Δυστυχώς επίσημα η ΓΛΩΣΣΑ δεν υποστηρίζει τη συνένωση χαρακτήρων οπότε στο πλαίσιο του μαθήματος δεν μπορούμε να κάνουμε τέτοια ωραία πράγματα. Είναι μόνο για όποιον ενδιαφέρεται πολύ.

Πιο παλιά είχα σκεφτεί σαν άσκηση στους πίνακες να γίνεται υλοποίηση των συναρτήσεων των strings θεωρώντας τους χαρακτήρες σε πίνακα και ειδικό χαρακτήρα να σηματοδοτεί το τέλος. Αλλά γενικά το επίσημο specification λειτουργούσε περιοριστικά και η άσκηση ξέφευγε... ειδικά τώρα που δεν απευθυνόμαστε σε μαθητές της θετικής. 
Γιώργος Παπαργύρης