Πέμπτη, 14 Σεπτεμβρίου 2017

Διαφορές μεταξύ ΓΛΩΣΣΑΣ (ΑΕΠΠ) και Μ2000


Μερικά παραδείγματα σε ΓΛΩΣΣΑ είναι από εδώ: http://alkisg.mysch.gr/ΓΛΩΣΣΑ/



Τύποι Δεδομένων στη ΓΛΩΣΣΑ:
Ο τύπος ΛΟΓΙΚΟΣ δεν υποστηρίζεται άμεσα. χρησιμοποιούμε τον Ακέραιο ή τον Πραγματικό. Μη μηδενική τιμή λογαριάζεται για αληθές. Υπάρχουν τα ΑΛΗΘΗΣ και ΨΕΥΔΗΣ οπότε το παρακάτω δημιουργεί πραγματικό με τιμή ΑΛΗΘΗΣ:
Μ2000:
Α=ΑΛΗΘΗΣ
Η Μ2000 έχει αρκετούς τύπους δεδομένων που δεν υποστηρίζει η ΓΛΩΣΣΑ όπως η Κατάσταση (λίστα τιμών με κλειδί), ο Σωρός Τιμών (συνδεδεμένη λίστα) , η συνάρτηση λάμδα κ.α.



Οι ακέραιες μεταβλητές στη Μ2000 έχουν το % στο τέλος και είναι εσωτερικά πραγματικές (double). Το Α%=12.5 θα γίνει 13
Υπάρχει δε και ο τύπος Μακρύς που δημιουργεί 32bit ακέραιο, και ο οποίος δεν έχει το % (ανήκει στις ειδικές μεταβλητές της Μ2000)



Στη Μ2000 το (1,2,3,4) δίνει αυτόματο πίνακα μονοδιάστατο τεσσάρων στοιχείων, ενώ το ((1,2),(3,4)) δίνει έναν αυτόματο πίνακα δυο στοιχείων όπου κάθε στοιχείο είναι πίνακας δύο στοιχείων. Οι πίνακες μπορούν να πάρουν και αλφαριθμητικά, και αντικείμενα . Αντικείμενα είναι οι πίνακες, καταστάσεις ειδών, σωροί τιμών (ειδική στοίβα συνδεδεμένων στοιχείων με εύκολη αλλαγή θέσης), λάμδα συναρτήσεις, ομάδες (αντικείμενα με μέλη οποιοδήποτε τύπο μεταβλητής, τμήματα, συναρτήσεις, τελεστές καθώς και ομάδες και ιδιότητες που είναι επίσης αντικείμενα ομάδες), γεγονότα δηλαδή συλλογές συναρτήσεων που καλούνται με μια κλήση και διαδοχικό πέρασμα τιμών (multicast)



Βάση Πινάκων:
Στη ΓΛΩΣΣΑ οι πίνακες έχουν βάση το 1, δηλαδή ένας πίνακας 50 στοιχείων έχει το πρώτο στοιχείο στη θέση 1. Στη Μ2000 αυτό μπορεί να ρυθμιστεί ως 1 ή ως 0. Εξ ορισμού είναι 0, και μπορούμε με την εντολή Βάση 1 να ορίσουμε ότι κάθε πίνακας μετά την εκτέλεση της εντολής θα είναι με βάση το 1. Μπορούμε να ορίσουμε πίνακες με τη βάση που θέλουμε, ή να αλλάξουμε τη βάση του πίνακα, χωρίς να πειράξουμε τα δεδομένα. Υπάρχει τρόπος να γνωρίζουμε τη τρέχουσα βάση κάθε πίνακα.



Αλφαριθμητικά:
Στη ΓΛΩΣΣΑ ορίζονται με απλά ή με διπλά εισαγωγικά. Στη Μ2000 με διπλά ή με αγκύλες. (με αγκύλες βάζουμε και αλλαγές γραμμών).
Οι μεταβλητές για αλφαριθμητικά έχουν απαραίτητα το $ στο τέλος.



Μέρη Προγράμματος:
Στη ΓΛΩΣΣΑ αναφέρονται τα μέρη του προγράμματος, ως τμήματα: Η επικεφαλίδα, το τμήμα δήλωσης σταθερών, το τμήμα δήλωσης μεταβλητών, το κυρίως σώμα. τα υποπρογράμματα. Τα τμήματα δηλώσεων δεν είναι υποχρεωτικά.



Στη Μ2000 η λέξη τμήμα δηλώνει μια μονάδα προγράμματος, η οποία μπορεί να έχει και άλλες εσωτερικά. Οι μεταβλητές ορίζονται με απόδοση τιμής, και σε κάποιες περιπτώσεις με δήλωση. Δεν μπορεί να χρησιμοποιηθεί σε παράσταση όνομα που δεν έχει δηλωθεί ή δεν έχει ορισθεί κατάλληλα. Πρέπει να ορίσουμε ένα τμήμα πριν το καλέσουμε.



Τα τμήματα της Μ2000 μπορούν να έχουν ρουτίνες (υπορουτίνες όπως στη ΓΛΩΣΣΑ στο τέλος του κώδικά τους). Οι συναρτήσεις στη ΓΛΩΣΣΑ γράφονται στις δηλώσεις υποπρογράμματων, ενώ στη Μ2000 είναι σαν τα τμήματα, γράφονται οπουδήποτε, και μπορούν να έχουν τμήματα., συναρτήσεις, και ρουτίνες.



