329 γραμμές
18 KiB
Markdown
329 γραμμές
18 KiB
Markdown
+++
|
||
title = 'Xbasic'
|
||
date = '2000-11-01T00:00:00Z'
|
||
description = ''
|
||
author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)'
|
||
issue = ['Magaz 28']
|
||
issue_weight = 2
|
||
+++
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος 4ο*
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
**1. Σχεσιακοί τελεστές**
|
||
--------------------------------------------------
|
||
|
||
- [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών](#ss1.1)
|
||
|
||
**2. Η εντολή IF**
|
||
-------------------------------------------
|
||
|
||
**3. Παραδείγματα**
|
||
--------------------------------------------
|
||
|
||
- [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE](#ss3.1)
|
||
- [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.](#ss3.2)
|
||
- [3.3 Επόμενο τεύχος](#ss3.3)
|
||
|
||
|
||
### [1. Σχεσιακοί τελεστές]{#s1}
|
||
|
||
Οι σχεσιακοί τελεστές της Xbasic χρησιμοποιούνται για να συγκρίνουν μεταβλητές με σταθερές ή μεταβλητές μεταξύ τους. Π.χ. Είναι η τιμή της μεταβλητής x
|
||
μεγαλύτερη από 100; Η τιμή της μεταβλητής a είναι ίση με την τιμή της μεταβλητής d;
|
||
|
||
Αυτοί οι τελεστές μας επιστρέφουν τιμές \$\$TRUE ή \$\$FALSE αντίστοιχα αν η σχέση ισχύει ή όχι.
|
||
|
||
Παραθέτω παρακάτω ένα πίνακα με τους σχεσιακούς τελεστές που υπάρχουν στην Xbasic.
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
Μεγαλύτερο >, !<= Το x είναι μεγαλύτερο του y x>y x!<=y
|
||
Μεγαλύτερο ή ίσο >=, !< Το x είναι μεγαλύτερο ή ίσο του y x>=y x!<y
|
||
Μικρότερο ή ίσο <=, !> Το x είναι μικρότερο ή ίσο του y x<=y x!>y
|
||
Μικρότερο <, !>= Το x είναι μικρότερο του y x<y x!>=y
|
||
Διάφορο (όχι ίσο) <>, != Το x είναι διάφορο του y x<>y x!=y
|
||
Ισο =,== Το x είναι ίσο με το y x=y x==y
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
### [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών]{#ss1.1}
|
||
|
||
- 5 = 1 Είναι το 5 ίσο με το 1; \$\$FALSE
|
||
- 5 \> 1 Είναι το 5 μεγαλύτερο από το 1 \$\$TRUE
|
||
- 5
|
||
- 1 Είναι το 5 διάφορο του 1 \$\$TRUE
|
||
|
||
|
||
### [2. Η εντολή IF]{#s2}
|
||
|
||
Οι σχεσιακοί τελεστές χρησιμοποιούνται για να γίνονται οι έλεγχοι στις εντολές IF και WHILE που θα μελετήσουμε. Αυτές οι εντολές χρειάζονται για να αποφασίζεται
|
||
η εκτέλεση διαφορετικών κομματιών κώδικα, ανάλογα με το αν ισχύουν ή όχι οι σχεσιακοί τελεστές που αναφέρονται στην εντολή IF ή WHILE αντίστοιχα. Από τα
|
||
προηγούμενα παραδείγματα είδαμε ότι η εκτέλεση των προγραμμάτων γίνεται με εκτέλεση των εντολών από πάνω προς τα κάτω. Έτσι, η εντολή IF υπολογίζει το
|
||
αποτέλεσμα των σχεσιακών τελεστών και εκτελεί το κομμάτι του κώδικα αντιστοιχεί για την κάθε περίπτωση αληθές/ψευδές (\$\$TRUE/\$\$FALSE).
|
||
|
||
Στην Xbasic η εντολή if μπορεί να έχει τις εξής μορφές:
|
||
|
||
- IF (σχεσιακός τελεστής.) ΤΗΕΝ (εντολή 1)
|
||
|
||
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1
|
||
|
||
- IF (σχεσιακός τελεστής) ΤΗΕΝ (εντολή 1) ELSE (εντολή 2)
|
||
|
||
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 αλλιώς αν δεν ισχύει (\$\$FALSE) τότε θα εκτελεστεί η εντολή 2
|
||
|
||
- IF (σχεσιακός τελεστής) ΤΗΕΝ
|
||
|
||
(εντολή 1
|
||
|
||
εντολή
|
||
|
||
εντολη)
|
||
|
||
END IF
|
||
|
||
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF.
|
||
|
||
- IF (σχεσιακός τελεστής) ΤΗΕΝ
|
||
|
||
(εντολή 1
|
||
|
||
εντολή
|
||
|
||
εντολη)
|
||
|
||
ELSE
|
||
|
||
(εντολή 2
|
||
|
||
εντολή
|
||
|
||
εντολη)
|
||
|
||
END IF
|
||
|
||
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το ELSE αλλιώς αν δεν ισχύει ο τελεστής
|
||
(\$\$FALSE) τότε θα εκτελεστεί η εντολή 2 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF.
|
||
|
||
|
||
### [3. Παραδείγματα]{#s3}
|
||
|
||
Για να κατανοήσουμε καλύτερα την χρήση των σχεσιακών τελεστών θα δούμε δύο παραδείγματα με την εντολή IF. Στο ένα παράδειγμα θα χρησιμοποιήσουμε την εντολή IF
|
||
χωρίς το ELSE και στο επόμενο θα την χρησιμοποιήσoυμε μαζί με το ELSE.
|
||
|
||
### [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE]{#ss3.1}
|
||
|
||
Ας δούμε όμως μερικά παραδείγματα.
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
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.' * 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. DECLARE FUNCTION Entry ()
|
||
35.'
|
||
36.'
|
||
37.' ######################
|
||
38.' ##### Entry () #####
|
||
39.' ######################
|
||
40.'
|
||
41.' Programs contain:
|
||
42.' 1. A PROLOG with type/function/constant declarations.
|
||
43.' 2. This Entry() function where execution begins.
|
||
44.' 3. Zero or more additional functions.
|
||
45.'
|
||
46.FUNCTION Entry ()
|
||
47.STRING in1,in2
|
||
48.SSHORT num1,num2
|
||
49.in1=INLINE$("Number 1... ")
|
||
50.in2=INLINE$("Number 2... ")
|
||
51.num1=SSHORT(in1)
|
||
52.num2=SSHORT(in2)
|
||
53.IF num1=num2 THEN
|
||
54. PRINT num1; " = "; num2
|
||
55.END IF
|
||
56.IF num1>num2 THEN
|
||
57. PRINT num1; " > "; num2
|
||
58.END IF
|
||
59.IF num1<num2 THEN
|
||
60. PRINT num1; " < "; num2
|
||
61.END IF
|
||
62.END FUNCTION
|
||
63.END PROGRAM
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
**Ανάλυση του παραδείγματος.**\
|
||
**Γραμμές 1..45 PROLOG**
|
||
|
||
Σε αυτό το τμήμα ορίζονται το όνομα του προγράμματος, οι βιβλιοθήκες και οι συναρτήσεις.
|
||
|
||
**Γραμμές 46..62 Συνάρτηση ENTRY**
|
||
|
||
Εδώ θα σταθούμε λίγο πιο αναλυτικά για να εξηγήσουμε την λειτουργία του προγράμματος.
|
||
|
||
**Γραμμές 47,48**\
|
||
Εδώ ορίζονται οι τοπικές μεταβλητές που θα χρησιμοποιήσουμε στην συνάρτηση.
|
||
|
||
**Γραμμές 49..52**\
|
||
Εδώ χρησιμοποιούμε την γνωστή πια συνάρτηση INLINE\$ για να πάρουμε το αποτέλεσμα της πληκτρολόγησης των δύο αριθμών από τον χρήστη και ακολούθως με τις εντολές
|
||
SSHORT μετατρέπουμε τις αλφαριθμητικές μεταβλητές σε αριθμητικές για να μπορούμε να κάνουμε σωστά τις συγκρίσεις.
|
||
|
||
**Γραμμές 53..55**\
|
||
Γίνεται ο έλεγχος για την ισότητα των δύο αριθμών. Αν ισχύει η ισότητα τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 = αριθμός2. Σε περίπτωση που
|
||
οι αριθμοί δεν είναι ίσοι τότε η εκτέλεση του προγράμματος θα προχωρήσει παρακάτω χωρίς να γίνει εκτέλεση της εντολής στην γραμμή 54.
|
||
|
||
**Γραμμές 56..58**\
|
||
Γίνεται ο έλεγχος για την περίπτωση που ο πρώτος αριθμός είναι μεγαλύτερος. Αν αυτό ισχύει,τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 \>
|
||
αριθμός2. Αν δεν ισχύει αυτό τότε η εκτέλεση του προγράμματος θα συνεχιστεί παρακάτω χωρίς να εκτελεστεί η γραμμή 57.
|
||
|
||
**Γραμμές 59..61**\
|
||
Γίνεται ο έλεγχος για την περίπτωση που ο πρώτος αριθμός είναι μικρότερος. Αν αυτό ισχύει τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 \<
|
||
αριθμός2. Τότε δεν θα εκτελεστεί η γραμμή 60.
|
||
|
||
Αυτός είναι ο απλός τρόπος να κάνουμε συγκρίσεις και λαμβάνει υπ\' όψιν του όλες τις περιπτώσεις. Έχει όμως ένα μειονέκτημα. Αν οι δύο αριθμοί είναι ίσοι τότε
|
||
θα τυπωθεί αριθμός1 = αριθμός2 όμως στην συνέχεια θα γίνουν οι επόμενες συγκρίσεις που δεν χρειάζονται. Έτσι για να βελτιστοποιήσουμε την ταχύτητα εκτέλεσης
|
||
χρησιμοποιούμε την εντολή IF μαζί με την ELSE. Παρακάτω θα δούμε πως διαφοροποιείται το πρόγραμμα με την χρήση της ELSE.
|
||
|
||
### [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.]{#ss3.2}
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
1.'
|
||
2.' ####################
|
||
3.' ##### PROLOG #####
|
||
4.' ####################
|
||
.
|
||
.
|
||
.
|
||
.
|
||
.
|
||
37.' ######################
|
||
38.' ##### Entry () #####
|
||
39.' ######################
|
||
40.'
|
||
41.' Programs contain:
|
||
42.' 1. A PROLOG with type/function/constant declarations.
|
||
43.' 2. This Entry() function where execution begins.
|
||
44.' 3. Zero or more additional functions.
|
||
45.'
|
||
46.FUNCTION Entry ()
|
||
47.STRING in1,in2
|
||
48.SSHORT num1,num2
|
||
49.in1=INLINE$("Number 1... ")
|
||
50.in2=INLINE$("Number 2... ")
|
||
51.num1=SSHORT(in1)
|
||
52.num2=SSHORT(in2)
|
||
53.IF num1=num2 THEN
|
||
54. PRINT num1;" = ";num2
|
||
55.ELSE
|
||
56. IF num1>num2 THEN
|
||
57. PRINT num1;" > ";num2
|
||
58. ELSE
|
||
59. PRINT num1;" < ";num2
|
||
60. END IF
|
||
61.END IF
|
||
62.END FUNCTION
|
||
63.END PROGRAM
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
**Ανάλυση του παραδείγματος.**
|
||
|
||
**Γραμμές 1..45 PROLOG , Γραμμές 46..62 Συνάρτηση ENTRY, Γραμμές 47,48 και οι γραμμές 49..52**
|
||
|
||
Έχουν την ίδια ακριβώς σημασία με το προηγούμενο παράδειγμα και έτσι δεν θα ασχοληθούμε με αυτές εδώ. Στις γραμμές 53..61 φαίνεται η διαφορά στις εντολές του
|
||
παραδείγματος με το προηγούμενο, γι\' αυτό θα σταθούμε λίγο πιο αναλυτικά.
|
||
|
||
**Γραμμές 53..55**
|
||
|
||
Στην περίπτωση που οι δύο αριθμοί είναι ίσοι τότε θα εκτελεστεί η γραμμή 54. Η παρουσία του ELSE στην γραμμή 55 που σημαίνει ότι αν δεν ισχύει η ισότητα τότε θα
|
||
εκτελεστεί ο κώδικας που βρίσκεται ανάμεσα στις γραμμές 56..61 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση στην γραμμή 62. Με αυτόν τον τρόπο αποφεύγουμε
|
||
τις υπόλοιπες συγκρίσεις.
|
||
|
||
**Γραμμές 56..58**
|
||
|
||
Αν ο αριθμός1 είναι μεγαλύτερος, τότε θα εκτελεστεί η γραμμή 57. Η παρουσία του ELSE στην γραμμή 58 που σημαίνει ότι αν ο αριθμός1 δεν είναι μεγαλύτερος τότε θα
|
||
εκτελεστεί η εντολή στην γραμμή 59 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση .στην γραμμή 61.Έτσι ανάλογα με το αν ο αριθμός1 είναι μεγαλύτερος ή όχι
|
||
εκτελείται η γραμμή 57 ή η γραμμη 61 αντίστοιχα.
|
||
|
||
Για να ανακεφαλαιώσουμε τα παραπάνω επιγραμματικά έχουμε:
|
||
|
||
**Πρώτο παράδειγμα**
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
IF num1=num2 THEN
|
||
.
|
||
END IF
|
||
IF num1>num2 THEN
|
||
.
|
||
END IF
|
||
IF num1<num2 THEN
|
||
.
|
||
END IF
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
Ανεξάρτητα από τις τιμές των μεταβλητών θα εκτελεστούν και οι τρείς συγκρίσεις.
|
||
|
||
**Δεύτερο παράδειγμα**
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
IF num1=num2 THEN
|
||
.
|
||
ELSE
|
||
IF num1>num2 THEN
|
||
.
|
||
ELSE
|
||
..
|
||
END IF
|
||
END IF
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
Εδώ τώρα, ανάλογα με τις τιμές των μεταβλητών θα εκτελεστούν.
|
||
|
||
- Αν οι δύο αριθμοί είναι ίσοι γίνεται η πρώτη σύγκριση και παραλείπονται τα υπόλοιπα
|
||
- Αν ο πρώτος αριθμός είναι μεγαλύτερος τότε γίνονται και οι δύο συγκρίσεις num1=num2 και num1\>num2.
|
||
- Αν ο πρώτος αριθμός είναι μικρότερος τότε πάλι γίνονται οι δύο συγκρίσεις num1=num2 και num1\>num2.
|
||
|
||
Όπως βλέπουμε στο πρώτο παράδειγμα γίνονται πάντα τρεις συγκρίσεις; ενώ στο δεύτερο γίνονται μία ή και δύο. Είναι φανερό πια γιατί προτιμάμε να χρησιμοποιούμε
|
||
το ELSE από το να κάνουμε διαδοχικές συγκρίσεις. Γράφουμε μικρότερο και ταχύτερο κώδικα.
|
||
|
||
### [3.3 Επόμενο τεύχος]{#ss3.3}
|
||
|
||
Στο επόμενο, θα αναλύσουμε τις συναρτήσεις στην XBasic. Θα πούμε ποιός είναι ο σκοπός τους, πως δημιουργούνται, και πως τις χρησιμοποιούμε. Θα αναλύσουμε επίσης
|