Τετάρτη 24 Φεβρουαρίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 18ο

9. Παραστάσεις/Εκφράσεις

Παράσταση ή Έκφραση λέμε οτιδήποτε μπορεί να μας επιστρέψει μια τιμή. Ξεχωρίζουμε τις παραστάσεις σε δυο κύριες ομάδες, τις αριθμητικές και τις αλφαριθμητικές.

9.1 Αριθμητικές Παραστάσεις


Αριθμητική παράσταση λέμε την παράσταση που επιστρέφει αριθμό. Μπορεί να περιλαμβάνει έναν μόνο αριθμό ή μια σειρά πράξεων με αριθμούς. Στη Μ2000 οι συνθήκες π.χ. "Α"<"Β" είναι αριθμητική πράξη. Έτσι  εκτός από αριθμητικές πράξεις σε μια παράσταση μπορούμε να έχουμε συγκρίσεις ή και λογικούς τελεστές.

9.1.1 Απλές Αριθμητικές Πράξεις

Στις Αριθμητικές παραστάσεις έχουμε τα παρακάτω:
Βασικές πράξεις +, -, *, /
Για ακέραια διαίρεση και ακέραιο υπόλοιπο (δουλεύει και με κανονικούς αριθμούς και με ακέραιους)
ΔΙΑ και ΥΠΟΛ (ΥΠΟΛΟΙΠΟ)
Ύψωση σε δύναμη: **, ^
οι δυνάμεις εκτελούνται πρώτα και μετά συνεχίζει ο διερμηνευτής, οπότε αν θέλουμε πράξη στη δύναμη πρέπει να την βάλουμε σε παρένθεση
Τύπωσε 2^2+3, (2^2)+3 \\ 7   7
Τύπωσε 2^2*3, (2^2)*3 \\ 12 12
Τύπωσε 2^(3-1)*3, (2^(3-1))*3 \\ 12 12
Τύπωσε 4*2^(3-1)*3, 4*(2^(3-1))*3 \\ 48 48
Τύπωσε (4*2)^(3-1)*3 \\ 192
Παρενθέσεις ( )
Τύπωσε ((3))
Πρόσημα: -, +
Μπορούμε να βάλουμε όσα πρόσημα θέλουμε --++--3 και όσες παρενθέσεις θέλουμε:
Τύπωσε -++--3.3
Τύπωσε --++--3
Τύπωσε -(-(+(+(-(-3)))))

9.1.2. Λογικοί Τελεστές


Λογικοί τελεστές είναι οι Η, ΚΑΙ, ΑΠΟ και ο ειδικός Όχι  (υπάρχει και ως Δεν). Οι λογικοί τελεστές δίνουν αποτέλεσμα Αληθές ή Ψευδές και αυτά έχουν αριθμητική τιμή: -1 για το αληθές και 0 για το Ψευδές. Στις πράξεις με λογικούς τελεστές κάθε μη μηδενική τιμή θεωρείται αληθής

  • Οι τελεστές ΚΑΙ, Η και ΑΠΟ δουλεύουν με δυο παραστάσεις, μια αριστερά και μια δεξιά
  • Ο τελεστής ΚΑΙ δίνει -1 αν δεν έχουμε καμία μηδενική τιμή από τις δυο
  • Ο τελεστής Η δίνει -1 αρκεί και ένα από τις δυο τιμές να είναι αληθής ή μη μηδενικός (or)
  • Ο τελεστής ΑΠΟ δίνει -1 αν στις δυο τιμές μια μόνο είναι 0. (Xor)
  • Ο τελεστής ΟΧΙ (Δεν) δουλεύει με μια τιμή δεξιά και δίνει -1 αν υπάρχει μηδενική τιμή ή 0 αν δεν υπάρχει.
