Δευτέρα 25 Φεβρουαρίου 2019

Έκδοση 9.8

Η νέα έκδοση έχει μερικές βελτιώσεις ως προς την προηγούμενη:

Σχετικά με τη γλώσσα:
1.1. Ένα δύσκολο μέρος της, οι δείκτες σε ομάδες (αντικείμενα) αύξησαν την λειτουργικότητά τους. Θα αναφερθώ σε αυτό το κομμάτι ξεχωριστά. Αυτή όμως η αλλαγή άλλαξε και την έκδοση από 9.7 σε 9.8.

1.2. Η εντολή Παρεμβολή Στο απέκτησε και τρίτη παράμετρο. Τώρα μπορούμε να δώσουμε πρώτη παράμετρο τον αύξοντα αριθμό παραγράφου, δεύτερη την θέση στη παράγραφο και τώρα τρίτη τον αριθμό χαρακτήρων που θα διαγραφούν. Ενώ η παρεμβολή μετακινεί τους χαρακτήρες της παραγράφου, η τρίτη παράμετρος αφαιρεί κιόλας. Υπάρχει η εντολή Καταχώρηση που αλλάζει τη παράγραφο με μια άλλη ή αλλάζει από ένα σημείο και μετά, αλλά δεν αφήνει κάτι από την παλιά να υπάρχει στο τέλος της παραγράφου.


Σχετικά με το περιβάλλον:
2.1 Εξ ορισμού το χρώμα κονσόλας είναι ματζέντα , και το χρώμα γραμμάτων το κίτρινο. (ήταν μπλε και άσπρο αντίστοιχα).

2.2 Στο διορθωτή εμφανίζεται η γραμμή που έχει σφάλμα σε παρένθεση, σε εισαγωγικά και σε μπλοκ κώδικα.

2.3 Επεκτάθηκαν τα κουμπιά λειτουργιών που μπορούν να προγραμματιστούν. Τώρα είναι συνολικά 24, μια σειρά από το F1 μέχρι το F12 και μια δεύτερη σειρά τα ίδια και με το shift πατημένο.

Σχετικά με το συνοδευτικό πρόγραμμα (συλλογή προγραμμάτων σε ένα αρχείο) το info.gsb  έκδοση 3 (εκτός από ένα πρόγραμμα όλα τα άλλα είναι στα αγγλικά). Όλα τα προγράμματα φορτώνονται με το info.gsb. Για να δούμε το κώδικα κάποιου προγράμματος (εμφανίζονται τα ονόματα στην πληροφοριακή σελίδα του info), γράφουμε edit και το όνομά του ή το σ και το όνομα. Τρέχουμε τα προγράμματα με το όνομά τους. Για μερικά υπάρχουν και τα κουμπιά λειτουργιών (function keys).

3.1 kb  Το πιάνο, είναι πιο δυνατό στη βασική ένταση (πριν ήταν στο μισό της ενισχυμένης αλλά ακούγονταν σχετικά λιγότερο από το μισό). Επίσης μπήκε και δεύτερος τρόπος μετάβασης, από την αρχική οθόνη του info.gsb, και τυχαία επιλέγεται ένας από αυτούς. Ο παλιός είναι το dissolve, όπου η νέα εικόνα εμφανίζεται πάνω στη παλιά καθώς η παλιά εξαφανίζεται (η νέα εικόνα γίνεται δυναμικά, δηλαδή μετά την εμφάνιση της παλιάς, αλλά δεν το βλέπουμε, γιατί η Μ2000 ελέγχει την ανανέωση της φόρμας της, και δείχνει ό,τι θέλει όταν το θέλει). Ο νέος είναι το slide, η ολίσθηση της νέας εικόνας από δεξιά πάνω στην παλιά με κλιμακούμενη διαφάνεια,

3.2 Cal ένα ημερολόγιο με Ascii Art Snoopy. Τον κώδικα τον είχα γράψει για το Rosettacode.org Χρησιμοποιεί courier new, και εμφανίζει το ολοσέλιδο ημερολόγιο, μια φορά στα ελληνικά και μετά στα αγγλικά, από το 2019 έως το 2015. Η κονσόλα έχει διαμορφωθεί σε 132 χαρακτήρες επί 68 γραμμές. Το μέγεθος των χαρακτήρων είναι ανάλογο με το μέγεθος της οθόνης προβολής μας.



