home *** CD-ROM | disk | FTP | other *** search
- Hello, and welcome to the ninth part of our on-going Basic
- Tutorial. This month, Peter Phillips is taking a detailed look at
- decision making with in Basic.
-
- FIRST STEPS IN BASIC
-
- Before we embark on this months article proper, remember the
- problem I set at the end of last month? Why does B = 100, when its
- limiting value is just 10? Well, for those of you who haven't
- worked it out for yourselves, the answer is quite straightforward.
- The loop controlled by counter B is nested inside the loop
- controlled by the value of A, which is also 10. Thus the B loop is
- actually executed 10 times before the limiting value is exceeded,
- and 10 times 10 is 100.
-
- While this may seem a pointless little exercise, it does
- demonstrate the dangers of nesting loops. Unless you understand
- precisely what the effects of one loop on another may be, you can
- end up with some results you didn't expect.
-
- DECISIONS, DECISIONS!
-
- We all make decisions all the time in our everyday lives. You
- made a decision to buy ST User, and another to read this column.
- These decisions are arrived at by careful consideration, and
- weighing up various factors.
-
- For instance, say you went to market and decided you wanted
- to buy some fruit. A simple decision between apples and pears
- could be made on price alone, you decide to buy the cheaper of the
- two. Apples are cheaper, so you decide to buy apples.
-
- This may seem a fairly simple process, and it would be easy
- to design a computer program to make the decision for you, based
- purely on price. Of course, computer don;t think like we do.
- Everything must be reduced to simple binary maths for them to be
- able to make any sort of sense out of a problem. Basic makes it a
- little easier for us by using the concepts of TRUE and FALSE.
-
- The ability to test the truth of a statement and thus decide
- on one course of action in preference to another forms the
- backbone of computer programming. In essence, all programs can be
- said to contain a set of simple true or false conditions. As an
- example:
-
- IF <condition> IS TRUE THEN <do this> ELSE <do this>
-
- This is called an IF... THEN... ELSE statement after the keywords
- it contains. We'll look at this statement in more detail later,
- but first lets have a look at how Basic works out the truth or
- falsehood of a statement.
-
- PROGRAM 1:
-
- 10 A = 10
- 20 B = 20
- 30 PRINT "A equals B:"; A=B
- 40 PRINT "A does not equal B:"; A<>B
- 50 PRINT "A is bigger than B:"; A>B
- 60 PRINT "B is bigger than A:"; A<B
-
- Basic should respond with:
-
- A equals B: 0
- A does not equal B: -1
- A is bigger than B: 0
- B is bigger than A: -1
-
- As you can see, the value 0 (zero) is taken to mean a
- statement is False, while a value of -1 (minus one) shows that the
- statement is True.
-
- This example raises one very important point. What are those
- little symbols and what do they actually mean? Well, the symbols
- are called Relational Operators, and they govern how Basic tests a
- statement for truth. A full list is given below.
-
- = Equals A is the same as B
- <> Not Equals A is not the same as B
- > Greater than A is more than B
- < Less than A is smaller than B
- >= Greater than or Equal to A is more than or the same as B
- <= Less than or Equal to A is less than or the same as B
-
- The value of A is always written to the left of the operator,
- while B is always to the right of the symbol.
-
- Many of you may already be familiar with most of these
- symbols. They are the same as those used in Algebra, except for
- the Not Equals symbol. Algebra uses a crossed out equals sign,
- which isn't available from the ST keyboard so '<>' was substituted
- instead.
-
- YOU'RE A LIAR!
-
- In the example program above, Basic applied its built-in lie
- detector to each of the statements in turn. For the first
- statement, A=B, it already knew that A had a value of 10, while B
- was set to 20. So the statement that A equals B is quite clearly
- false, and Basic printed 0 to indicate this.
-
- However, A is indeed less than B, so the statement A<B is
- true and go a -1 result to indicate the it is true.
-
- This simple process of truth and falsehood is how basic
- arrives at all its conclusions. No matter how complex a logical
- expression may appear at first, Basic simply breaks it down into
- manageable chunks and then checks the validity of each chunk in
- turn.
-
- One interesting point to remember that while basic always
- treats a value of 0 to be false, any non-zero number is taken to
- be true.
-
-
- A TESTING TIME
-
- The actual decision making system itself is something of a
- milestone in basic programming. In any program you are ever likely
- to write, it essential that you are able to test the truth of
- expressions and variables.
-
- Take one of the most common types of programs, a game. One of
- the most mundane and boring jobs is writing the so-called "user
- interface". This is the part of the game that allows the player to
- move, say, their spaceship around the screen and fire their lasers
- to destroy the enemy.
-
- Without the ability to test conditions for truth, it is
- impossible to tell if the joystick has been moved or the fire
- button pressed. Or, on a more basic level, how do you check the
- values from an INPUT statement to see if they are within the
- required limits?
-
- Basic provides all the tools to check for truth in the
- misleadingly simple IF THEN ELSE statement, which appeared briefly
- earlier in the article. The syntax of the statement is:
-
- IF <condition> THEN <statement>
-
- The ELSE portion of the statement is optional, but if it is
- used then the syntax is:
-
- IF <condition> THEN <statement 1>
- ELSE <statement 2>
-
- Before we go into any more detail about IF THEN ELSE
- statements, try this sample program, which combines the FOR...
- NEXT loop we learned last month with testing for truth
-
- PROGRAM TWO
-
- 10 FOR A=1 TO 20
- 20 PRINT A
- 30 IF A=10 THEN PRINT "HALF WAY THROUGH!"
- 40 NEXT
-
- The operation of this program is quite simple. Every time the
- NEXT statement increments the counter A, the IF statement checks
- to see if A is equal to 10 (ie the condition is true). When A is
- equal to 10 then it prints the message. Now try altering the
- program so line 10 reads:
-
- 10 FOR A=1 TO 20 STEP 2
-
- When this program is run, the message "HALF WAY THROUGH!" is
- never printed. This occurs because the value of A never exactly
- equals 10, so the condition is never met and the IF statement
- never becomes true.
-
- By now, you should be able to see how the IF statement works
- in its simplest form. When the line is executed, Basic tests the
- condition to see if it is satisfied. If it is, then a value of -1
- (true) is returned and everything after the THEN statement is
- executed. If the condition is not satisfied and 0 is returned,
- then execution of the program continues as normal.
-
- A more useful way of using IF is for checking the range of an
- input from the keyboard. Try this as an example:
-
- PROGRAM THREE
-
- 10 INPUT "Type any number up to 10";n
- 20 IF n>10 THEN PRINT "TOO BIG! TRY AGAIN.": GOTO 10
- 30 PRINT "YOU ENTERED ";n
-
- In this example, the IF statement is being used to ensure
- that the number typed in by the user conforms to the desired
- range. The GOTO statement after the IF statement simply forces the
- program to be run again. Because it is on the same line as the IF
- command, then it will only be executed if the condition is true.
-
- Program Three works perfectly well until you need a range of
- numbers, say from 0 to 10. When setting up a condition to test a
- range of numbers, it is important to remember that numbers can be
- positive as well as negative. If you wanted a positive number but
- got a negative, it could do strange things to your program.
-
- You could use a second IF statement to trap numbers that were
- to small, like this:
-
- 25 IF n<0 THEN PRINT "TOO SMALL! TRY AGAIN.": GOTO 10
-
- This may work, but it is not very neat. Your program has just
- grown by a line, and it is not always necessary to explain the
- fault in detail. Fortunately, the Conditional Operators we saw
- earlier will allows us to make just one IF command to the whole
- thing. Replace line 20 with the following, and remove line 25.
-
- 20 IF n< OR n>10 THEN PRINT "OUT OF RANGE!": GOTO 10
-
- Now the program works well and traps any numbers that are
- either too big or too small.
-
-
- BEFORE NEXT TIME...
-
- Yes, but what does that OR statement do..? This is a very
- good question, and next article I'll be looking at the True OR
- False table, and introducing more Logical Operators to go with it.
- In the mean time, try experimenting with the way IF THEN ELSE
- statements can be used.
-
-