Εισαγωγή στη Γεωμετρία της Χελώνας
Παραδείγματα γραφικών με Logo
Online LOGOMSW Logo Kits (Complete installation kit for Windows)
Η γλώσσα προγραμματισμού Logo σχεδιάστηκε στα τέλη
της δεκαετίας του 60 για εκπαιδευτικούς κυρίως σκοπούς στο MIT από ομάδα ερευνητών
στην Τεχνητή Νοημοσύνη, με επικεφαλής τον Seymour
Papert.
Η Logo αρχικά περιοριζόταν στην επεξεργασία καταλόγων
και λέξεων , γρήγορα όμως επεκτάθηκε και στη δημιουργία γραφικών με τη βοήθεια
ενός μικρού ρομπότ που κατευθύνεται από υπολογιστή.
Το ρομπότ αυτό είναι η χελώνα εδάφους της Logo που εκτελεί
απλές κινήσεις. Προχωράει μόνο ευθύγραμμα, εμπρός ή πίσω και στρίβει αριστερά
ή δεξιά με εντολές που δίνονται από το πληκτρολόγιο.
Το ρομπότ είναι εφοδιασμένο με μολύβι που διαγράφει όταν είναι κατεβασμένο (ακουμπά
στο έδαφος) με κατάλληλη εντολή, την κίνηση της χελώνας, ενώ, όταν είναι ανεβασμένο,
η χελώνα δεν αφήνει κανένα ίχνος κατά την κίνησή της. Έτσι δημιουργούνται τα
γραφικά της χελώνας.
Η εξέλιξη των υπολογιστών επέτρεψε τη δημιουργία πιο εξελιγμένων εκδόσεων της
Logo, προσαρμοσμένων στα PC, όπου το ρομπότ-χελώνα αντικαθίσταται από την χελώνα
οθόνης.
Η χελώνα οθόνης είναι στην ουσία ο δρομέας γραφικών της Logo που η κίνησή του
με κατάλληλες εντολές δημιουργεί εκπληκτικά γραφικά. Εμφανίζεται στην οθόνη
με την μορφή μικροσκοπικής χελώνας. Οι εντολές που κινούσαν το ρομπότ-χελώνα,
κινούν τώρα τη χελώνα οθόνης. Αυτές είναι οι εντολές γραφικών της Logo.
Βασικές Εντολές της γλώσσας LOGO
fd n (number) | μ ή μπροστά n (αριθμός) |
bk n (number) | π ή πίσω n (αριθμός) |
lt n (number) | α ή αριστερά n (αριθμός) |
rt n (number) | δ ή δεξιά n (αριθμός) |
cs ή cg | σβγ ή σβησεγραφικα |
ht | κχ ή κρυψεχελωνα |
st | δχ ή δειξεχελωνα |
pd | σκ ή στυλοκατω |
pu | σπ ή στυλοπανω |
repeat n (integer) [commands] | επαναλαβε ν (ακεραιος) [εντολές] |
to name of process | για όνομα διαδικασίας |
end | τελος |
home | στηναρχη |
clean | καθαρισε |
setxy x1 y1 | θεσεχψ x1 y1 |
make "name value | θεσε "ονομα τιμη |
ask [turtle-name] [commands] | |
integer number | ακεραιος αριθμος |
round number | στρογγυλοποιηση αριθμος |
wait n (integer) | περιμενε ν (ακεραιος) |
stop | |
if συνθηκη ελεγχου [λιστα εντολων] | |
ifelse συνθηκη ελεγχου [λιστα-1 εντολων] [λιστα-2 εντολων] |
fd n
Μετακινεί την χελώνα εμπρός (στην κατεύθυνση προς την οποία είναι προσανατολισμένη), κατά n βήματα χελώνας.
Το βήμα χελώνας, είναι μια μικρή απόσταση που εξαρτάται από την ανάλυση της οθόνης του υπολογιστή. Πχ. Σε μια ανάλυση οθόνης 800Χ600, 100 βήματα χελώνας ~ 3.5 cm
Πχ. fd 100
bk n
Μετακινεί την χελώνα πίσω (ακριβώς αντίθετα προς την κατεύθυνση στην οποία είναι προσανατολισμένη), κατά n βήματα χελώνας.
Ο προσανατολισμός της χελώνας δεν αλλάζει.
Πχ. bk 60
lt n
Στρέφει τη χελώνα αριστερά (αντίθετα από τη φορά των δεικτών του ρολογιού) κατά n μοίρες.
Πχ. lt 120
rt n
Στρέφει τη χελώνα δεξιά (κατά τη φορά των δεικτών του ρολογιού) κατά n μοίρες.
Πχ. rt 90
cs ή cg
Καθαρίζει τα γραφικά από την οθόνη, δηλαδή τα σχήματα της χελώνας και επαναφέρει τη χελώνα ή τις χελώνες στην αρχική τους θέση στην οθόνη.
ht
Κρύβεται η χελώνα (παύει να είναι ορατή), εξακολουθεί όμως να εκτελεί τις οδηγίες που της δίνουμε.
st
Κάνει και πάλι ορατή τη χελώνα, που είχε εξαφανιστεί μετά την εντολή ht.
pd
Κατεβαίνει το μολύβι της χελώνας και διαγράφεται το ίχνος της κίνησής της.
pu
Σηκώνεται το μολύβι της χελώνας, ώστε να μη διαγράφεται η τροχιά της.
repeat n [ ]
Με την εντολή αυτή επαναλαμβάνεται n φορές (βρόχος) η εκτέλεση των εντολών που περιλαμβάνονται στις αγκύλες. Οπου n ακέραιος αριθμός.
Πχ.
repeat 50 [fd 2 pu fd 2 pd]
to name of process
Κωδική λέξη που δηλώνει την αρχή του ορισμού μιας διαδικασίας.
end
Δηλώνει το τέλος του ορισμού μιας διαδικασίας και την οριοθετεί σε σχέση με τις άλλες, της ίδιας σελίδας.
Πχ.
to tetragono
repeat 4 [fd 100 rt 90]
end
Η λέξη to ειδοποιεί το σύστημα ότι αυτά που ακολουθούν μέχρι την λέξη end αποτελούν τον ορισμό μιας διαδικασίας. Τα όνομά της πρέπει να είναι λέξη διαφορετική από αυτές που συμπεριλαμβάνονται ήδη στο λεξιλόγιο της Logo αλλά και από αυτές που έχουμε ήδη ορίσει.
Μετά τον ορισμό μιας νέας διαδικασίας, το όνομά της συγκαταλέγεται στο λεξιλόγιο της Logo που την αναγνωρίζει στο εξής όπως ακριβώς και τις αρχέτυπες διαδικασίες. Έτσι, μια καινούργια λέξη (εντολή) έχει προστεθεί στο λεξιλόγιό της.Μπορούμε λοιπόν να την καλούμε με το όνομά της κάθε φορά που θέλουμε να εκτελεστεί. Τη νέα αυτή εντολή μπορούμε να τη χρησιμοποιήσουμε όπως και τις αρχέτυπες. Μπορούμε να τη συνδυάσουμε με άλλες εντολές και να φτιάξουμε όμορφα γραφικά.
Πχ.
to skedio
repeat 36 [rt 10 tetragono]
end
home
Επαναφέρει τη χελώνα (ή τις χελώνες) στην αρχική τους θέση, με κατεύθυνση προς τα πάνω (κλίση 0).
clean
Καθαρίζει από την οθόνη όλα τα γραφικά αφήνοντας τη χελώνα (ή τις χελώνες) στη θέση τους.
setxy x1 y1
Μετακινεί την χελώνα στη θέση της οθόνης που έχει συντεταγμένες (x1, y1).
Πχ.
setxy -30 80
make "name value
Δημιουργεί μια "σφαιρική" μεταβλητή (global variable) με το όνομα που διαλέξαμε και της δίνει σαν τιμή αυτή που ορίζουμε.Κατά την εκτέλεση ενός προγράμματος, το όνομα της μεταβλητής δε μεταβάλλεται. Κάθε καινούργιο όνομα δεσμεύει και μια νέα θέση μνήμης. Η τιμή της όμως μπορεί να μεταβληθεί πολλές φορές.
Κάθε φορά που χρησιμοποιούμε την εντολή make με το ίδιο όνομα μεταβλητής, η νέα τιμή αντικαθιστά την προηγούμενη.
Πχ. make "a 35 δημιουργεί τη μεταβλητή α, στην οποία δίνει την τιμή 35.
Η έκφραση "τιμή της μεταβλητής a" στη Logo συμβολίζεται με :a
Αν τώρα πληκτρολογήσουμε fd :a η χελώνα προχωρά 35 βήματα μπροστά.
Η εντολή make "a :a+1 έχει ως αποτέλεσμα την αύξηση της τιμής της μεταβλητής a κατά 1.
Μπορούμε να ορίσουμε διαδικασίες με στοιχεία εισόδου (ένα ή περισσότερα) ώστε να τις χρησιμοποιούμε με τις τιμές που εισάγουμε τη στιγμή που τις καλούμε.
Πχ.
to tetragono :x
repeat 4 [fd :x rt 90]
end
Αν πληκτρολογήσουμε tetragono 50 η χελώνα σχηματίζει ένα τετράγωνο με πλευρά 50 βήματα χελώνας.
Αν πληκτρολογήσουμε tetragono 100 η χελώνα σχηματίζει ένα τετράγωνο με πλευρά 100 βήματα χελώνας.
Αν πληκτρολογήσουμε tetragono δε θα σχεδιαστεί κανένα τετράγωνο και θα εμφανιστεί το μήνυμα: tetragono needs more inputs.
Παρατηρούμε ότι δίπλα στο όνομα tetragono της διαδικασίας σημειώνεται η έκφραση "τιμή της μεταβλητής x" δηλ. :x Αυτή η σύνταξη γιατη Logo έχει το νόημα δήλωσης. Δηλώνεται ότι πρόκειται για διαδικασία με ένα στοιχείο εισόδου. Αυτό σημαίνει ότι στον κορμό της διαδικασίας υπάρχει μεταβλητή με το ίδιο όνομα, που η τιμή της εισάγεται κατά τη στιγμή που καλούμε τη διαδικασία. Αυτή η διαδικασία είναι πλέον γενική.Ισχύει για τετράγωνο με οποιοδήποτε μήκος πλευράς. Η μεταβλητή που δηλώνεται στον τίτλο της διαδικασίας, καλείται και παράμετρος.
Η Logo χειρίζεται τις μεταβλητές με δύο τρόπους.Με την εντολή make δεσμεύει μια θέση στη μνήμη του υπολογιστή για τη συγκεκριμένη μεταβλητή.
Η μεταβλητή παραμένει στην μνήμη του υπολογιστή όσο είναι ανοικτός.
Όταν όμως έχουμε παράμετρο σε μία διαδικασία, δε συμβαίνει το ίδιο.
Στην περίπτωση αυτή ο υπολογιστής δεσμεύει προσωρινά, και μόνο για όσο εκτελείται η διαδικασία, μια θέση μνήμης όπου καταχωρεί την τιμή που δίνουμε στην παράμετρο της μεταβλητής τη στιγμή που την καλούμε, για να τη χρησιμοποιήσει αποκλειστικά στο εσωτερικό της διαδικασίας.
Αφού ολοκληρωθεί η εκτέλεση, η τιμή της μεταβλητής δε χρειάζεται πλέον και χάνεται από τη μνήμη του υπολογιστή.
Γι' αυτό λέμε ότι πρόκειται για μια τοπική μεταβλητή (local variable), σε αντιδιαστολή με τη μεταβλητή που δημιουργείται με την εντολή make (σφαιρική μεταβλητή, global variable).
ask [turtle-name] [commands]
Προσδιορίζει ποια χελώνα αφορά η λίστα εντολών.
Πχ. η ask [lor] [fd 30] κατευθύνει την χελώνα lor να εκτελέσει την εντολή fd 30.
integer number
Δίνει εξαγόμενο το ακέραιο μέρος του αριθμού που ακολουθεί.
round number
Δίνει εξαγόμενο τον πλησιέστερο ακέραιο (στρογγυλοποιεί τον αριθμό).
wait n (integer)
Η εκτέλεση της εντολής αυτής προκαλεί μια απασχόληση του υπολογιστή για n χρονικές μονάδες, χωρίς κανένα εμφανές αποτέλεσμα. Έτσι, η εντολή αυτή μέσα σε ένα πρόγραμμα προκαλεί μια παύση στην εκτέλεσή του, για n/20 του δευτερολέπτου περίπου.
Πχ. wait 10 σημαίνει παύση για μισό περίπου δευτερόλεπτο και μετά συνεχίζεται η εκτέλεση.
stop
Χρησιμοποιείται μόνο στο εσωτερικό μιας διαδικασίας και προκαλεί τη διακοπή της εκτέλεσης. Αν αυτό συμβεί στο εσωτερικό μιας υπο-διαδικασίας (διαδικασίας που καλείται μέσα από κάποια άλλη), τότε η ροή εκτέλεσης συνεχίζεται στην κύρια διαδικασία αμέσως μετά από το σημείο απ' όπου έχει κληθεί αυτή που διακόπηκε.
if συνθηκη ελεγχου [λιστα εντολων]
Κωδική λέξη που δηλώνει τη διενέργεια ελέγχου για τη συνέχιση της ροής του προγράμματος.Αν η συνθήκη που ακολουθεί είναι αληθής, εκτελείται η λίστα εντολών μέσα στην αγκύλη, διαφορετικά αγνοείται και η ροή συνεχίζεται στην εντολή που ακολουθεί.
Πχ.
to spiral :size :angle
if :size > 100 [stop]
fd :size
rt :angle
spiral :size+2 :angle
end
ifelse συνθηκη ελεγχου [λιστα-1 εντολων] [λιστα-2 εντολων]
Κωδική λέξη που δηλώνει εναλλακτική δομή ελέγχου. Αν η συνθήκη
είναι αληθής εκτελείται η πρώτη λίστα εντολών, διαφορετικά εκτελείται η δεύτερη.