Το Τύπωσε 5 και 0   είναι όπως το Τύπωσε -1 και 0  δίνει 0 γιατί το ΚΑΙ δίνει -1 μόνο αν έχουμε -1 και -1.  Μπορούμε να χρησιμοποιούμε τα Αληθές, Αληθής, Ψευδές, Ψευδής, ως σταθερές (δίνουν -1,-1,0,0 αντίστοιχα)
Μπορούμε να βάλουμε σε μια σειρά τους λογικούς τελεστές:
Τύπωσε Αληθής Η Ψευδής ΚΑΙ Ψευδής
Δίνει ψευδής αν δεν έχουμε κάνει μια μόνιμη αλλαγή με την ειδική εντολή στο περιβάλλον:
Διακόπτες "+PRI"
(η οποία αλλάζει το τρόπο και για την επόμενη φορά που θα ξεκινήσει ο διερμηνευτής)
Εξ ορισμού ισχύει αυτό Διακόπτες "-PRI"
Με + λέμε στον διερμηνευτή παραστάσεων όταν δει το Η να κοιτάξει δεξιά τι έχει υπολογίζοντας και άλλους τελεστές, ενώ με - ζητάμε μόνο αριθμητικές πράξεις ή και συγκρίσεις αλλά όχι λογικούς τελεστές). Με αυτό πετυχαίνουμε να δίνουμε προτεραιότητα στο ΚΑΙ. και όχι στο Η (το ΚΑΙ είναι ο λογικός πολλαπλασιασμός, αφού με οποιαδήποτε μηδενική τιμή έχουμε αποτέλεσμα μηδέν, ψευδές).

Εξ ορισμού όμως οι τελεστές είναι "ομοιόβαθμοι".
Βάζοντας παρενθέσεις δεν αφήνουμε το σύστημα να κάνει αυτό που θέλει:
Τύπωσε (Αληθής Η Ψευδής) ΚΑΙ Ψευδής
Τύπωσε Αληθής Η ( Ψευδής ΚΑΙ Ψευδής )
Οι παρενθέσεις λένε στον διερμηνευτή:..έχω μια παράσταση εδώ, φέρε την τιμή από την παράσταση στη θέση της παρένθεσης.

9.1.3 Τελεστές Συγκρίσεων


Οι τελεστές συγκρίσεων χωρίζονται σε δυο ομάδες, σε αυτούς που είναι για αριθμούς και σε αυτούς που είναι για αλφαριθμητικά. Υπάρχουν ίδιοι τελεστές και στις δυο περιπτώσεις:
Κοινοί τελεστές συγκρίσεων: =, <=, >=, <, >, <>

Τελεστές για αριθμούς: ==
Ο τελεστής == κάνει σύγκριση με στρογγυλοποίηση
Τελεστές για αλφαριθμητικά: ~
Ο τελεστής ~ είναι ο τελεστής προτύπου ή Like στην VB6,

Τύπωσε 10>2, 3=4, 5<3, 2>=1, 4<=4, 5<>6
Τύπωσε 10/3==3.333333333 \\ 0
Τύπωσε 10/3==3.3333333333 \\ -1
Τύπωσε 10/3=3.3333333333333333 \\ -1   - με ένα λιγότερο 3 δίνει 0
Τύπωσε "Αλφα"="Αλφα", "Α"<"Β", "Α"<="Β", "Α">"Β", "Α">="Β", "Α"<>"Β"
Α$="[Αα][1234]"
Τύπωσε "Α2"~Α$, "Α"~Α$, "Α23"~Α$ \\ -1 0 0
Τύπωσε "α2"~Α$, "α"~Α$, "α23"~Α$ \\ -1 0 0

9.1.4 Βασικές Αριθμητικές Συναρτήσεις.

Θα δούμε συναρτήσεις που δίνουν αριθμητικές τιμές.
Σωρός Νέος {
      Σειρά Ρίζα(5), Στρογγ(2/3,3), Απολ(-20), Ακ(34.56), Δεκ(12.1234567) \\ η Δεκ() δίνει το δεκαδικό μέρος
      Σειρά Λογ(3), Λφ(2) \\ δεκαδικός και φυσικός λογάριθμος
      Σειρά Συν(Πι/4), Ημ(Πι/4), Εφαπ(100), Πι, Τοξ.Εφ(.45)
      Σειρά Μήκος("Αλφα"), Τιμή("1234.23 αβγ"),Αξία("123"), Εκφρ("10*45") \\ Αξία() και Τιμή() είναι ίδιες συναρτήσεις
      Σειρά Μεγάλο.Σειράς(30,45,-100), Μικρό.Σειράς(30,45,-100)
      Σειρά Κωδ("C"), ΧαρΚωδ("Γ"), Θέση("Αλφα Βήτα, Βήτα", "Βήτα"), Θέση("Αλφα Βήτα, Βήτα", "Βήτα",10)
      Σειρά ΘέσηΔεξιά("Αλφα Βήτα, Βήτα", "Βήτα"), ΘέσηΔεξιά("Αλφα Βήτα, Βήτα", "Βήτα", 5)
      Ενώ όχι Κενό {

            \\ ορίζω πρόσκαιρα - μόνο στη τύπωσε μερος
            \\ στοίχιση αλφαριθμητικού δεξια
            \\ πλάτος στήλης 20

            Τύπωσε Μέρος $(3,20), Γραφή$(Αριθμός,"0.00000000000")
            \\ δεν αλλάζει γραμμή οπότε την αλλάζω με εντολή
            Τύπωσε
      }
}
Ειδικά η ΘέσηΔεξιά() είναι λίγο δύσκολο να γίνει αντιληπτή πώς δουλεύει:
Α$="Αλφα Βήτα, Βήτα"
Λ=μήκος(Α$)
Κ=0
{
      Κ=ΘέσηΔεξιά(Α$, "Βήτα", Κ)
      Αν Κ=0 τότε έξοδος
      Τύπωσε Μορφή$("Βρέθηκε στην θέση: {0}",Κ)
      Κ=Λ-Κ
      Κυκλικα
}