3.3 LZW πρόγραμμα που δείχνει πώς γίνεται η συμπίεση κειμένου κατά LZW.
3.4 MAZE πρόγραμμα δημιουργίας λαβύρινθου, με αποδόμηση χώρου.
3.5 MAZE2 και εδώ λαβύρινθος αλλά με αλγόριθμο αναζήτησης κατά βάθος, ή depth first search. Εμφανίζει διαδοχικά (μέχρι να πατήσουμε ένα πλήκτρο, στο πληκτρολόγιο ή στο ποντίκι) διάφορα μεγέθη λαβυρίνθων, από 10Χ10 έως 60Χ40 (η οριζόντια διάσταση μπορεί να είναι 10, 20, 30, 40, 50 ή 60 και η κάθετη 10, 20, 30 ή 40. Κάθε φορά πριν ξεκινήσει ένα λαβύρινθο το πρόγραμμα υπολογίζει ένα χρόνο ανανέωσης και έτσι βλέπουμε σε στιγμιότυπα την κατασκευή του.
3.6 ΤΤΤ η τρίλιζα. Υπάρχει περίπτωση να χάσει ο υπολογιστής αλλά αν δεν το βρούμε πώς, θα κερδίζει ή θα φέρνει ισοπαλία!
3.7 Pend το εκκρεμές, εξομοίωση ενός εκκρεμές με φυσική κίνηση.
3.8 Tr Το πρόγραμμα "Τρια" που δείχνει τρεις παλμογράφους, ο καθένας με ξεχωριστή βάση χρόνου (άλλος πάει πιο αργά, άλλος πιο γρήγορα), και έχουμε πηγές σήματος ένα τρίγωνο, ένα εξάγωνο και ένα κύκλο. Κάθε σχήμα έχει μια ακίδα και όπως περιστρέφεται μετακινεί μια γραφίδα στο καταγραφικό. Το καταγραφικό εμφανίζει διαχωριστικές γραμμές, κινούμενες μαζί με την ένδειξη, και όλα αυτά χάνονται στην άλλη άκρη του. Το πρόγραμμα έχει φτιαχτεί έτσι ώστε τυχαία όταν ξεκινάει να επιλέγει ένα μέγεθος κονσόλας και προσαρμόζει τα στοιχεία του ανάλογα. Μπορούμε με τα πλήκτρα του ποντικιού να δίνουμε φορά και δύναμη παραπάνω, έτσι ώστε οι ταλαντώσεις να αυξομειώνουν συχνότητα.
3.9 DEMO1, αυτό είναι πρόγραμμα 3d, με χρήση τετραδονίων. Υπάρχει ένα αντικείμενο στην Μ2000 που παίρνει πίνακες τετραδονίων και εκτελεί μαζικά πράξεις. Τα τετραδόνια γράφονται σαν συλλογές τεσσάρων αριθμών σε πίνακα τύπου Διάρθρωση (Buffer) μνήμης. Το αντικείμενο έχει τρεις άξονες σε μια κορυφή και στις άλλες άκρες των αξόνων υπάρχουν σφαίρες. Το σχήμα περιστρέφεται και κάνει βόλτες (με μια σειρά προσαρμοσμένων τυχαίων επιλογών, αλλάζει διεύθυνση και σημείο περιστροφής στο χώρο). Μπορούμε να το σταματήσουμε (αναβοσβήνει χωρίς να αλλάζει θέση). Όλα αυτά σε ένα παράθυρο χρήστη, είναι συνάμα παραθυρική εφαρμογή, έχει νήματα που εκτελούν λειτουργίες βάσει χρόνου, όπως ένα που φτιάχνει τη νέα θέση, ένα άλλο που εμφανίζει το γράφημα, ένα άλλο που δείχνει την ώρα, και ένα ακόμα που χρησιμοποιείται όταν μπαίνει το γράφημα σε αναμονή κίνησης. Στην κάτω γραμμή της φόρμας υπάρχουν μετρητές που μετράνε την εκτέλεση κάθε νήματος. Επίσης πάνω στο φόντο, και πίσω από το γράφημα εμφανίζεται και μια μέτρηση χρόνου, όσο πιο γρήγορα τόσα πιο μικρότερο νούμερο δείχνει. Η ταχύτητα εξαρτιέται και από τον φόρτο του συστήματος. Πχ αν ανοίξουμε το πρόγραμμα τέσσερις φορές, θα λειτουργεί στο ένα τέταρτο του χρόνου εκτέλεσης του ενός. Ουσιαστικά το νήμα για την εμφάνιση ενεργοποιείται κάθε 1000/60 του χιλιοστού του δευτερολέπτου, ή αλλιώς 60 πλαίσια το δευτερόλεπτο. Οπότε θα χάνουμε κάποια πλαίσια γιατί θα πηδάει φάση το νήμα (πχ όταν τελειώνει θα έχουν περάσει δυο φορές τα 1000/60 χιλιοστά, καθώς επίσης θα βλέπουμε τη κίνησή του που είναι συνάρτηση με το νήμα που αλλάζει τα στοιχεία του, να είναι αργότερη, αφού θα χάνει και αυτό φάση και θα παίζει λιγότερες φορές το δευτερόλεπτο.

3.10 MEDITOR, μια εφαρμογή με ένα παράθυρο, τέσσερα μενού, δυο στοιχεία κειμένου, ένα με χρωματισμό κώδικα για τη Μ2000 και ένα άλλο για εμφάνιση βοήθειας (χρησιμοποιεί τη βάση δεδομένων με τη βοήθεια στα αγγλικά και στα ελληνικά για πεντακόσια περίπου αναγνωριστικά της Μ2000. Το παράθυρο μπορεί να αλλάξει μέγεθος, και έχει την ίδια εμφάνιση σε κάθε λειτουργικό, από XP έως και Windows 10 καθώς και στο Linux Ειδικά στο linux δεν φαίνεται το κουμπί minimize, όπως και στη λίστα του control box είναι σκιασμένο, γιατί πρακτικά το wine που τρέχει τα προγράμματα των windows δεν εμφανίζει κάποιο εικονίδιο στην taskbar. Αν το είχα αφήσει να "παίζει" τότε θα πάταγε κανείς το minimize και θα έχανε το πρόγραμμα (θα μπορούσε απλά να το κλείσει από το taskmgr του wine)

3.11 Form44 Ένα πρόγραμμα που εμφανίζει πίνακα παραθύρων με πίνακα στοιχείων (δυο πλήκτρων - buttons), και όλα αυτά τα διαχειριζόμαστε από συναρτήσεις εξυπηρέτησης γεγονότων, που γυρνούν εκτός από τις παραμέτρους όπως για τα απλά παράθυρα και στοιχεία ελέγχου, τον αριθμό του στοιχείου και τον αριθμό της φόρμας (παράθυρου). Ξεκινάει το πρόγραμμα με μια μεταβλητή Ν=3 για να φτιάξει τρεις φόρμες, αλλά μπορούμε άνετα να δώσουμε Ν=40. Για κάθε φόρμα φτιάχνει και ένα νήμα για να ζωγραφίζει αυτόματα γραμμές. Μπορούμε να γράφουμε κύκλους με το αριστερό πλήκτρο του ποντικιού σε κάθε φόρμα. Επίσης με το δεξί πλήκτρο αφαιρούμε ή εμφανίζουμε το στοιχείο "τίτλος" της φόρμα (έχει πάνω και τα πλήκτρα που κλείνει η φόρμα, και αλλά μπορούμε να κλείσουμε την φόρμα με το alt+F4). Πριν το κλείσιμο μας ρωτάει μια φόρμα διαλόγου (messagebox), ενώ τα νήματα παίζουν από πίσω, αν θέλουμε να κλείσουμε τη φόρμα. Αν κλείσει η δεύτερη φόρμα τότε απενεργοποιεί την αυτόματη σχεδίαση. Αν κλείσει η πρώτη φόρμα κλείνουν όσες είναι ήδη ανοικτές. Κάποια πλήκτρα είναι διάφανα, δηλαδή καθώς ζωγραφίζουμε εμφανίζεται η ζωγραφιά πίσω τους. Τα πλήκτρα δουλεύουν και με ολίσθηση δεξιά (εκτός από κλικ με το ποντίκι).
Υπάρχει στη δεύτερη φόρμα το πλήκτρο test το οποίο ανοίγει τη φόρμα ελέγχου και μπορούμε να βλέπουμε το κώδικα όπως εκτελείται ακόμα και για τα νήματα. Μπορούμε να βάλουμε βηματική λειτουργία, να πατάμε ένα πλήκτρο για να εκτελείται η επόμενη εντολή. Η εξυπηρέτηση γεγονότων είναι εκτός βηματικής λειτουργίας.

3.12 List33. Εδώ έχουμε μια φόρμα με ένα στοιχείο Λίστα, στο οποίο αφαιρούμε τον δικό του δρομέα (που θα έκανε μαύρο το φόντο με λευκά γράμματα) και δίνουμε αλλαγή χρώματος, με επιλογή για τα ανενεργά στοιχεία. Η λίστα είναι διάφανη, και πίσω της υπάρχει κεντραρισμένο στη φόρμα το Hello Word ως λεζάντα (κείμενο ως γραφικό που εμφανίζεται βάσει συντεταγμένων γραφικών). Μπορούμε να αλλάξουμε το μέγεθος της φόρμας, και θα μετακινηθεί ταυτόχρονα και η λεζάντα. Επίσης αν δώσουμε ένα κλικ στη φόρμα γίνεται ταξινόμηση της λίστας. Όταν πατάμε με διπλό κλικ σε κάποιο στοιχείο της λίστας τότε παίρνει ένα τικ ✓   ή αφαιρείται αν έχει, και εμφανίζεται και στο τίτλο της φόρμας. Τα μπλοκαρισμένα στοιχεία, τα μαθαίνει η λίστα με ένα γεγονός, που διαβάζει μια κατάσταση (inventory) όπου έχουμε δώσει τα ονόματα, και έτσι δεν χρησιμοποιεί το εσωτερικό πεδίο "σκίασης¨.

3.13 Au Εδώ έχουμε πάλι μια φόρμα με δυο στοιχεία, το ένα είναι ένα στοιχείο Λίστα.Εισαγωγής (combo) και ένα απλό στοιχείο κειμένου Εισαγωγή (textbox). Οι λίστες εισαγωγής έχουν δυο μέρη, ένα στοιχείο κειμένου και μια αναδιπλούμενη λίστα (dropdown list). Επίσης έχουν τρεις διαμορφώσεις. Μια είναι με το στοιχείο κειμένου να μην αλλάζει  (χρησιμοποιείται και για μενού). Μια ακόμα όπου το στοιχείο κειμένου αλλάζει με ότι έχει η λίστα. Τέλος και αυτό δείχνει αυτό το πρόγραμμα, είναι με συμπλήρωση της λίστας κατά την εισαγωγή, και εμφάνιση καθώς πληκτρολογούμε  Καθώς μετακινούμε το δρομέα της λίστας ένα γεγονός γεμίζει το δεύτερο στοιχείο. Κάθε νέα εισαγωγή δίνει ένα γεγονός και με αυτό δίνουμε την εντολή για ταξινόμηση.

3.14 Linked_List Πρόγραμμα που υλοποιεί μια συνδεδεμένη λίστα χρησιμοποιώντας αντικείμενα που έχουν δείκτες σε άλλα αντικείμενα.

3.15 OOP1. Πρόγραμμα που υλοποιεί γεγονότα (χωρίς να χρησιμοποιεί τα αντικείμενα Γεγονότα, ούτε τα ελαφριά γεγονότα των Ομάδων), και στηρίζεται στο μοντέλο observer pattern. Επειδή  το πρόγραμμα είχε γραφτεί πριν οι ομάδες (τα αντικείμενα χρήστη) αποκτήσουν δείκτες (δηλαδή η κάθε ομάδα χωρίς δείκτη είναι μοναδική, και βρίσκεται σε ένα μέρος, είτε έχει όνομα είτε έχει θέσει σε πίνακα ή άλλο αντικείμενο καταχώρησης), η σύνδεση παρατηρητή με συνδρομητή γίνεται με τη λεγόμενη ισχνή αναφορά, η οποία δηλώνει το όνομα του αντικείμενου. Η διαφορά με τους δείκτες είναι ότι σε αυτούς υπάρχει απαρίθμηση ως προς το πόσοι δείκτες δείχνουν το ίδιο αντικείμενο, και αυτό σημαίνει ότι το αντικείμενο θα "χαλάσει¨ με το που θα διαγραφεί και ο τελευταίος του δείκτης. Στις ισχνές αναφορές δεν υπάρχει απαρίθμηση. Το αντικείμενο θα "χαλάσει" όπως οι τοπικές μεταβλητές. Έτσι οι ισχνές αναφορές έχουν το ελάττωμα να γίνονται άκυρες αν αυτό που δείχνουν δεν υπάρχει. Στο πρόγραμμα όλα τα αντικείμενα είναι "επώνυμα", και έτσι μπορούν να δώσουν ισχνές αναφορές και αυτές αν καταχωρηθούν για χρήση. Η χρήση βγάζει κανονικές αναφορές από τις ισχνές, και χρησιμοποιούνται πρόσκαιρα. Η κανονική αναφορά είναι όπως το πέρασμα με αναφορά μιας μεταβλητής. Εδώ αναφορά είναι αυτή ως το πέρασμα με αναφορά ενός αντικειμένου τύπου ομάδα. Το πρόγραμμα φτιάχνει τα πάντα από το μηδέν. Φτιάχνει τον EventHandler ο οποίος φτιάχνει τα widgets, ενώνουμε στα widgets τους listeners που στο πρόγραμμα είναι δυο τύπων με κοινό interface, το mouselistener και το keylistener.  Ο EventHandler πρώτα δημιουργεί τρία widgets, τα Β1, Β2 και Β3 (το κάνει αυτός για να δώσει την δική του ισχνή αναφορά κατά τη δημιουργία). Κατόπιν βάζουμε στον EventHandler τους listeners που θέλουμε (παίρνει ο μεν για το πληκτρολόγιο, τον αριθμό πλήκτρου, ο δε για το ποντίκι επίσης τον αριθμό πλήκτρου ποντικιού. Αυτή η διαδικασία δίνει δίνει έναν handler, δηλαδή το νούμερο στη λίστα εντός του EventHandler, και με αυτό το νούμερο και την αναφορά ενός από τα Β1, Β2 & Β3 κάνουμε καταχώρηση register. Τα Β1, Β2, Β3 δεν έχουν "ιδέα" για το πώς καταχωρήθηκαν. Έχουν μόνο μια αναφορά προς το EventHandler για να στείλουν ερώτημα προς τα πίσω. Ο EventHantler κοιτάει ένα προς ένα τα Events, (τους listeners) καλώντας το CheckEvent σε αυτά. Δεν χρειάζεται να έχει κάποια αναφορά σε αυτά, γιατί τα έχει ήδη σε πίνακα Events(). Το κάθε event έχει μια λίστα με τα widgets που θα καλέσει όταν συμβεί το γεγονός. Το Β1 έχει συνδεθεί με τα πλήκτρα 1 και 2, το Β1 με το πλήκτρο 1, το Β3 με το αριστερό πλήκτρο του ποντικιού. Μόλις το EventHandler δει ότι πατήσαμε το 1, δηλαδή τη στιγμή που καλούσε το listener που έχει το 1 ως γεγονός, παίρνει μια προς μια τις καταχωρημένες στη λίστα του αναφορές και καλεί μέσω της αναφοράς μια συγκεκριμένη συνάρτηση που έχουν όλα τα widgets (τα οποία έφτιαξε ο Eventhandler). Από αυτή τη συνάρτηση θα κληθεί πάλι προς τα πίσω (τώρα το widget καλεί πίσω το EventHandler), δίνοντας στοιχεία το id, το όνομα του γεγονότος (που μόλις πήρε) και μια αναφορά για αυτόν. Αυτό δηλαδή γίνεται υποτίθεται ως φιλτράρισμα από το widget, και αναφορά παρουσίας, ή υπενθύμιση στο κεντρικό. Το κεντρικό με την αναφορά θα ζητήσει το όνομα του widget, το οποίο μπορεί να αλλάζει, και έτσι δεν το κράτησε το κεντρικό (EventHandler) για να αποδώσει πληροφορίες στην οθόνη. Η οθόνη δηλαδή γίνεται το σημείο επιθεώρησης των γεγονότων. Ο EventHandler θα συνεχίσει στα επόμενα widgets, για να τα καλέσει όλα.
Το πρόγραμμα αρχικά δείχνει ότι "παρατηρεί". Μόλις πατήσουμε το 1 παίρνουμε αναφορές για δυο στοιχεία, τα Β1 και Β2, ενώ με τα πλήκτρα 2 και το αριστερό του ποντικιού για τα Β2 και Β3.


Θα βρείτε και άλλα προγράμματα, τα οποία θα περιγράψω σε άλλες αναρτήσεις!
ΓΚ


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.