💾 Archived View for magaz.hellug.gr › 26 › 02_xbasic3 › index.gmi captured on 2024-08-25 at 00:12:35. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr) Σεπ 2000
Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος ΙΙΙ
Σε αυτό το τεύχος θα συνεχίσουμε την αναφορά στα δομικά στοιχεία της Xbasic. θα αναφερθούμε στις εντολές, τις πράξεις και τους τελεστές. θα αναλύσουμε και ένα παράδειγμα για να κατανοήσουμε καλύτερα την χρήση των πράξεων και των τελεστών.
1. Εντολές
2. Γραμμές κώδικα
3. Τελεστές
4. Παράδείγμα χρήσης αριθμητικών τελεστών.
5. Επίλογος 3ου μέρους:
Οι εντολές είναι λέξεις που προσδιορίζουν την εκτέλεση μιας πράξης, ακολουθούμενες από στοιχεία της γλώσσας που ταιριάζουν στην κάθε εντολή. Γενικά προτιμάται να χρησιμοποιούμε συναρτήσεις της γλώσσας αντί για εντολές. Οι εντολές όμως έχουν δύο πλεονεκτήματα.
Το πρώτο είναι ότι δεν εκτελούνται επιπλέον εντολές που απαιτούνται για την αποθήκευση και επαναφορά των παραμέτρων, ώστε μόλις τελειώσει η εκτέλεση της συνάρτησής τους να επιστρέψουμε στην προηγούμενη κατάσταση. Αυτό δίνει μεγαλύτερη ταχύτητα στο πρόγραμμά μας. Το δεύτερο είναι ότι δεν περιοριζόμαστε από ορισμούς συναρτήσεων και έτσι κάθε εντολή έχει την σύνταξή της που είναι καθαρή και πιο κατανοητή από μία λίστα παραμέτρων.
Χρήση κενών και TABS
Γενικά μπορούμε να χρησιμοποιούμε τα κενά ή τα TABS για να μορφοποιούμε το πρόγραμμά μας εκτός από μια εξαίρεση. Ότι βρίσκεται ανάμεσα σε εισαγωγικά και ορίζεται σαν περιεχόμενο αλφαριθμητικής μεταβλητής. Εκεί τα κενά παίζουν ρόλο και, αν υπάρχουν θα εμφανίζονται στα περιεχόμενα της μεταβλητής ενώ οπουδήποτε αλλού αγνοούνται.
Παρακάτω θα δούμε δυο παραδείγματα όπου φαίνεται πόσο ευανάγνωστο γίνεται ένα πρόγραμμα όταν χρησιμοποιήσουμε κενά και TABS. Στην πρώτη περίπτωση δυσκολευόμαστε να βρούμε πού αρχίζει και πού τελειώνει η επανάληψη των εντολών.
FOR i1=1 to 1000 PRINT i1 IF i1>500 THEN PRINT "i1>500" NEXT i1
Ενώ μόλις γίνει η διαμόρφωση με τα κενά είναι εύκολο να δούμε τις εντολές που επαναλαμβάνονται εύκολα.
FOR i1=1 to 1000 PRINT i1 IF i1>500 THEN PRINT "i1>500" NEXT i1
Τα πράγματα δυσκολεύουν, όταν οι εντολές που επαναλαμβάνονται είναι πάρα πολλές και δε χωράνε σε μια οθόνη. Τότε η μορφοποίηση είναι απαραίτητη, για να μπορέσουμε να βγάλουμε κάποια άκρη, όταν εκ των υστέρων ξανακοιτάξουμε το πρόγραμμα μετά από καιρό.
Οι γραμμές του κώδικα ξεχωρίζουν με το ENTER που υπάρχει στο τέλος κάθε γραμμής. Στην ίδια γραμμή κώδικα μπορούν να υπάρχουν περισσότερες από μία εντολές με διαχωριστικό το ':'. Έτσι, για παράδειγμα, μπορούμε να έχουμε τις εντολές, a=a+1:PRINT a στην ίδια γραμμή εφ' όσον τις ξεχωρίσουμε με το διαχωριστικό ':'.
Οι γραμμές του κώδικα μπορούν να έχουν ονόματα ώστε να είναι δυνατή μετάβαση της εκτέλεσης του προγράμματος στην συγκεκριμένη γραμμή.
Οι τελεστές είναι σύμβολα που με την χρήση τους γίνονται πράξεις και ενέργειες όπου συμμετέχουν μία ή και περισσότερες παράμετροι. όπως στην άλγεβρα. Στην Xbasic υπάρχουν τελεστές αριθμητικοί, λογικοί, σε επίπεδο bit και τελεστές διευθύνσεων. Ο κάθε ένας έχει την προτεραιότητά του και ανήκει σε μια τάξη που ορίζει:
Αυτόν τον τελεστή τον χρησιμοποιούμε για να εκχωρήσουμε μια τιμή σε μια μεταβλητή Π.Χ. a1=10
Οι τελεστές μιας παραμέτρου έχουν μόνο μια παράμετρο δεξιά από τον τελεστή. Τέτοιο παράδειγμα είναι ο τελεστής - δηλώνει το αρνητικό αριθμητικό πρόσημο Π.Χ. -10, -a1 -(a+b). Στην τελευταία περίπτωση το άθροισμα (a+b) επειδή περικλείεται από παρενθέσεις θεωρείται μία παράμετρος.
Οι τελεστές αυτοί υπολογίζουν τις δύο τιμές που τους δίνονται σαν παράμετροι και δίνουν ένα αποτέλεσμα. Όταν οι παράμετροι είναι διαφορετικού τύπου πρώτα μετατρέπεται η μια στο είδος της άλλης και μετά εκτελείται η πράξη.
Όπως και στην άλγεβρα έτσι και εδώ οι τελεστές έχουν προτεραιότητα. Οι τελεστές με την μεγαλύτερη προτεραιότητα εκτελούνται πρώτα και τελευταίοι εκτελούνται αυτοί που έχουν την μικρότερη προτεραιότητα. Αν για παράδειγμα γράψουμε x1=a+b*c τότε, πρώτα θα υπολογιστεί το b*c και μετά το αποτέλεσμα θα προστεθεί στο a. Με την προτεραιότητα μειώνονται οι ανάγκες χρήσης παρενθέσεων για τον καθορισμό του τρόπου υπολογισμού των πράξεων. Οι παρενθέσεις χρειάζονται όταν θέλουμε να ορίσουμε εμείς την σειρά εκτέλεσης. Δηλ.
Οι αριθμητικοί τελεστές έχουν την ίδια χρήση που έχουν και στην άλγεβρα. Κάνουν πράξεις μεταξύ αριθμητικών παραμέτρων και παράγουν ένα αριθμητικό αποτέλεσμα.
Οι τελεστές επιπέδου bit κάνουν πράξεις σε ακέραιους αριθμούς και παράγουν ακέραιους αριθμούς σαν αποτέλεσμα, αλλά λειτουργούν σε επίπεδο bit χωρίς τα κρατούμενα Carry και Borrow. Οι πράξεις με bit έχουν να κάνουν περισσότερο με την εσωτερική αρχιτεκτονική του επεξεργαστή (processor) και είναι γνωστές στους προγραμματιστές που έχουν δουλέψει C και Assembly. Για τον μέσο χρήστη / προγραμματιστή συνήθως οι τελεστές επιπέδου bit δεν χρειάζονται αλλά τους αναφέρω εδώ για να δείξω την δύναμη που έχει η Xbasic να φτάνει σε τόσο χαμηλό επίπεδο. Έτσι κάποιος που θέλει να κάνει μερικά πράγματα που οι γνωστές Basic δεν έχουν, και χρειαζόταν να χρησιμοποιήσει την C ή την Assembly τώρα με την Xbasic μπορεί να παραμείνει στην Basic και να κάνει αυτά που θέλει.
Οι λογικοί τελεστές κάνουν πράξη σε αριθμητικές ή και αλφαριθμητικές μεταβλητές και δίνουν ένα λογικό αποτέλεσμα τύπου Αληθές. [$TRUE(-1)] ή Ψευδές [$FALSE(0)].
Η ομάδα 1 των τελεστών περιλαμβάνει τους λογικούς τελεστές && (AND), || (OR) και ^^ (XOR).
Η ομάδα 2 των τελεστών περιλαμβάνει τους τελεστές = (ίσο),<> (διάφορο),< (μικρότερο), <=(μικρότερο ή ίσο), >= (μεγαλύτερο ή ίσο), > (μεγαλύτερο) και τα αντίστοιχά τους ==, !=, !>=, !>, !<, !<=. Οι παράμετροί τους μπορεί να είναι Ακέραιοι, δεκαδικοί ή αλφαριθμητικές μεταβλητές. Οι αλφαριθμητικές μεταβλητές συγκρίνονται χαρακτήρα, χαρακτήρα από την αρχή μέχρι το τον πρώτο διαφορετικό χαρακτήρα. Έτσι βγαίνει το αποτέλεσμα της σύγκρισης. Το αποτέλεσμα είναι πάντα XLONG ή $TRUE ή $FALSE.
Η ομάδα 3 περιλαμβάνει τους τελεστές επιπέδου Bit AND, XOR και OR με τα αντίστοιχα σύμβολά τους &,^,|. Οι παράμετροί τους μπορεί να είναι ακέραιοι ή άλλες πράξεις. Το αποτέλεσμά τους είναι πάντα του ίδιου τύπου με τον τύπο των παραμέτρων τους.
Η ομάδα 4 περιλαμβάνει τους αριθμητικούς τελεστές +, -, *, /, **. Οι παράμετροι μπορεί να είναι ακέραιοι ή δεκαδικοί. Το αποτέλεσμα είναι πάντα τύπος μεταβλητής της υψηλότερης ακρίβειας από τις μεταβλητές των παραμέτρων.
Στην ομάδα 5 ανήκει ο τελεστής + που ανάλογα με τις παραμέτρους του είναι είτε αριθμητικός τελεστής είτε τελεστής συγχώνευσης δύο αλφαριθμητικών μεταβλητών. Οι παράμετροί του μπορεί να είναι, ή υποχρεωτικά και οι δύο αριθμοί, ή υποχρεωτικά και οι δύο αλφαριθμητικές μεταβλητές. Το αποτέλεσμα είναι, είτε αριθμός, είτε αλφαριθμητικά μεταβλητή ανάλογα με τις παραμέτρους που έχουν δοθεί.
Σε αυτή την ομάδα έχουμε τους τελεστές MOD και \. O MOD δίνει το υπόλοιπο της ακέραιας διαίρεσης των παραμέτρων του. Ο \ δίνει το πηλίκο της ακέραιας διαίρεσης των παραμέτρων του. Το αποτέλεσμα των τελεστών αυτής της ομάδας είναι πάντα ακέραιο.
Εδώ έχουμε του τελεστές <<, >>, <<<.>>>. Αυτοί οι τελεστές έχουν την ιδιότητα να μεταφέρουν τα bits των παραμέτρων τους ορισμένες θέσεις αριστερά ή δεξιά. Οι παράμετροι τους μπορεί να είναι ακέραιοι ή πράξεις. Το αποτέλεσμά τους είναι το ίδιο με τον τύπο της αριστερής παραμέτρου.
Η ομάδα αυτή περιλαμβάνει τους τελεστές μιας παραμέτρου + και -.Η παράμετρος μπορεί να είναι ακέραιος αριθμός ή δεκαδικός. Το αποτέλεσμα είναι του ίδιου τύπου με την παράμετρο.
Εδώ έχουμε τους τελεστές ! και !!. Στον τελεστή ! το αποτέλεσμα είναι λογικό $TRUE αν η παράμετρος έχει τιμή 0 και $FALSE όταν έχουμε οποιαδήποτε άλλη τιμή. Στον τελεστή !! το αποτέλεσμα είναι λογικό $FALSE αν η παράμετρος έχει τιμή 0 και $TRUE όταν έχουμε οποιαδήποτε άλλη τιμή.
Ένας μόνο τελεστής ανήκει στην ομάδα αυτή και είναι ο (ΝΟΤ) σε επίπεδο bit.Η παράμετρος μπορεί να είναι ή ακέραιος αριθμός ή το όνομα μιας συνάρτησης. Το αποτέλεσμα είναι πάντα XLONG.
Η ομάδα αυτή περιλαμβάνει τους τελεστές μιας παραμέτρου & και && πού δίνουν σαν αποτέλεσμα μια XLONG διεύθυνση. Η παράμετρος του τελεστή & μπορεί να είναι αριθμητική ή αλφαριθμητική μεταβλητή, πίνακας ή και στοιχείο πίνακα. Η παράμετρος του τελεστή && μπορεί να είναι αλφαριθμητική μεταβλητή, πίνακας αλφαριθμητικών μεταβλητών.
Προτεραιότητα 12
&, && της ομάδας 11
NOT της ομάδας 10
!, !! της ομάδας 9
+, - της ομάδας 8
Προτεραιότητα 11
<<<, >>>, <<, >> της ομάδας 7
Προτεραιότητα 10
Προτεραιότητα 9
Προτεραιότητα 8\
Προτεραιότητα 7
& ή AND της ομάδας 3
Προτεραιότητα 6
XOR ^ και OR | της ομάδας 3
Προτεραιότητα 5
, >=, <, <= της ομάδας 2
Προτεραιότητα 4
<>, = ή !=, == της ομάδας 2
Προτεραιότητα 3
& Λογικό AND της ομάδας 1
Προτεραιότητα 2
^^ Λογικό XOR και || Λογικό OR της ομάδας 1
Προτεραιότητα 1
= τελεστής εκχώρησης.
Στο παρακάτω παράδειγμα θα χρησιμοποιήσουμε τους τελεστές \ και MOD εφ' όσον οι τελεστές + - * και / μας είναι γνωστοί από την αριθμητική και νομίζω ότι δεν έχει έννοια να επεκταθούμε σε αυτούς. Επαναλαμβάνω ότι δεν χρείαζεται να γράψουμε τους αριθμούς γραμμής απλά τους έχω βάλει για να ξέρουμε σε ποιες γραμμές αναφερόμαστε κάθε φορά.
1.' 2.' #################### 3.' ##### PROLOG ##### 4.' #################### 5.' 6.PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent 7.VERSION "0.0000" ' version number - increment before saving altered program 8.' 9.' You can stop the PDE from inserting the following PROLOG comment lines 10.' by removing them from the prolog.xxx file in your \xb\xxx directory. 11.' 12.' Programs contain: 1: PROLOG - no executable code - see below 13.' 2: Entry function - start execution at 1st declared func 14.' * = optional 3: Other functions - everything else - all other functions 15.' 16.' The PROLOG contains (in this order): 17.' * 1. Program name statement PROGRAM "progname" 18.' * 2. Version number statement VERSION "0.0000" 19.' * 3. Import library statements IMPORT "libName" 20.' * 4. Composite type definitions TYPE <typename> ... END TYPE 21.' * 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) 22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) 23.' * 7. Shared constant definitions $ConstantName = literal or constant 24. 25.$secspermin = 60 26.$secsperhr = 3600 27. 28.' * 8. Shared variable declarations SHARED variable 29.' 30.' **** Comment libraries in/out as needed *** 31.' 32.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... 33.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) 34. IMPORT "xst" ' Standard library : required by most programs 35.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs 36.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs 37.' 38. 39. 40.DECLARE FUNCTION Entry () 41.' 42.' 43.' ###################### 44.' ##### Entry () ##### 45.' ###################### 46. 47.Programs contain: 48.' 1. A PROLOG with type/function/constant declarations. 49.' 2. This Entry() function where execution begins. 50.' 3. Zero or more additional functions. 51.' 52.FUNCTION Entry () 53. USHORT seconds,minutes,hours,secleft,minleft,nofsec 54. STRING ans 55. 56. ans=INLINE$("Enter number of seconds :") 57. nofsec=USHORT(ans) 58. 59. hours = nofsec \ $secsperhr 60. minutes = nofsec \ $secspermin 61. minleft = minutes MOD $secspermin 62. secleft = nofsec MOD $secspermin 63. 64. PRINT nofsec;" Seconds are..." 65. PRINT hours;" Hours ";minleft;" min ";secleft;" seconds" 66. 67. 68.END FUNCTION 69.END PROGRAM
Οι γραμμές 1-37 αποτελούν το κομμάτι PROLOG του προγράμματός μας όπου εκεί ορίζονται οι σταθερές, οι κοινές μεταβλητές για όλο το πρόγραμμα οι τυχόν τύποι μεταβλητών και οι βιβλιοθήκες που χρειάζονται, στο τέλος μπαίνουν οι ορισμοί των συναρτήσεων. Στο συγκεκριμένο παράδειγμα στις γραμμές 25 και 26 ορίζουμε τις σταθερές $secspermin και $secsperhr. Στην γραμμή 34 έχουμε δώσει εντολή να περιλιφθεί η βιβλιοθήκη xst και στην γραμμή 40 έχει μπεί ο ορισμός της συνάρτησης ENTRY.
Οι γραμμές 53 και 54
Σε αυτές τις γραμμές ορίζουμε το είδος των μεταβλητών που θα χρησιμοποιήσουμε στην συνάρτηση.
Η γραμμή 56
Σε αυτή την γραμμή καλούμε την συνάρτηση INLINE$ που την γνωρίσαμε από το προηγούμενο παράδειγμα.
Η γραμμή 57
Εδώ γίνεται μετατροπή της μεταβλητής ans που είναι αλφαριθμητική σε αριθμητική για να μπορούν να γίνουν οι πράξεις παρακάτω.
Οι γραμμές 59 και 60
Βλέπουμε την χρήση του τελεστή \ (ακέραια διαίρεση) έστι σαν αποτέλεσμα παίρνουμε το ακέραιο πηλίκο της διαίρεσης.
Οι γραμμές 61 και 62
Η χρήση του τελεστή MOD για να βρούμε τα υπόλοιπα των διαιρέσεων.
Οι γραμμές 64 και 65
Με την χρήση της εντολής PRINT δίνουμε εντολή στην Xbasic να εμφανίσει τα αποτελέσματα στην κονσόλα.
Με τα παραδείγματα που είδαμε μέχρι τώρα έχουμε δεί τα βασικά μέρη που αποτελείται ένα πρόγραμμα Xbasic. Κάναμε μια σύντομη περιγραφή για τις μεταβλητές, τις σταθερές και κάποιους τελεστές. Στο επόμενο θα συνεχίσουμε με παράδειγμα χρήσης των λογικών τελεστών και την εντολή IF. Γι αυτούς που έχουν κάποια εμπειρία από άλλες Basic, να προσέξουν τους επιπλέον τελεστές που διατίθενται και προσοχή στο σημαντικότερο. Ο τελεστής ^ που σε άλλες Basic σημαίνει ύψωση σε δύναμη εδώ αντικαθίσταται από τον **. Ο τελεστής ^ εδώ είναι ο τελεστής επιπέδου bit OR.