+++
title = 'XBASIC'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Κ. Τσακάλογλου Tsakf@hellug.gr(mailto:%20Tsakf@hellug.gr)'
issue = ['Magaz 25']
issue_weight = 4
+++

----------------------------------------------------------------------------------------------------------------------------------------------------------------

*Σε αυτό το τεύχος του magaz Θα κάνουμε μια πρώτη προσπάθεια θα γράψουμε ένα πάρα πολύ απλό πρόγραμμα για να δούμε πως λειτουργεί το περιβάλλον και μελετήσουμε
τα βασικά στοιχεία που αποτελούν τη δομή ενός προγράμματος Xbasic.*

----------------------------------------------------------------------------------------------------------------------------------------------------------------

**1. Αρχικές ενέργειες**
-------------------------------------------------

**2. Το πρόγραμμά μας**
------------------------------------------------

**3. Ανάλυση προγράμματος**
----------------------------------------------------

**4. Δεδομένα: Μεταβλητές και σταθερές.**
------------------------------------------------------------------

-   [4.1 Μεταβλητές](#ss4.1)
-   [4.2 Αριθμητικές μεταβλητές](#ss4.2)
-   [4.3 Σκοπός μεταβλητών](#ss4.3)
-   [4.4 Σταθερές](#ss4.4)

**5. Επίλογος 2ου μέρους**
---------------------------------------------------


### [1. Αρχικές ενέργειες]{#s1}

Ξεκινάμε δίνοντας την εντολή στο περιβάλλον εργασίας της Xbasic για κατασκευή νέου προγράμματος επιλέγοντας από το **File\>New**. Θα εμφανιστεί παράθυρο για να
επιλεγεί το είδος του κειμένου που θέλουμε να δημιουργήσουμε. Επιλέγουμε την επιλογή program και το περιβάλλον δημιουργεί τις αρχικές εντολές που απαιτούνται
για το νέο πρόγραμμα.

Θα δούμε ότι έχουν δημιουργηθεί δύο ενότητες.

-   1\. PROLOG
-   2\. ENTRY

Μπορούμε να επιλέξουμε ποια θα βλέπουμε με την επιλογή **view\>function** και εμφανίζεται παράθυρο επιλογών από όπου διαλέγουμε την επιθυμητή ενότητα.
Επιλέγοντας το PROLOG βλέπουμε ότι το περιβάλλον έχει δημιουργήσει κάποιες εντολές για να μας βοηθήσει στο στήσιμο του νέου προγράμματος μας.


### [2. Το πρόγραμμά μας]{#s2}

Θα κατασκευάσουμε ένα απλό πρόγραμμα για να δούμε την δομή του αναλυτικά. Ο κώδικας που θα δούμε περιέχει αριθμούς γραμμής που στην πραγματικότητα δεν
χρειαζόμαστε. Μπήκαν απλά για να μπορεί να γίνει κατανοητή η εξήγηση των ενοτήτων.

----------------------------------------------------------------------------------------------------------------------------------------------------------------

    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

----------------------------------------------------------------------------------------------------------------------------------------------------------------


### [3. Ανάλυση προγράμματος]{#s3}

**Γραμμές 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** σχόλια

Σε αυτές στις γραμμές υπάρχει το σύμβολο \"\'\" που δηλώνει ότι η γραμμή αυτή είναι γραμμή σχολίων και έτσι δεν εκτελείται τίποτα απλά υπάρχει για να μπορεί ο
προγραμματιστής να βάζει σχόλια και να θυμάται μετά από καιρό τι έχει κάνει.


### [4. Δεδομένα: Μεταβλητές και σταθερές.]{#s4}

Στο παράδειγμά μας στις γραμμές 49,50,66 γίνεται ο ορισμός μεταβλητών. Τα προγράμματα συνήθως χρησιμοποιούν διαφορετικής μορφής δεδομένα και χρειάζεται ένα
τρόπο να τα αποθηκεύει. Αυτά τα δεδομένα μπορεί να είναι ή αριθμοί ή γράμματα (χαρακτήρες). Η Xbasic έχει δύο τρόπους να αποθηκεύει δεδομένα -μεταβλητές και
σταθερές- όπου κάθε περίπτωση έχει τις ιδιότητές της.

### [4.1 Μεταβλητές]{#ss4.1}

Οι μεταβλητές χρησιμοποιούνται για να αποθηκεύσουμε δεδομένα του προγράμματος και να τα χρησιμοποιήσουμε σε κάποιο άλλο σημείο τους. Οι μεταβλητές στην
πραγματικότητα δείχνουν σε κάποια θέση μνήμης στον υπολογιστή που είναι αποθηκευμένα τα δεδομένα που αντιστοιχούν στην μεταβλητή. Τα ονόματα των μεταβλητών
ξεκινάνε πάντα με τουλάχιστον ένα πεζό αγγλικό γράμμα. Τα κεφαλαία τα χρησιμοποιούμε αποκλειστικά να γράφουμε τις εντολές της Xbasic. Είναι απαραίτητο να γίνει
αυτό γιατί εντολή που έχει έστω και ένα πεζό γράμμα δεν αναγνωρίζεται. Στα ονόματα των μεταβλητών η γλώσσα δεν μετατρέπει σε κεφαλαία ή πεζά ότι μοιάζει και
έτσι οι μεταβλητές numa και numA είναι διαφορετικές. Τα ονόματα μεταβλητών δεν μπορούν να περιέχουν σύμβολα εκτός από το την υπογράμμιση (Underscore \_).

### [4.2 Αριθμητικές μεταβλητές]{#ss4.2}

Στην 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.

### [4.3 Σκοπός μεταβλητών]{#ss4.3}

**AUTO AUTOX STATIC SHARED (/όνομα ομάδας/) EXTERNAL (/όνομα ομάδας/)**

**EXTERNAL** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο για οποιοδήποτε κομμάτι προγράμματος ακόμη και αν αυτό είναι σε βιβλιοθήκη και
γίνεται σύνδεση (link) μετά την μεταγλώττισή του (compile).

**SHARED** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο σε όλες τις συναρτήσεις του τρέχοντος προγράμματος.

**STATIC** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και κρατούν τις τιμές τους για διαδοχικές κλήσεις της συνάρτησης.

**AUTO** και **AUTOX** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και για κάθε κλήση της συνάρτησης κάθε φορά παίρνουν νέα τιμή.

Οι μεταβλητές **SHARED** και **EXTERNAL** συνήθως ορίζονται στο τμήμα PROLOG όπως αναφέρθηκε προηγούμενα.

### [4.4 Σταθερές]{#ss4.4}

Όπως οι μεταβλητές έτσι και οι σταθερές καταλαμβάνουν κάποιο χώρο στην μνήμη. Οι σταθερές διαφέρουν από τις μεταβλητές στο ότι τα περιεχόμενά τους δεν αλλάζουν
κατά την εκτέλεση του προγράμματος. Οι σταθερές έχουν όνομα όπως και οι μεταβλητές και οι περιορισμοί στην ονοματολογία τους είναι ίδια με αυτή των μεταβλητών
όπως αναφέραμε παραπάνω. Οι σταθερές είναι χρήσιμες όταν γράφουμε προγράμματα που έχουν κάποια βασική παράμετρο που δεν αλλάζει. Π.χ. ο αριθμός π=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 είναι δύο ειδών.

-   Οι τοπικές σταθερές που ορίζονται αρχικά μέσα σε μια συνάρτηση και στο όνομά τους προηγείται ένα \$ Π.χ. \$YES
-   Οι σταθερές που αφορούν όλο το πρόγραμμα και ορίζονται στο κομμάτι PROLOG στην αρχή του προγράμματος και στο όνομα τους προηγούνται δύο \$. Π.χ. \$\$READ

Υπάρχουν και οι σταθερές συστήματος που τις δίνει η Xbasic και είναι διαθέσιμες σε όλα τα προγράμματα όπως \$\$TRUE και \$\$FALSE.


### [5. Επίλογος 2ου μέρους]{#s5}

Είδαμε μέχρι στιγμής πως μπορούμε να κατασκευάσουμε ένα πρόγραμμα Xbasic. Πρέπει να προσεχτεί ιδιαίτερα από τους έμπειρους σε άλλες BASIC η σημασία της ενότητας
ENTRY. Εκεί αρχίζει η εκτέλεση του προγράμματος και στο END FUNCTION τελειώνει. Αυτό βέβαια για τους προγραμματιστές C είναι γνωστό από την συνάρτηση MAIN.
Πιστεύω ότι για κάποιον που έχει συνηθίσει BASIC και θέλει να αλλάξει γλώσσα και να πάει στην C, καλό είναι να περάσει πρώτα από την XBASIC. Θα έχει τις γνωστές
εντολές (BASIC) με μικροδιαφορές αλλά η δομή του προγράμματος μοιάζει πιο πολυ με την C. Έτσι αφού εξοικειωθεί με την δομή της XBASIC τότε η αλλαγή στην C θα
είναι πάρα πολύ εύκολη.

