## Chapter 4 - Storing Data in Variables

You can now use BBC BASIC to print to the screen and as a calculator. Wow, you might think, at least my calculator has a memory so I can store a result to use it again later. Well, BASIC has too. In fact it's got lots of memory areas you can use to store results, and it can store the information in different formats. This section introduces the concept of variables: memory locations within the computer that can be used by a program.

What we need is a little program to demonstrate this. If you have anything in the editor, get rid of it by pressing New. You will be prompted if you have not saved your previous masterpiece, so save it or discard it as you wish. Now type:

 REM Area of a circle Radius=5 Area=3.14159*Radius*Radius PRINT "The area of your circle is ";Area END
Run it, just to see it works. Save it because we'll be using it a lot later. Anybody who ever went to school once should understand the principles at work here, it's a bit like algebra. If you change the second line for different values of Radius and re-run the program, it will give you a different result each time. What is happening? When the program runs, it gets to the second line and sees we are trying to assign a value of 5 to something called Radius. BASIC maintains a list of memory locations which it creates afresh every time a program is run. As this is the first active line, it won't have a memory location called Radius, so one is very nicely made for us. Having done this, the value of 5 is written into the new location.

On the next line, something similar happens with the value for Area. The assignment is an expression, however, so it needs to calculate this first. When BASIC gets to the section with Radius, it goes to its variable list and finds the value. This is 5 from the previous line, so 5 is substituted into the expression. Once complete, the result is assigned to the newly created variable Area. The fourth line has BASIC retrieve the value and print it out after dressing with some text for clarity.

If you have opened any of the programs that come with BBC BASIC, you will have seen lots of lines like the above, so these things called variables must be quite important. We'll dwell on them for a while. Variables by default are floating point numbers, i.e. ones with a decimal place, but there are others. BBC BASIC supports four different types. These are defined by the last character of the variable's name:

Type  Description Examples Range Character
Floating point Decimals 3.142, 0.001, 1E10-2 –5.9E-39 to 3.4E38 # or none
Integer Whole numbers 32000, 4, -66 –2147483648 to +2147483647 %
Byte Whole numbers 0, 128, 255 0 to 255 &
String Text "BBC BASIC", "Hello" any number of characters from 0 to 65535 \$

It is possible to change the resolution of floating point numbers for greater accuracy, see the help files for more details.

A variable name can start with any letter of the alphabet (upper or lower case), an underscore ( _ ) or a grave accent ( ` ). It can then have any combination of upper and lowercase letters, numbers or underscores. The length of the name is not limited, but usually names are kept shortish to save typing. Finally there is the character that gives the type, from the table above. If no character is given, floating point is assumed.

Names are case sensitive so AREA, area and ArEa are different as far as BBC BASIC is concerned (not necessarily so with other dialects, but once you've used this one, you won't need any other). Also BB4W is quite happy with variables of different types with the same name, so Area%, Area and Area\$ would not confuse it, but might confuse you. It's your choice: be careful!

A final limitation is that variable names must not start with a BASIC command or keyword like PRINT, TAB or CLS. So, these are valid names:

 _my_float AnInteger% FirstName\$ NUM1
... and these are not:
 1_man_went_to_mow (starts with a number) Went to mow a meadow (contains spaces) PRINT_TOTAL (starts with a keyword)
Naming variables is an art in itself. Once everything was restricted to one or two letter names which tended to render a program an unintelligible mess. Not so now. BBC BASIC will recognise variable names of (practically) any length. These two would be considered different:
 averyveryveryveryveryverylongname1 averyveryveryveryveryverylongname2
However you would soon get fed up of typing those in every time you needed them and there is a hit on the performance speed of your program with lots of long names. Ten to fifteen letters is a good compromise. Shorter if possible, but get some meaning in there so readers can tell what the data represents. There are two conventions, one puts underscores between separate words to make them easier to read as spaces are not allowed. The other capitalizes the first letter of each word, like so:
 number_of_times NumberOfTimes
I tend to use the second method, but it's up to you.

As we have seen, variables are created the first time BASIC encounters them in an assignment statement. They must be on the left of the equals sign. An undeclared variable on the right will lead to an error. To try it, change the third line to:

 Area=3.14159*Radius*radius
and run. Always be careful of case!

Correct our little bug above and give the circle program a run through. Instead of closing the window, type:

 PRINT Radius PRINT Area
The variables are still in memory and are only cleared when the output window is closed or the program is run again. Type:
 CLEAR PRINT Radius
Now we get an error. CLEAR forces BASIC to wipe the slate clean and forget all its variables. It can be used in programs to re-initialize before doing another run.

Tip: Running your program from the output window
Just to go slightly off-topic for a second, whilst we're talking about using the output window, you can get your program to run again without closing the window. At the cursor type:
 RUN
and off it goes. It is slightly quicker than closing the window and waiting for it to open again.

Static Variables

BBC BASIC pre-declares 26 integer variables called A% through to Z%. Their properties are the same as other integer variables, but they have one special use. They are not cleared when the program is rerun, even if the program calls the CLEAR command mentioned above. They are not even cleared if the program calls another one. When BBC BASIC is closed, of course, all values are lost. Use of this functionality probably falls into the advanced category but it is worth noting.

Exercises

Now we have a good idea of variables and their use, try the following exercises:

1) Modify the area program to give the circumference of a circle 3.14159*diameter.
2) Print the area of a rectangle, when given the width and height.
3) Assign a string variable to contain your name and output:

 Hello, xxxx
where xxxx is, of course, your name.

### CHAPTER 5

© Peter Nairn 2006