Υποπρογράμματα:
Στη ΓΛΩΣΣΑ όλα τα υποπρογράμματα είναι γενικά! Δηλαδή από κάθε υποπρόγραμμα μπορούμε να καλέσουμε ένα οποιοδήποτε άλλο. Στη Μ2000 ένα τμήμα μπορεί να καλέσει ένα γενικό τμήμα ή ένα τμήμα που ορίστηκε σε αυτό, αλλά όχι τον εαυτό του. Οι ρουτίνες (υποπρογράμματα σε τμήματα) μπορούν να καλέσουν οποιαδήποτε ρουτίνα υπάρχει στο τμήμα, και τον εαυτό τους. Οι ρουτίνες στη Μ2000 γράφονται στο τέλος.



Πέρασμα Τιμών:

Γλώσσα:
  • Πέρασμα με αναφορά εκτός αν δεν γίνεται αλλιώς (πχ έχουμε στόχο μια Συνάρτηση, ή έχουμε έκφραση ως παράμετρο)
  • ορίζουμε στην αρχή τύπο παραμέτρων για τα υποπρογράμματα (τις λέμε τυπικές παραμέτρους)
  • όλες οι παράμετροι κατά τη κλήση πρέπει να είναι επακριβώς όπως ορίστηκαν ως τυπικές παράμετροι στο υποπρόγραμμα, αν περνάνε με αναφορά, ή με εκφράσεις που δίνουν τον ίδιο τύπο, και ενημερώνονται οι τυπικές παράμετροι στην αρχή της κλήσης. Αν θέλουμε μια μεταβλητή να περαστεί με τιμή, τότε την βάζουμε σε παρένθεση (την δίνουμε σαν παράσταση)
  • Στις Συναρτήσεις δεν μπορούμε να περάσουμε με αναφορά μεταβλητές (οι συναρτήσεις έχουν μια επιστροφή τιμής).
  • Στις Συναρτήσεις ορίζουμε επακριβώς τον τύπο της τιμής επιστροφής.
  • Οι πίνακες σε πέρασμα με τιμή (σε συναρτήσεις ή διαδικασίες) θα περαστούν με αντιγραφή

Μ2000:

Σίγουρα η Μ2000 έχει περισσότερες δυνατότητες ως προς το πέρασμα τιμών, φαίνεται και από την λίστα παρακάτω, και αυτό ίσως να την βάζει στις δύσκολες γλώσσες. Όμως δεν είναι υποχρεωμένος κανείς να τα χρησιμοποιήσει όλα.
  • Πέρασμα με τιμή πάντα, και με έμμεσους τρόπους αυτό φαίνεται και ως πέρασμα με αναφορά.
  • Τα περάσματα γίνονται σε ένα σωρό τιμών, που είναι διαχειρίσιμος με εντολές, και ως προς το μέγεθος και ως προς την ανάγνωση τύπου.
  • Η εντολή Διάβασε διαβάζει τα ορίσματα των τυπικών παραμέτρων.
  • Δεν απαιτείται να ορίζουμε στην αρχή παραμέτρους. Ορίζονται με την εντολή Διάβασε οπουδήποτε στο Τμήμα/Συνάρτηση/Ρουτίνα (ο καλούμενος).
  • Λέμε ορίσματα τις τιμές που βάζουμε στο σωρό και αυτές διαβάζονται (και ορίζουν αν δεν υπάρχουν ήδη) τις παραμέτρους από την πλευρά του καλούμενου
  • Δεν γίνεται έλεγχος στο τύπο και στον αριθμό ορισμάτων, όμως το & στην κλήση πίσω από όνομα θα δώσει την ισχνή αναφορά του ονόματος ενώ το & στο διάβασμα θα δώσει την ισχνή αναφορά στο όνομα που ακολουθεί (αν δεν ακολουθεί όνομα, ή δεν υπάρχει ισχνή αναφορά τότε βγαίνει λάθος). Ισχνή αναφορά είναι το κλειδί σε μια Λίστα δεδομένων στη Μ2000.
  • Δεν επιτρέπεται να δώσουμε δεύτερη αναφορά σε ένα όνομα που έχει οριστεί. Αν το είναι απαραίτητο όμως μπορούμε να το κάνουμε σε νέο όνομα που θα σκιάσει το υπάρχον με μια Διάβασε Νέο.
  • Μπορούμε να δεχόμαστε προαιρετικές τιμές με την Διάβασε ?. Μπορούμε στην κλήση να δώσουμε το ? ως "αδιάφορο" για να κρατήσει η Διάβασε την τρέχουσα τιμή ή αν δεν υπάρχει την αρχική που προβλέπεται σε μια μεταβλητή. Σε συναρτήσεις μπορούμε απλά να παραλείπουμε τιμές και να παραθέτουμε το κόμμα μέχρι εκεί που θα βάλουμε τιμή).  Η δήλωση Κ=10 : Διάβασε ? Κ θα αφήσει την Κ με 10 αν δεν βρει κάτι στο σωρό, ή αν βρει το "αδιάφορο" (το περνάμε με το ?). Όμως αν υπάρχει αλφαριθμητικό θα βγει λάθος! Στη κλήση τμήματος έστω Αλφα αν έχουμε έστω δυο παραμέτρους με προαιρετικό διάβασμα, και δεν θέλουμε να περάσουμε καμία τιμή πρέπει να αποκλείσουμε την περίπτωση να τραβήξει από το σωρό άλλες υπάρχουσες τιμές. Έτσι καλούμε με Άλφα ?, ?
  • Άδειασε  \\ αδειάζει το σωρό
    Τμήμα βητα {
           
    Διάβασε ? X, Y
           
    Τύπωσε X, Y
           
    Βάλε 100
    }
    Συνάρτηση αλφα {
          
    Διάβασε ? X, Y
          
    Τύπωσε X, Y
          
    Βάλε 10
          =0
    }

    \\ βάζουμε κάτι στο σωρό
    Βάλε 1000

    \\ ο σωρός θα είναι αυτός του τμήματος
    βήτα ?,?

    \\ ο σωρός θα είναι νέος
    Ν=αλφα(,)

    \\ ο σωρός με την κάλεσε θα είναι αυτός του τμήματος
    Κάλεσε αλφα(?,?)

    \\ μας δείχνει το σωρό
    Σωρός



  • Στις συναρτήσεις μπορούμε να επιστρέψουμε πολλές τιμές ως πίνακα πχ. το =1,2 θα δώσει πίνακα. Αν θέλουμε να δώσουμε πίνακα ενός στοιχείου θα χρησιμοποιήσουμε το τρόπο δήλωσης αυτόματου πίνακα: (10,)  (δείτε το κόμμα πριν το κλείσιμο), το (,) είναι ο κενός πίνακας ενώ το (1,2) είναι πίνακας δυο στοιχείων.
  • Στις συναρτήσεις το $ στο όνομά τους δηλώνει ότι θα γυρίσουν αλφαριθμητικό, ή αντικείμενο που γυρίζει αλφαριθμητικό. Έτσι στο Α$=Συναρτ$() το Α$ μπορεί να είναι αλφαριθμητικό ή αντικείμενο που γυρνάει αλφαριθμητικό. 
  • Οι πίνακες μπορούν να περαστούν με αντιγραφή, με αναφορά, με δείκτη. Επειδή η αντιγραφή θα γίνει στο διάβασμα, αν στο διάβασμα ζητάμε δείκτη τότε θα πάρουμε δείκτη, θα γίνει από πέρασμα με αντιγραφή σε πέρασμα με δείκτη. Στο πέρασμα με αναφορά δεν μπορούμε να το μετατρέψουμε σε πέρασμα με αντιγραφή, άμεσα, αλλά οποτεδήποτε βγάζουμε αντίγραφο πίνακα.
  •  Οι συναρτήσεις μπορούν να περαστούν με αναφορά. Αντί να γραφτεί κάποια ισχνή αναφορά σε μια συνάρτηση θα γραφτεί απευθείας ο κώδικάς της, και έτσι με την Διάβασε θα σχηματιστεί αμέσως μια νέα συνάρτηση με αυτόν τον κώδικα. Μπορούμε να περάσουμε μια ανώνυμη συνάρτηση ως αλφαριθμητικό έτσι: "{Διάβασε Χ : = Χ*Χ}"