9.2 Αλφαριθμητικές Παραστάσεις

Οι παραστάσεις αλφαριθμητικών μπορούν να έχουν ένα μόνο σύμβολο αυτό της πράξης + που σημαίνει πρόσθεσε στο τέλος του προηγούμενου το επόμενο.
Οι συγκρίσεις επειδή δίνουν αριθμητικό αποτέλεσμα δεν ανήκουν στις αλφαριθμητικές παραστάσεις, όμως μπορεί να περιέχουν:
Τύπωσε "αβ"+"γ"="α"+"βγ"
Δίνει αληθές γιατί η κάθε παράσταση φτιάχνει το "αβγ"
Εκτός όμως από αλφαριθμητικά σταθερά όπως το "αβ" η παράσταση μπορεί να πάρει μεταβλητές αλλά και συναρτήσεις αλφαριθμητικών. Οι μεταβλητές και οι συναρτήσεις έχουν το συμβολο $ που δηλώνουν ότι  είναι αλφαριθμητικά.

9.2.1 Βασικές  Αλφαριθμητικές Συναρτήσεις

Θα δούμε συναρτήσεις που δίνουν τιμή αλφαριθμητικό:
Σωρός Νέος {
      Σειρά Αρισ$("αλφα",2), Δεξι$("αλφα",2), Μεσ$("αλφα",2,2), Μεσ$("αλφα",2)
      Σειρά ΑριστεροΜερος$("αλφα\βήτα","\"), ΔεξίΜέρος$("αλφα\βήτα","\")
      Σειρά Επαν$("*",5), Αλλαγή$("α","Α","αβαβαβαβ"), Φίλτρο$("αβγαβγαβγαβγα", "αγ")
      Σειρά Μεγάλο.Σειράς$("Α","Δ","σ"), Μικρό.Σειράς$("Α","Δ","σ")
      Σειρά Χαρ$(67), ΧαρΚωδ$(915)
      Σειρά Μορφή$("Γράφω αυτο {0:2} και αυτό {1}", 2.567,"Αλφα")
      Σειρά Γραφή$(Σήμερα, "Long Date")
      Σειρά Γραφή$(Σήμερα+Τώρα,{"["dddd, dd mmm, yy"] Ώρα "hh:nn:ss})
      Σειρά Γραφή$(Ημέρα("12-12-2004")+Χρόνος("02:15μμ"),{"["dddd, dd mmm, yy"] Ώρα "hh:nn:ss})
      Ενώ όχι Κενό {
            Τύπωσε Γράμμα$
      }
}


9.2.2 Αλφαριθμητικά ως δείκτες

Αν το $ το ακολουθεί τελεία τότε το περιεχόμενο του αλφαριθμητικού είναι δείκτης! Δείκτες έχουμε για μεταβλητές, στοιχεία πίνακα, και για συναρτήσεις. Η τελεία μπορεί να χρησιμοποιηθεί μόνο όταν απαιτείται. Οι συναρτήσεις που γράφονται σε αλφαριθμητικά δεν χρησιμοποιούν την τελεία.
Α=10
Α$=ισχνή$(Α)
Τύπωσε εκφρ(Α$.)
Α$.++
Τύπωσε εκφρ(Α$.)

Για να μην μπερδευόμαστε ο διερμηνευτής τους δείκτες τους βρίσκει στην συνάρτηση Εκφρ() και Εκφρ$(), και στα Συνάρτηση() και Συνάρτηση$()  (οι συναρτήσεις δεν παίρνουν το "$.")
Ειδικά στην Έκφρ() μπορούμε να παραλείψουμε την τελεία. Αλλά όχι στο Εκφρ$() γιατί αν το κάνουμε θα μας δείξει το περιεχόμενο του αλφαριθμητικού, και όχι το περιεχόμενο που δείχνει το περιεχέμενο του αλφαριθμητικού (αυτό σημαίνει δείκτης).

Πίνακας Β(10)=40
Β$=ισχνη$(Β(3))
Β$.++
Τύπωσε Έκφρ(Β$.) \\ 41


Κάνε Α(χ)=χ**2
Α$=οκν$(&Α())
Τύπωσε Συναρτηση(Α$,2) \\4

Τμήμα ΔοκίμασεΕντός {
      Διάβασε Α1$, Β1$
      Τύπωσε Έκφρ(Α1$.) \\ 41
      Τύπωσε Συναρτηση(Β1$,2) \\44
}
ΔοκίμασεΕντός Β$,Α$
Είδαμε παραπάνω ότι στα αλφαριθμητικά μπορούμε να γράψουμε κάτι που σχετίζεται με άλλες μεταβλητές και άλλες συναρτήσεις. Όμως το τι θέλουμε να κάνουμε θα φανεί στη χρήση. Εδώ περάσαμε με αντιγραφή τα Β$ και Α$ και μέσα στο τμήμα Δοκίμασέ με μπορούμε να δώσουμε π.χ.:
Τμήμα ΔοκίμασεΕντός {
      Διάβασε Α1$, Β1$
      Α1$.+=100
      Τύπωσε Έκφρ(Α1$.) \\ 141
      Τύπωσε Συναρτηση(Β1$,2) \\44
}


ΔοκίμασεΕντός Β$,Α$
Μ=100
ΔοκίμασεΕντός ισχνή$(Μ),Α$
ΔοκίμασεΕντός,Α$

Δείτε ότι περνάμε αντί για στοιχείο πίνακα μια άλλη μεταβλητή. Και εδώ όπως και στο στοιχείο πίνακα αλλάζουμε την τιμή σαν να το δίνουμε με αναφορά (αλλά αυτό κάνουμε, δίνουμε ισχνή αναφορά, που είναι αλφαριθμητικό).
Στη Μ2000 δεν έχουμε πράξεις με τους δείκτες. Οι δείκτες δείχνουν κάτι συγκεκριμένο, άρα δεν νοείται πράξη. Όμως γίνεται έναν δείκτη να τον ακολουθεί ένα όνομα, αν ο δείκτης είναι δείκτης σε ομάδα:
Ομάδα Άλφα {
Ιδιωτικό:
      Π=10
Δημόσιο:
      Τμήμα Κ {
            Διάβασε .Π
      }
      Συνάρτηση Κ {
            =
      }
}


Α$=Ισχνή$(Άλφα)
Τυπωσε Έκφρ(Α$.Κ()) \* 10  *\
Α$ 1000
Τυπωσε Έκφρ(Α$.Κ()) \* 1000 *\
Για Α$ {
      Τύπωσε .Κ() \* 1000  *\
      .Κ .Κ()+100
      Τύπωσε .Κ() \* 1100  *\
      Τύπωσε Έγκυρο() \* 0 δεν είναι *\
}

Αν θέλουμε να δώσουμε πίνακα (και όχι στοιχείο πίνακα), μπορούμε:

Πίνακας Αλφα(10)=2
Α$=ισχνη$(Αλφα())
Τύπωσε Πίνακας(Α$,2)
Πίνακας Αλφα$(10)="οκ"
Α$=ισχνη$(Αλφα$())
Τύπωσε Πίνακας$(Α$,2)
Δείτε επίσης ότι το αλφαριθμητικό που κρατούσε μια ισχνή αναφορά μπορεί να αλλάξει αναφορά!
Μια κανονική αναφορά σημαίνει ότι έχουμε συνδέσει μια ισχνή με ένα όνομα και σε αυτήν την περίπτωση το όνομα δεν μπορεί να δείξει κάτι άλλο, δεν μπορούμε να ξανασυνδέσουμε αυτό που έχει πια υπόσταση με κάτι αλλο.

 


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

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

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