Κ. Τσακάλογλου Tsakf@hellug.gr(mailto:%20Tsakf@hellug.gr) Ιουλ 2000
Σε αυτό το τεύχος του magaz Θα κάνουμε μια πρώτη προσπάθεια θα γράψουμε ένα πάρα πολύ απλό πρόγραμμα για να δούμε πως λειτουργεί το περιβάλλον και μελετήσουμε τα βασικά στοιχεία που αποτελούν τη δομή ενός προγράμματος Xbasic.
1. Αρχικές ενέργειες
2. Το πρόγραμμά μας
3. Ανάλυση προγράμματος
4. Δεδομένα: Μεταβλητές και σταθερές.
5. Επίλογος 2ου μέρους
Ξεκινάμε δίνοντας την εντολή στο περιβάλλον εργασίας της Xbasic για κατασκευή νέου προγράμματος επιλέγοντας από το File>New. Θα εμφανιστεί παράθυρο για να επιλεγεί το είδος του κειμένου που θέλουμε να δημιουργήσουμε. Επιλέγουμε την επιλογή program και το περιβάλλον δημιουργεί τις αρχικές εντολές που απαιτούνται για το νέο πρόγραμμα.
Θα δούμε ότι έχουν δημιουργηθεί δύο ενότητες.
Μπορούμε να επιλέξουμε ποια θα βλέπουμε με την επιλογή view>function και εμφανίζεται παράθυρο επιλογών από όπου διαλέγουμε την επιθυμητή ενότητα. Επιλέγοντας το PROLOG βλέπουμε ότι το περιβάλλον έχει δημιουργήσει κάποιες εντολές για να μας βοηθήσει στο στήσιμο του νέου προγράμματος μας.
Θα κατασκευάσουμε ένα απλό πρόγραμμα για να δούμε την δομή του αναλυτικά. Ο κώδικας που θα δούμε περιέχει αριθμούς γραμμής που στην πραγματικότητα δεν χρειαζόμαστε. Μπήκαν απλά για να μπορεί να γίνει κατανοητή η εξήγηση των ενοτήτων.
1. ' 2. ' #################### 3. ' ##### PROLOG ##### 4. ' #################### 5. ' 6. PROGRAM "multiply" ' 1-8 char program/file name without .x or any .extent 7. VERSION "1.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.' * 8. Shared variable declarations SHARED variable 25.' 26.' **** Comment libraries in/out as needed *** 27.' 28.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... 29.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) 30. IMPORT "xst" ' Standard library : required by most programs 31.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs 32.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs 33.' 34. 35.DECLARE FUNCTION Entry () 36.DECLARE FUNCTION multiply (numa%,numb%) 37.' 38.' 39.' ###################### 40.' ##### Entry () ##### 41.' ###################### 42.' 43.' Programs contain: 44.' 1. A PROLOG with type/function/constant declarations. 45.' 2. This Entry() function where execution begins. 46.' 3. Zero or more additional functions. 47.' 48.FUNCTION Entry () 49. STATIC prompt$,inpu$ 50. STATIC numa%, numb%,numc% 51. inpu$=INLINE$("Enter a number 1..100 ") 52. numa%=SSHORT(inpu$) 53. inpu$=INLINE$("Enter a number 1..100 ") 54. numb%=SSHORT(inpu$) 55. numc%=multiply(numa%,numb%) 56. PRINT numc% 57. 58.END FUNCTION 59.' 60.' 61.' ######################### 62.' ##### multiply () ##### 63.' ######################### 64.' 65.FUNCTION multiply (numa%,numb%) 66.STATIC p1% 67. 68.p1%=numa%*numb% 69. 70.END FUNCTION p1% 71.END PROGRAM
Γραμμές 6-7 Χαρακτηριστικά προγράμματος
Γράφουμε το όνομα του προγράμματος και την έκδοσή του.
Γραμμές 28-32 Βιβλιοθήκες
Γράφουμε τα ονόματα των βιβλιοθηκών που θα συμπεριληφθούν στο πρόγραμμα. Η εντολή είναι:
IMPORT όνομα βιβλιοθήκης
Οι βιβλιοθήκες είναι ξεχωριστά αρχεία στον σκληρό δίσκο και προστίθενται αυτόματα στον κώδικα που έχουμε γράψει κατά την εκτέλεση του. Μαζί με την Xbasic έχουν έρθει οι βιβλιοθήκες.
xma για μαθηματικά, xcm για πολύπλοκες μαθηματικές πράξεις, (τριγωνομετρία κλπ.) xst είναι η βιβλιοθήκη που χρησιμοποιούμε πάντα και έχει τις βασικές εντολές, xgr και xui που χρησιμοποιούνται όταν κατασκευάζουμε προγράμματα με γραφικό περιβάλλον (φόρμες, κουμπιά κλπ.). Η εντολή IMPORT είναι κάτι αντίστοιχο της #include της γλώσσας C.
Στο συγκεκριμένο παράδειγμα χρησιμοποιείται μόνο η βιβλιοθήκη xst έτσι μπροστά από την εντολή δεν υπάρχει το "'" που δηλώνει ότι η εντολή πρέπει να αγνοηθεί.
Γραμμές 35-36 Ορισμός παραμέτρων συναρτήσεων του προγράμματος
Για να μπορεί να εκτελεστεί μια συνάρτηση που κατασκευάζουμε στο πρόγραμμα μας πρέπει να ορισθούν το όνομα, τυχόν παράμετροι κλπ. Εδώ δεν βάζουμε τον κώδικα της συνάρτησης αλλά απλά τον ορισμό της. Ο κώδικας της συνάρτησης μπαίνει παρακάτω όπως θα δούμε στις γραμμές 65-70.
Αυτά τα τρία κομμάτια κώδικα αποτελούν το PROLOG όπως αναφέρεται και στο παράθυρο του γραφικού περιβάλλοντος. άλλα στοιχεία του PROLOG που δεν τα χρησιμοποιούμε στο παράδειγμά μας είναι:
Γραμμές 48-58 Η κύρια συνάρτηση Entry
Η πραγματική δουλειά της Xbasic γίνεται εδώ. Οι εντολές της γλώσσας εμφανίζουν μηνύματα στο παράθυρο κονσόλας, δέχονται είσοδο από το πληκτρολόγιο, εκτελούν μαθηματικές πράξεις, καλούν άλλες συναρτήσεις, διαβάζουν ή γράφουν σε αρχεία στον δίσκο και οποιαδήποτε άλλη εργασία ένα πρόγραμμα χρειάζεται να εκτελέσει.
Οι εντολές που βλέπουμε εδώ είναι οι:
Γραμμές 51,53 INLINE$
Αυτή η συνάρτηση εμφανίζει ένα μήνυμα στο παράθυρο κονσόλας και περιμένει εισαγωγή αλφαριθμητικών χαρακτήρων, συνοδευόμενη από το ENTER.
Γραμμές 52,54 SSHORT
Αυτή η συνάρτηση μετατρέπει την σειρά αλφαριθμητικών χαρακτήρων σε αριθμητική μεταβλητή για να μπορούν να γίνουν μαθηματικές πράξεις.
Γραμμή 55 κλήση συνάρτησης
Εδώ γίνεται η κλήση της συνάρτησης multiply που ορίζεται στις γραμμές 65-70.
Γραμμή 56 PRINT
Αυτή η συνάρτηση εμφανίζει μηνύματα στο παράθυρο κονσόλας.
Γραμμές 65-70 Η συνάρτηση multiply
Οι συναρτήσεις είναι ανεξάρτητα κομμάτια κώδικα που γράφτηκαν να κάνουν μια συγκεκριμένη δουλειά. Κάθε συνάρτηση έχει όνομα, παραμέτρους και τιμή επιστροφής. Ο κώδικας της συνάρτησης εκτελείται μόλις σε κάποιο άλλο σημείο του προγράμματος την καλέσουμε με το όνομά της. Το απολύτως απαραίτητο για μια συνάρτηση είναι το όνομά της ενώ μπορεί να μην έχει παραμέτρους ούτε τιμή επιστροφής.
Γραμμή 68 Πολλαπλασιασμός
Στο παράδειγμά μας η συνάρτηση υπολογίζει το γινόμενο των μεταβλητών numa% και numb% και το τοποθετεί στην μεταβλητή p1%.
Γραμμή 70 END FUNCTION
Εδώ τελειώνει ο κώδικας της συνάρτησης. Μπορούμε να βάλουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει η συνάρτηση. Στο παράδειγμά μας θέλουμε, να επιστρέψουμε στην καλούσα συνάρτηση το γινόμενο, γι' αυτό γράφουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει.
Γραμμές 1-5,8-29,31-33,37-47 και 59-64 σχόλια
Σε αυτές στις γραμμές υπάρχει το σύμβολο "'" που δηλώνει ότι η γραμμή αυτή είναι γραμμή σχολίων και έτσι δεν εκτελείται τίποτα απλά υπάρχει για να μπορεί ο προγραμματιστής να βάζει σχόλια και να θυμάται μετά από καιρό τι έχει κάνει.
Στο παράδειγμά μας στις γραμμές 49,50,66 γίνεται ο ορισμός μεταβλητών. Τα προγράμματα συνήθως χρησιμοποιούν διαφορετικής μορφής δεδομένα και χρειάζεται ένα τρόπο να τα αποθηκεύει. Αυτά τα δεδομένα μπορεί να είναι ή αριθμοί ή γράμματα (χαρακτήρες). Η Xbasic έχει δύο τρόπους να αποθηκεύει δεδομένα -μεταβλητές και σταθερές- όπου κάθε περίπτωση έχει τις ιδιότητές της.
Οι μεταβλητές χρησιμοποιούνται για να αποθηκεύσουμε δεδομένα του προγράμματος και να τα χρησιμοποιήσουμε σε κάποιο άλλο σημείο τους. Οι μεταβλητές στην πραγματικότητα δείχνουν σε κάποια θέση μνήμης στον υπολογιστή που είναι αποθηκευμένα τα δεδομένα που αντιστοιχούν στην μεταβλητή. Τα ονόματα των μεταβλητών ξεκινάνε πάντα με τουλάχιστον ένα πεζό αγγλικό γράμμα. Τα κεφαλαία τα χρησιμοποιούμε αποκλειστικά να γράφουμε τις εντολές της Xbasic. Είναι απαραίτητο να γίνει αυτό γιατί εντολή που έχει έστω και ένα πεζό γράμμα δεν αναγνωρίζεται. Στα ονόματα των μεταβλητών η γλώσσα δεν μετατρέπει σε κεφαλαία ή πεζά ότι μοιάζει και έτσι οι μεταβλητές numa και numA είναι διαφορετικές. Τα ονόματα μεταβλητών δεν μπορούν να περιέχουν σύμβολα εκτός από το την υπογράμμιση (Underscore _).
Στην Xbasic υπάρχουν διάφορα είδη αριθμητικών μεταβλητών. Ανάλογα με το είδος της μεταβλητής υπάρχουν διαφορετικές απαιτήσεις μνήμης και διαφέρουν ως προς τον τρόπο που γίνονται οι μαθηματικές πράξεις σε αυτές. Π.χ. Μικρές αριθμητικές τιμές 1,10,100,-5 χρειάζονται λιγότερη μνήμη για να αποθηκευθούν από ότι οι τιμές 3.14 ή 312.45687632 και λιγότερη ώρα για τον υπολογισμό τους. Με την κατάλληλη χρήση των μεταβλητών εξασφαλίζεται η γρήγορη και αποτελεσματική λειτουργία του προγράμματός μας. Οι αριθμητικές μεταβλητές διακρίνονται σε τρία βασικά είδη:
Παραθέτω ένα πίνακα με τα είδη των ακεραίων αριθμητικών μεταβλητών που διαθέτει η Xbasic με το επίθεμά τους, το όνομα τους, το χώρο (σε bits) που καταλαμβάνουν στην μνήμη, και τις ελάχιστες και μέγιστες τιμές που μπορούν να έχουν.
Μεταβλητές με πρόσημο (signed).--------------------------------------------------------------------------------
@ SBYTE (8 bits) -128 έως 127 % SSHORT (16 bits) -32768 έως 32767 & SLONG (32 bits) -2147483648 έως 2147483647
--------------------------------------------------------------------------------
Μεταβλητές χωρίς πρόσημο (Unsigned).--------------------------------------------------------------------------------
@@ UBYTE (8 bits) 0 έως 255 %% USHORT (16 bits) 0 έως 65535 && ULONG (32 bits) 0 έως 4294967295
--------------------------------------------------------------------------------
Μεταβλητή συστήματος XLONG
Η μεταβλητή αυτή μπορεί να είναι 32 ή 64 bit ανάλογα με το σύστημα που χρησιμοποιούμε.
Οι μεταβλητές κινητής υποδιαστολής είναι δύο τύπων.
! SINGLE (32 bits) σύμφωνα με την κωδικοποίηση IEEE # DOUBLE (64 bits) σύμφωνα με την κωδικοποίηση IEEE
Οι μεταβλητές κινητής υποδιαστολής ανάλογα με το είδος τους μπορούν να έχουν ακρίβεια 8 δεκαδικών ψηφίων ο τύπος SINGLE και 16 δεκαδικών ψηφίων ο τύπος DOUBLE.
AUTO AUTOX STATIC SHARED (/όνομα ομάδας/) EXTERNAL (/όνομα ομάδας/)
EXTERNAL ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο για οποιοδήποτε κομμάτι προγράμματος ακόμη και αν αυτό είναι σε βιβλιοθήκη και γίνεται σύνδεση (link) μετά την μεταγλώττισή του (compile).
SHARED ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο σε όλες τις συναρτήσεις του τρέχοντος προγράμματος.
STATIC ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και κρατούν τις τιμές τους για διαδοχικές κλήσεις της συνάρτησης.
AUTO και AUTOX ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και για κάθε κλήση της συνάρτησης κάθε φορά παίρνουν νέα τιμή.
Οι μεταβλητές SHARED και EXTERNAL συνήθως ορίζονται στο τμήμα PROLOG όπως αναφέρθηκε προηγούμενα.
Όπως οι μεταβλητές έτσι και οι σταθερές καταλαμβάνουν κάποιο χώρο στην μνήμη. Οι σταθερές διαφέρουν από τις μεταβλητές στο ότι τα περιεχόμενά τους δεν αλλάζουν κατά την εκτέλεση του προγράμματος. Οι σταθερές έχουν όνομα όπως και οι μεταβλητές και οι περιορισμοί στην ονοματολογία τους είναι ίδια με αυτή των μεταβλητών όπως αναφέραμε παραπάνω. Οι σταθερές είναι χρήσιμες όταν γράφουμε προγράμματα που έχουν κάποια βασική παράμετρο που δεν αλλάζει. Π.χ. ο αριθμός π=3.14...
Λ.χ. perim=3.14*(2*R) emb=3.14*R*R
Αντί να γράφουμε τον αριθμό 3.14 κάθε φορά που θέλουμε να βάλουμε τον αριθμό π στους υπολογισμούς μας ορίζουμε σαν σταθερά την pi=3.14
Έτσι το πρόγραμμα διαμορφώνεται σε:
$pi=3.14 perim=$pi*(2*R) emb=$pi*R*R
Με αυτόν τον τρόπο ο κώδικας είναι ευανάγνωστος και εύκολα κατανοητός. Εκτός όμως από την πιο εύκολη αναγνωσιμότητα του προγράμματος μπορούμε πολύ εύκολα να αλλάξουμε την σταθερά π μόνο σε ένα σημείο στο πρόγραμμα και αυτό θα επηρεάσει όλα τα σημεία του προγράμματος που έχουν την σταθερά ενώ αν δεν την είχαμε χρησιμοποιήσει θα έπρεπε να αλλάξουμε σε κάθε σημείο τον αριθμό 3.14.
Οι σταθερές στην Xbasic είναι δύο ειδών.
Υπάρχουν και οι σταθερές συστήματος που τις δίνει η Xbasic και είναι διαθέσιμες σε όλα τα προγράμματα όπως $TRUE και $FALSE.
Είδαμε μέχρι στιγμής πως μπορούμε να κατασκευάσουμε ένα πρόγραμμα Xbasic. Πρέπει να προσεχτεί ιδιαίτερα από τους έμπειρους σε άλλες BASIC η σημασία της ενότητας ENTRY. Εκεί αρχίζει η εκτέλεση του προγράμματος και στο END FUNCTION τελειώνει. Αυτό βέβαια για τους προγραμματιστές C είναι γνωστό από την συνάρτηση MAIN. Πιστεύω ότι για κάποιον που έχει συνηθίσει BASIC και θέλει να αλλάξει γλώσσα και να πάει στην C, καλό είναι να περάσει πρώτα από την XBASIC. Θα έχει τις γνωστές εντολές (BASIC) με μικροδιαφορές αλλά η δομή του προγράμματος μοιάζει πιο πολυ με την C. Έτσι αφού εξοικειωθεί με την δομή της XBASIC τότε η αλλαγή στην C θα είναι πάρα πολύ εύκολη.