Εκχώρηση τιμής:
Στη ΓΛΩΣΣΑ η εκχώρηση γίνεται με το <-, με δυο χαρακτήρες ή ένας ←(unicode). Στη Μ2000 υπάρχουν τρία σύμβολα εκχώρησης: =. <= και :=. Το = δημιουργεί τοπική μεταβλητή αν δεν υπάρχει (εκτός και αν στην γραμμή εμφανίζεται μια λέξη από τα Γενικό ή Γενική ή Γενικές). Το <= αλλάζει τιμές σε γενικές, και σε μέλη αντικειμένων (εντός τμημάτων τους). Το := χρησιμοποιείται για εκχώρηση πολλαπλών τιμών σε πίνακες (και το = μπορεί να χρησιμοποιηθεί για πολλαπλές τιμές σε πίνακες), καθώς και για τιμές σε εντολές για πολλαπλές εκχωρήσεις σε αντικείμενα.



Στη Μ2000 το Α%=-5.5 θα κάνει το Α% να έχει τιμή -6, δηλαδή θα γίνει αυτόματη μετατροπή σε ακέραιο. Στη ΓΛΩΣΣΑ αυτό δεν επιτρέπεται, ενώ επιτρέπεται να δώσουμε ακέραια τιμή σε πραγματικό (όπως και στη Μ2000).



Τυπική εμφάνιση κώδικα στη ΓΛΩΣΣΑ:
Μια εντολή ανά γραμμή. Στη Μ2000 εκτός από μια περίπτωση που μόνο μια εντολή μπορούμε να βάλουμε σε μια γραμμή (στην δομή Επίλεξε, αν δεν βάλουμε μπλοκ εντολών με αγκύλες), σε κάθε άλλη περίπτωση μπορούμε με διαχωριστική άνω και κάτω τελεία να βάζουμε εντολές (όπως στη BASIC)
Η Γλώσσα πάντα εμφανίζεται μια γραμμή εντολών σε μια γραμμή στον διορθωτή της. Στη Μ2000 μπορούμε να ορίσουμε αναδίπλωση λέξης και να έχουμε μια γραμμή εντολών που να εμφανίζεται σε πολλές γραμμές (με F1 αλλάζουμε από αναδίπλωση σε χωρίς αναδίπλωση). Μπορούμε να έχουμε αλφαριθμητικές σταθερές πολλαπλών παραγράφων, και με την αναδίπλωση μας βοηθάει να τις βλέπουμε και να τις διορθώνουμε).
Στη Μ2000 μπορούμε να βάζουμε αριθμούς γραμμων πριν από εντολές (μεχρι 5 ψηφία και μπορούν να υπάρχουν μηδενικά στην αρχή πχ το 0010 είναι το 10. Οι αριθμοί έχουν την λειτουργία των ετικετών, και μπορούν να μπουν όπως θέλουμε.


προς 10


εξοδος
0010 τύπωσε "10"




Έτοιμες Συναρτήσεις:
Η ΓΛΩΣΣΑ έχει την E() ως eX
Στη Μ2000 πρέπει να την ορίσουμε:


Κάνε εκθ(χ)= 2.71828182845905^χ
Τύπωσε Λφ(εκθ(1.24412))
Τύπωσε Λφ(2.71828182845905)



Στη ΓΛΩΣΣΑ έχουμε το ΛΟΓ() για φυσικό λογάριθμο, ενώ στη Μ2000 αυτή η συνάρτηση είναι ο δεκαδικός λογάριθμος, και ο ΛΦ() ο φυσικός λογάριθμος. Στα ημίτονα/συνημίτονα έχουμε μοίρες και στις δυο γλώσσες. Το ακέραιο μέρος Α_Μ() στη Μ2000 είναι ΑΚ(), η απόλυτη τιμή Α_Τ() είναι ΑΠΟΛ(). Η εφαπτομένη ΕΦ() είναι στη Μ2000 ως ΕΦΑΠ(), ενώ υπάρχει και το ΤΟΞ.ΕΦ() για το τόξο εφαπτομένης. Η τετραγωνική ρίζα Τ_Ρ υπάρχει ως ΡΙΖΑ(). Τέλος η Μ2000 έχει έναν μεγάλο αριθμό συναρτήσεων που σχετίζονται με δεδομένα, με ώρα, με χρόνο, με συγκρίσεις, καθώς επίσης και συναρτήσεις για αλφαριθμητικά που λείπουν από την ΓΛΩΣΣΑ.



Η εντολή ΓΡΑΨΕ στη ΓΛΩΣΣΑ:
Η αντίστοιχη στη Μ2000 είναι η ΤΥΠΩΣΕ (ενώ υπάρχει η ΓΡΑΨΕ για αρχεία). Υπάρχουν πολλές διαφορές γιατί στην ΤΥΠΩΣΕ η Μ2000 λογαριάζει στήλες και τρόπο στοίχισης σε αυτές, και μπορούν να μεταβληθούν. Ο δρομέας χαρακτήρων μπορεί να τοποθετηθεί όπου θέλουμε με συντεταγμένες γραμμή και στήλη. Οι πίνακες και άλλες δομές εμφανίζουν άμεσα τις τιμές τους με την Τύπωσε:

Πίνακας Α(4)
Α(0):=1,2,3,4
Τύπωσε Α()



Η εντολή ΔΙΑΒΑΣΕ στη ΓΛΩΣΣΑ:
Η ΔΙΑΒΑΣΕ εισάγει τιμές σε μεταβλητές που πληκτρολογούμε. Στη Μ2000 αυτό το κάνει η εντολή ΕΙΣΑΓΩΓΗ ενώ η ΔΙΑΒΑΣΕ διαβάζει από το σωρό τιμών. Επίσης η εντολή ΕΙΣΑΓΩΓΗ με αριθμό αρχείου (μεταβλητή με # στην αρχή) διαβάζει τιμές από αρχείο που έχει γραφτεί με την ΓΡΑΨΕ, ενώ η ΕΙΣΑΓΩΓΗ ΓΡΑΜΜΗΣ διαβάζει από αρχείο ολόκληρη γραμμή που έχει τυπωθεί με την ΤΥΠΩΣΕ και με αριθμό αρχείου. Η ΓΛΩΣΣΑ δεν υποστηρίζει αρχεία, αλλά μπορούν έμμεσα να χρησιμοποιηθεί τουλάχιστον ένα αρχείο εισαγωγής τιμών σε περιβάλλον διερμηνευτή.



Ανάπτυξη Δομών Ροής/Προγράμματος:
Στη ΓΛΩΣΣΑ υπάρχουν δυο λέξεις (αναγνωριστικά) τουλάχιστον που ενσωματώνουν κώδικα, μια λέξη αρχής και μια λέξη τέλους. Στην Μ2000 κώδικας ενσωματώνεται σε αγκύλες { } εκτός:
Η ΓΙΑ ή οποία έχει δυο τρόπους, έναν με αγκύλες και έναν χωρίς, και η Αν Τότε ή Αν Αλλιώς όταν δεν χρησιμοποιούμε άλλο μέρος (πχ Αλλιώς.Αν ή Τότε πριν την Αλλιώς). Ειδικά στην Αν μετά την Τότε (αν δεν υπάρχει η Αλλιώς μετά) μπορούμε σε μια γραμμή να βάλουμε εντολές με διαχωριστική άνω και κάτω τελεία μέχρι το τέλος της παραγράφου.



Η εντολή ΑΝ στη ΓΛΩΣΣΑ:
Στις συγκρίσεις η Μ2000 χρησιμοποιεί και το == για αριθμητικές εκφράσεις, με περιορισμό στην ακρίβεια κατά τη σύγκριση.
Η ΑΝ έχει ακόμα τέσσερα αναγνωριστικά, την ΤΟΤΕ, την ΑΛΛΙΩΣ_ΑΝ, την ΑΛΛΙΩΣ και την ΤΕΛΟΣ_ΑΝ
Ομοίως στη Μ2000 η ΑΝ έχει την ΤΟΤΕ, την ΑΛΛΙΩΣ.ΑΝ την ΑΛΛΙΩΣ αλλά δεν έχει κάποια "τέλος αν" γιατί τελειώνει στο τέλος της παραγράφου (ή γραμμής) ή αν ξεκινάει μπλοκ σε αγκύλες στο τέλος του μπλοκ.
Πχ στη Μ2000
Αν Χ>5 Τότε {
εντολες.....
}
Αν Χ=10 Τότε Εντολη1 : Εντολη2:............ ΕντολήΝ
Δείτε εδώ με την Αλλιώς στη θέση της Τότε δηλαδή εκτελείται όταν το Ζ δεν θα είναι ίσο με 100
Αν Ζ=100 Αλλιώς Εντολή1: Εντολη2:......ΕντολήΝ



Και εδώ με όλα τα καλά:
Αν Χ>10 Τότε { εντολές...
} Αλλιώς.Αν Χ<-20 Τότε { εντολές...
} Αλλιώς.Αν Χ<-10 Τότε { εντολές...
} Αλλιώς { εντολές...
}



Η εντολή ΕΠΙΛΕΞΕ στη ΓΛΩΣΣΑ:Εδώ έχουμε τα αναγνωριστικά ΠΕΡΙΠΤΩΣΗ, ΠΕΡΙΠΤΩΣΗ_ΑΛΛΙΩΣ. ΤΕΛΟΣ ΕΠΙΛΟΓΩΝ
η διάρθρωση είναι ως εξής:
ΕΠΙΛΕΞΕ έκφραση
ΠΕΡΙΠΤΩΣΗ τύπος_εκφρασης [, τ τύπος_εκφρασης]
εντολή
ΠΕΡΙΠΤΩΣΗ_ΑΛΛΙΩΣ.
εντολή
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ



Στη Μ2000 είναι περίπου ίδιο:
ΕΠΙΛΕΞΕ ΜΕ έκφραση
Με τύπος_εκφρασης [, τ τύπος_εκφρασης]
μια εντολή ή ενα μπλοκ εντολών με αγκύλες
ΑΛΛΙΩΣ
μια εντολή ή ενα μπλοκ εντολών με αγκύλες
ΤΕΛΟΣ ΕΠΙΛΟΓΗΣ



στο τύπο_εκφρασης και στις δυο γλώσσες υπάρχουν τρία είδη:
1. έκφραση
2. μισή έκφραση σύγκρισης πχ. >100 (στη Μ2000 μπορούμε να βάλουμε μια ΚΑΙ ή μια Η και μια άλλη έκφραση στη συνέχεια, πράγμα που δεν γίνεται στην ΓΛΩΣΣΑ)
3. διάστημα τιμών όπου στη ΓΛΩΣΣΑ δηλώνεται με δυο τελείες ενώ στην Μ2000 με την ΕΩΣ



Η Με εκτός δομής Επίλεξε έχει άλλη λειτουργία στη Μ2000 (σχετίζεται με ιδιότητες αντικειμένων)



Η εντολή ΓΙΑ στη ΓΛΩΣΣΑ:
Εδώ υπάρχουν διαφοροποιήσεις, και σε αναγνωριστικά και σε λειτουργία.
ΓΙΑ π ΑΠΟ 10 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -0.5
ΓΡΑΨΕ π
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ



Το ΜΕ_ΒΗΜΑ μπορεί να γραφεί χωρίς την κάτω παύλα, και είναι προαιρετικό (οπότε νοείται ως ένα).



Στη Μ2000 το αναγνωριστκό ΑΠΟ είναι η πύλη XOR ( όπως το ΚΑΙ είναι η πύλη AND) και χρησιμοποιείται σε λογικές εκφράσεις. (ΚΑΙ, Η, ΑΠΟ), όταν βρίσκεται σε αριθμητικές εκφράσεις. Επίσης υπάρχει και εντολή ΑΠΟ: Από Έκφραση Προς Ετικέτα1, .... και Από Έκφραση Διαμέσου Ετικέτα1, Ετικέτα2, .....




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

ΓΙΑ π=10 ΕΩΣ 1 ΑΝΑ 0.5
      ΤΥΠΩΣΕ π
ΕΠΟΜΕΝΟ π
ή το πιο γρήγορο:
ΓΙΑ π=10 ΕΩΣ 1 ΑΝΑ 0.5 {
      ΤΥΠΩΣΕ π
}



Αν το βήμα δεν δοθεί τότε θεωρείται ως 1 (πάντα το θετικό). Στη ΓΛΩΣΣΑ μπορεί θα πάρει αρχική τιμή ο μετρητής όπως και να έχει, ακόμα και να δεν εκτελεστούν οι εντολές εντός της ΓΙΑ. Στη Μ2000 και ο μετρητής θα πάρει την αρχική τιμή και δεν υπάρχει περίπτωση να μην εκτελεστεί μια φορά η ΓΙΑ, γιατί ο έλεγχος γίνεται στο τέλος κάθε εκτέλεσης και όχι στην αρχή.
Επιπλέον μια διαφοροποίηση σε σχέση με την ΓΛΩΣΣΑ είναι η έξοδος από μπλοκ με αγκύλες με την ΕΞΟΔΟΣ και η έξοδος από το ΓΙΑ ...ΕΠΟΜΕΝΟ με την ΕΞΟΔΟΣ ΓΙΑ, όπως επίσης και η έξοδος με ΠΡΟΣ (GOTO) από μπλοκ με αγκύλες (τερματίζει και την μέτρηση χωρίς αλλαγή του μετρητή, από την τελευταία)

Μπορεί να αλλάξει ο τρόπος της Για Εως Ανά Επόμενο ή Για Εώς Ενά {} με αλλαγή διακόπτη ώστε να λειτουργεί όπως στην BASIC δηλαδή στο βήμα να μετράει το πρόσημο κάθε φορά και έτσι να υπάρχει περίπτωση να μην εκτελεστή η Για. Ο διερμηνευτής έχει ορισμένους διακόπτες για να προσαρμόζουν την συμπεριφορά του. Υπάρχει επιλογή για το τρόπο που δουλεύουν οι Div Mod (Δια και Υπόλοιπο ή Υπολ), όπως στη VB6 ή όπως στην Python. Επιπλέον υπάρχει επιλογή για το αν οι συγκρίσεις των αλφαριθμητικών θα γίνονται δυαδικά ή βάσει σειράς ταξινόμησης.


Υπάρχει στη Μ2000 μια άλλη δομή Για όπου παίρνει ονόματα αντικειμένων και ακολουθεί μπλοκ εντολών που σχετίζονται με αυτά τα ονόματα.

Ομάδα Αλφα {
      Χ=10, Ψ=30
}
Για Αλφα {
      Τύπωσε .Χ,
}



Στη Μ2000 αν χρησιμοποιήσουμε ακέραιο για μετρητή θα έχουμε πρώτα μετατροπή σε ακέραιο τα όρια και το βήμα:

για ι%=0.2 εως 10.3 ανά .6 {
      Τύπωσε ι%
}

θα τυπώσει από το 0 έως το 10
Επίσης στη Μ2000 αν πειράξουμε το μετρητή στο μπλοκ δεν υπάρχουν επιπτώσεις, γιατί αυτό που διαβάζουμε είναι το αντίγραφο του κανονικού μετρητή και ενημερώνεται στο τέλος του μπλοκΟ μ
Το παρακάτω θα τρέξει στη Μ2000

Για χ=1 έως 3 {
      ν=χ
      Για χ=5 εως 2 {
            Τύπωσε χ, ν
      }    
}

όπως και αυτό:

Για χ=1 έως 3
      ν=χ
      Για χ=5 εως 2
            Τύπωσε χ, ν
      Επόμενο χ
Επόμενο χ

Ο μόνος τρόπος να αλλάξει ο μετρητής ενώ τερματίσουμε το μπλοκ σε νούμερο που θέλουμε και δεν βγαίνει με την μέτρηση, είναι με την χρήση της ΠΡΟΣ, όπου εδώ λέμε ότι αν το ι=5 τότε κάνουμε το ι=100 (που γίνεται) και κάνουμε άμεση έξοδο με την προς ααα ή με απλή εντολή Έξοδος. (με την Προς κατευθύνουμε τη ροή εκεί που θέλουμε)



Για ι=1 εως 10 {
      αν ι=5 τότε ι=100 : προς ααα
}



ααα:
Τύπωσε ι



ή

Για ι=1 εως 10 {
      αν ι=5 τότε ι=100 : έξοδος
}
Τύπωσε ι



Η ΓΛΩΣΣΑ δεν έχει την ΠΡΟΣ (GOTO). Η Μ2000 υποστηρίζει και ρουτίνες με κλήση ετικετών με την ΔΙΑΜΕΣΟΥ ή GOSUB (εντολές της BASIC). Οι ετικέτες στην Μ2000 είναι ονόματα με το διαχωρισιτκό άνω και κάτω τελεία. Στη κλήση δεν βάζουμε το διαχωριστικό στο όνομα. Όπως στο παράδειγμα το Προς γίνεται προς ααα και παρακάτω υπάρχει το ααα: Μετά από μια ετικέτα στην ίδια γραμμή μπορούμε να βάλουμε μόνο σημειώσεις με ' ή με \
Εντολή Όσο στη ΓΛΩΣΣΑ
Χρησιμοποιεί τα ΕΠΑΝΑΛΑΒΕ και ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ. Στο παράδειγμα βλέπουμε το DIV, το οποίο έχει παραμείνει με την αγγλική ονομασία. Στην Μ2000 είναι το ΔΙΑ και εφαρμόζεται οπουδήποτε, δηλαδή και σε πραγματικούς. Το Mod είναι το Υπόλοιπο ή Υπολ (στη Μ2000 μπορούμε να βάζουμε τόνους στις εντολές, και κατά την εκτέλεση ο διερμηνευτής τους αφαιρεί, δουλεύοντας με κεφαλαία)



ΟΣΟ α >= 2 ΕΠΑΝΑΛΑΒΕ
α <- α DIV 2
ι <- ι + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ




Η αντίστοιχη στη Μ2000 είναι η Ενώ

Ενώ α>=2 {
εντολές
}

Η ενώ δουλεύει και με ένα αντικείμενο που λέγεται επαναλήπτης. Η μεταβλητή Α είναι δείκτης σε Πίνακα. Η ΚΑΘΕ() παράγει ένα αντικείμενο επαναλήπτη που συνδέεται με ένα αντικείμενο και κρατάει δικό του δρομέα. Υπάρχουν δυο τρόποι να δώσουμε αρχή και τέλος, με λέξεις ή με αριθμούς όπου το -1 είναι το τέλος, και το 1 η αρχή. Τα Γ^ και Β^ είναι οι μετρητές. Μπορούμε να αλλάξουμε τα Γ και Β μέσα στις ΕΝΩ {} με νέα ΚΑΘΕ(). Εκτός από δείκτη σε πίνακα η ΚΑΘΕ() δουλεύει με Κατάσταση (λίστα με κλειδί και τιμή) και Σωρό (συνδεδεμένη λίστα τιμών)

Α=(10, 15, 20)
Β=ΚΑΘΕ(Α ΤΕΛΟΣ ΕΩΣ ΑΡΧΗ)
Γ=ΚΑΘΕ(Α, 1, 3)
ΕΝΩ Γ {
      ΕΝΩ Β {
          ΤΥΠΩΣΕ ΠΙΝΑΚΑΣ(Γ), ΠΙΝΑΚΑΣ(Β)
      }
}



Πώς γίνεται και η αριθμητική έκφραση στη Ενώ μπορεί να γυρίσει αντικείμενο; Στη Μ2000 όλες οι παραστάσεις μπορούν να γυρίζουν αντικείμενο. Όταν δεν επιστρέφουν αντικείμενο τότε αυτό είναι "ΤΙΠΟΤΑ" και ο διερμηνευτής δίνει τον αριθμό ή το αλφαριθμητικό και όχι το "ΤΙΠΟΤΑ".
Στη Μ2000 δεν μπορούμε να πειράξουμε δείκτες σε αντικείμενα, αλλά μπορούμε να αλλάξουμε ένα δείκτη με έναν άλλο δείκτη. Εκτός από ειδικά αντικείμενα, όσα είδαμε εδώ όπως ο δείκτης σε πίνακας, σε Κατάσταση και σε Σωρό, δεν μπορούν να πάρουν "τίποτα" αλλά μπορούν να πάρουν νέο πίνακα, κατάσταση, σωρό και ο παλιός να "εξαφανιστεί" αν δεν υπάρχει άλλος δείκτης να τον "κρατάει" εν ζωή.
Τα βασικά αντικείμενα, οι Ομάδες, δεν έχουν πολλαπλούς δείκτες, δηλαδή δεν γίνεται να κρατηθεί μια ομάδα αν χαθεί ο δείκτης σε αυτήν, διότι ποτέ δεν υπάρχει δεύτερος. Έτσι στις ομάδες δεν γίνεται να έχουμε κυκλικές αναφορές! Όλα αυτά περί ομάδων και αντικειμένων δεν έχουν καμία αντιστοιχία με τη ΓΛΩΣΣΑ του σχολείου. Δεν υποστηρίζει αντικείμενα!




Η εντολή ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ στη ΓΛΩΣΣΑ
Για να έχουμε επανάληψη ενός αριθμού εντολών με έλεγχο συνθήκες στο τέλος, χρειάζεται να γραφτεί το ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ώστε να μαρκάρει την αρχή, και στο τέλος των εντολών που ενδέχεται να εκτελεστούν ξανά θα έχουμε την ΜΕΧΡΙΣ_ΟΤΟΥ με την συνθήκη προς έλεγχο. 


ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε βαθμό:  '
ΔΙΑΒΑΣΕ βαθμός
ΜΕΧΡΙΣ_ΟΤΟΥ βαθμός >= 0 



Η Μ2000 έχει την εντολή ΕΠΑΝΑΛΑΒΕ (ή ΕΠΑΝΕΛΑΒΕ) με ένα μπλοκ και μια από τις δυο συνέχειες: Μέχρι συνθήκη ή Πάντα:

ΕΠΑΝΑΛΑΒΕ {
εντολές....
} ΜΕΧΡΙ συνθήκη

ή χωρίς συνθήκη
ΕΠΑΝΑΛΑΒΕ {
εντολές....
} ΠΑΝΤΑ



Η δεύτερη γράφεται και έτσι:

{
εντολές...
Κυκλικά
}

Η εντολή Κυκλικά σηκώνει μια "σημαία" μέσα στο μπλοκ και όταν το μπλοκ φθάσει στο τέλος του τότε κοιτάει την σημαία και ανάλογα συνεχίζει εκτός μπλοκ ή εκτελεί το μπλοκ πάλι.
Ο διερμηνευτής ξεχωρίζει πάντα ποιο μπλοκ με αγκύλες είναι σταθερά αλφαριθμητική και ποιο είναι εντολές. (και ο χρωματιστής του διορθωτή). Αυτό συμβαίνει γιατί είναι γνωστό που ακριβώς μπαίνουν τα μπλοκ εντολών, σε ποιες εντολές δηλαδή. Μπορούμε όμως να ξεκινήσουμε ένα μπλοκ οπουδήποτε θα ξεκινούσαμε με μια εντολή. Οι εντολές για τα μπλοκ (οποιοδήποτε ακόμα και αυτό του ΓΙΑ), είναι η ΚΥΚΛΙΚΑ,. η ΞΕΚΙΝΑ (κάνει άμεση εκκίνηση ξανά του μπλοκ, η ΣΥΝΕΧΙΣΕ η οποία αν έχει σηκωθεί σημαία κάνει ότι η ΞΕΚΙΝΑ ενώ αν όχι κάνει ότι η ΕΞΟΔΟΣ, και η ΕΞΟΔΟΣ η οποία κάνει άμεση έξοδο από το μπλοκ. Υπάρχει και η ΔΙΕΚΟΨΕ που σπάει πολλά μπλοκ μαζί. Οι εντολές ΣΥΝΕΧΙΣΕ και ΔΙΕΚΟΨΕ έχουν άλλη σημασία στην ΕΠΙΛΕΞΕ ΜΕ όπου μπορούμε με την ΔΙΕΚΟΨΕ να κάνουμε εκτέλεση όλων των εντολών ΜΕ που ακολουθούν, μέχρι το τέλος ή να βρεθεί η ΣΥΝΕΧΙΣΕ και να το σταματήσει!





Χ=10
Κ=50 \\ με Κ=20 το οκ2 δεν θα εμφανιστεί
ΕΠΙΛΕΞΕ ΜΕ Χ
ΜΕ 10
{
      ΤΥΠΩΣΕ "ΘΑ ΕΜΦΑΝΙΣΩ ΤΑ οκ1 ΚΑΙ οκ2"
      ΔΙΕΚΟΨΕ
}
ΜΕ 100
{
      ΤΥΠΩΣΕ "οκ1"
      ΑΝ Κ=20 ΤΟΤΕ ΣΥΝΕΧΙΣΕ
}
ΜΕ 200
      ΤΥΠΩΣΕ "οκ2"
ΑΛΛΙΩΣ
      ΤΥΠΩΣΕ "οκ3"
ΤΕΛΟΣ ΕΠΙΛΟΓΗΣ




Η εντολή ΚΑΛΕΣΕ στη ΓΛΩΣΣΑ
Στη ΓΛΩΣΣΑ για να καλέσουμε ένα υποπρόγραμμα πρέπει να χρησιμοποιήσουμε την ΚΑΛΕΣΕ


ΠΡΟΓΡΑΜΜΑ ΗΕντολήΚάλεσε
!Επιδεικνύει απλά τη χρήση της εντολής.
ΑΡΧΗ
ΚΑΛΕΣΕ ΓράψεΌνομα('My name is Bond. James Bond.')
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


ΔΙΑΔΙΚΑΣΙΑ ΓράψεΌνομα(όνομα)
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: όνομα
ΑΡΧΗ
ΓΡΑΨΕ όνομα
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 
 
Σε Μ2000, υπάρχει η ΚΑΛΕΣΕ και καλεί με έναν δεύτερο τρόπο την ΑΛΦΑ. Ο κανονικός είναι χωρίς την ΚΑΛΕΣΕ. Για να καταλάβουμε τη διαφορά αρκεί να βάλουμε στην ΡΟΥΤΙΝΑ, μετά την ΤΥΠΩΣΕ Α$ την εντολή ΛΙΣΤΑ η οποία δείχνει τα ονόματα των μεταβλητών.
Δείτε επίσης ότι η Ρουτίνα μπορεί να κληθεί με την ΔΙΑΜΕΣΟΥ, και πως η Α$ στην ρουτίνα είναι τοπική μεταβλητή. Μπορούμε να έχουμε όσα τμήματα θέλουμε και σε κάθε τμήμα να έχουμε τμήματα και ρουτίνες, και συναρτήσεις. Οι ρουτίνες είναι μέρη τμημάτων και συναρτήσεων και βλέπουν τις μεταβλητές τους. Έτσι αυτό που γίνεται και στη ΓΛΩΣΣΑ μπορεί να γίνει σε τμήμα της Μ2000. Στο τμήμα ΑΛΦΑ έχουμε το (Α$) το οποίο θα γίνει ΔΙΑΒΑΣΕ Α$ όταν θα γραφτεί στη λίστα τμημάτων από τον διερμηνευτή.

ΤΜΗΜΑ ΑΛΦΑ (Α$) {
      ΔΙΑΜΕΣΟΥ ΓράψεΌνομα(Α$)
      ΓράψεΌνομα("My name is Bond. James Bond.")
      ΤΥΠΩΣΕ Α$+"-"+Α$
      ΡΟΥΤΙΝΑ ΓράψεΌνομα(Α$)
            ΤΥΠΩΣΕ Α$
      ΤΕΛΟΣ ΡΟΥΤΙΝΑΣ
}



ΑΛΦΑ "ΟΚ1"
ΚΑΛΕΣΕ ΑΛΦΑ, "ΟΚ2"




Δείτε σε συνάρτηση πως ορίζουμε προαιρετικό όρισμα:
Το ** όπως και το ^ δίνει την ύψωση σε δύναμη
Συνάρτηση Αλφα {
      Διάβασε Χ
      Υ=2
      Διάβασε ? Υ
      =Χ**Υ
}
Τύπωσε Αλφα(4), Αλφα(4, 3) \\ 16  64




Το ίδιο πρόγραμμα με ρουτίνα στη συνάρτηση:
Συνάρτηση Αλφα {
      Διάβασε Χ
      Υ=2
      Διάβασε ? Υ
      ΚάνεΚάτι()
      Ρουτίνα ΚάνεΚάτι()
            =Χ**Υ
      Τέλος Ρουτίνας
}
Τύπωσε Αλφα(4), Αλφα(4, 3) \\ 16  64