1) If you have a long list of items to add up on a calculator, and you find yourself
interrupted for some reason, you lose your place and have to start again. To avoid errors,
you either need a perfect memory or you have to write a list on paper. **BBC BASIC**,
however, not only performs calculations, but can print out a record in both figures and
text of the task in hand.

2) If you wish you can use brackets, as in algebra, to perform a series of interlinked calculations in one go.

As promised in the introduction, we will assume you are an absolute beginner in **BBC
BASIC** and have never succeeded in doing anything with the blank screen showing the
BASIC prompt. Perhaps you have tried, in the absence of a tutor, to use BASIC like a
calculator, by typing in figures and linking them together with the signs for addition or
subtraction. Nothing happens. Perhaps you have tried typing in letters from the keyboard,
just like a typewriter, and have been even more discouraged to get the error message
**MISTAKE!** Or perhaps, if you are a "restart" beginner, you once tried to teach yourself
**BBC BASIC** from the ** BBC Micro User Manual**, and found, in the absence of a tutor,
that every program you tried to follow seemed to pre-suppose that you were at home with
commands that you had never seen before! All of these are common problems which can
be easily surmounted. What you need to appreciate at the outset is that there is a
difference between cataloguing the material to be learnt and managing your personal
learning strategies. Successful cataloguing follows on from successful understanding,
and no definition needs to be learnt just for the sake of learning it.

Similarly, the BASIC keyword **PRINT** can send the result of a calculation to a number of
hardware devices controlled by the computer: the screen, the printer or the disk drive.
The default destination in BBC BASIC is the screen, not the printer, and extra commands
are needed to send the answer to the printer or to save it to disc. So in practice the simple
command **PRINT** means: "Print the results of my keyboard operation on screen." We
can now put this into practice with arithmetic. Locate the instructions for accessing BBC BASIC
on the web page, and don't forget to type *BYE when you want to quit.

**PRINT** 2+2 **[Enter]**

The answer is worked out and printed on the screen. Realists will at this point object that
no sane person on Earth needs to know how to work out the sum of two and two.
True. But there are millions of people who do indeed need to make a breakthrough in
computer programming, by appreciating that success follows on from seeing not only that
the numerical operation **2+2** can be represented by the single figure **4**, but that this single
figure can be assigned to a letter such as **A**, that algebraic operations can be performed on
this letter by the computer, and the numerical result delivered automatically.

However, we shall come to algebra when we have finished with simple arithmetic. To take
the next step, type in a whole row of figures to add together. Start your row with the
command **PRINT**, join your figures with the plus sign, and finish by pressing the **[Enter]**
key.

The genie of the lamp produces the answer - but so does a pocket calculator. So what is
the advantage of a computer? The initial answer is that **BBC BASIC** gives greater
security in adding up a long list. The computer displays a memo of what you are doing as
you go along and saves you the added task of making jottings. Now let's put this new
knowledge into practice with some real-life accounting.

Date | Transaction Description | Debit | Credit | Balance |
---|---|---|---|---|

30SEP | PREVIOUS STATEMENT BALANCE | 999.99 | ||

1OCT | S-ORDER TO SUPERSOFT SOFTWARE | 19.98 | 980.01 | |

2OCT | DIRECT DEBIT TO PURPLE PAGES | 6.00 | 974.01 | |

3OCT | CHEQUE | 50.00 | 924.01 | |

4OCT | BANK CREDIT BOOMTOWN 7 A/C | 1234.00 | 2158.01 |

On your statement, pencil in the additional cheques you have drawn since the statement
was issued, as well as standing orders and direct debits due on the calendar. Then pencil in
additional credits such as cheques you have paid in, or your salary if you have received the
usual slip from your employer. At a later stage you will learn how to simulate a bank
statement, but for the moment let us simply use **BBC BASIC** as a combination of
calculator and jotter.

**REM** CREDITS **[Enter]**

Now type **PRINT**, followed by all the credits you have pencilled into your statement since
the last entry. Use the **+** arithmetic operator between each keyboard entry. Don't forget to
press **[Enter]** at the end of your row of entries. This will total your credits and you can
then check each entry for accuracy. Do the same with your debits (typing in **REM**
DEBITS at the start) to add up the total. Working out the final balance is a simple matter
of subtracting the sum of the debits from the existing balance, and adding the sum of the
credits. The combination of **REM**arks and figures on screen should ensure that you don't
make a mistake.

In the course of **Unit 1** you will learn how to write a program so that the computer can carry
out a series of calculations in separate stages. But by using BASIC in calculator mode,
with jottings entered after the keyword **REM**, an enormous amount of rapid and accurate
work can be done with figures without any need for programming.

**PRINT** 567*567 **[Enter]**

**PRINT** 999/9 **[Enter]**

x=(a+b)-(c/d)

You no doubt remember that in order to arrive at *x*, you have to add *a* and *b*, then divide *c*
by *d*, then subtract the answer in the second set of brackets from the answer in the first.
The use of BASIC as a machine for handling letters as algebraic symbols will be
considered later. For the moment we want to examine the question of brackets purely for
arithmetic in BASIC. There are two points to make:

1) Although the above operation will work successfully as shown, using the brackets
given, it is a point of interest to note that **BBC BASIC** adheres to the normal rules of arithmetic, and does not ** technically **need the brackets shown in the example above. To
illustrate this, carry out the calculation below, first on a pocket calculator, then using BBC
BASIC:

9/5-6*7If you find this confusing, don't worry: the author also found it a hard nut to crack at first. So a word needs to be said here about the successful management of learning strategies. The student ofIf you divide 9 by 5 on the calculator, it gives you 1.8.

Subtract 6 from 1.8 and you get -4.2

Multiply -4.2 by 7 and you get -29.4

However, now type the following into BBC BASIC

[Enter]it returns an answer of -40.2, the same answer that you will get if you use brackets, as follows:

[Enter]

**PRINT** 2^2**[Enter]**

**PRINT** 2^3**[Enter]**

To find a square root, use the abbreviation **SQR**, as in the following example:

**PRINT** SQR 16 **[Enter]**

To those who are familiar with geometry, this evidently promises to be useful in
calculations involving Pythagoras' theorem. Later in this tutor, you will learn how to use
**BBC BASIC** to produce both geometrical diagrams and technical drawings.

If you are a restart beginner, and have been foxed up to now by the use of letters to
represent variables in **BBC BASIC**, then here is a useful piece of advice written sixty
years ago by John Davidson in * Teach Yourself Mathematics*: "...if the student makes up
his mind to see in algebraical operations only arithmetical processes generalised, he ought
to find little difficulty"(p.19). Applied to

Nothing will be achieved by typing in an algebraic formula at the outset, such as the following:

*x=8ab-3(cd/e)*

When you as a human being write such a formula, you know from experience that you can
work out the value of ** x** once you have assigned values to the other letters. But that
experience is

We have to tell the computer what one packet costs. Type the following:

**LET EGGS=50 [Enter]**

Here we have assigned a value to a word. As soon as we press the **[Enter]** key, the
computer stores the value. This is called an **ASSIGNMENT STATEMENT**. (We will
assume that by now you have made a habit of pressing the **[Enter]** key after a keyboard
statement or command, and from now on it will be omitted in the text! ) To check that the
value has been committed to memory, tell the computer to print it out, as follows:

**PRINT EGGS**

The computer returns (on screen) the figure we have assigned to the word EGGS. Suppose we want two packets of eggs. We can instruct the computer to add 50 and 50 or multiply 50 by 2, using EGGS as the code-word for 50. Try it, using the PRINT command to mean "calculate and print on the screen", as follows:

**LET EGGS=50**

**PRINT EGGS+EGGS**

**PRINT EGGS*2**

In each case, the answer is given as 100. We know it is 100p, and that 100p=£1.00, but
the computer has simply added 50 and 50. How do we get it to convert pence to pounds?
In the long run we can use the command **IF**, followed by the command **THEN**, to deal
with ifs and buts. But for the moment we shall learn how to get the computer to carry out
two commands in sequence: to multiply the cost of a packet of eggs by the number of
packets we want, then to convert the sum from pence into pounds. Logically enough, a
sequence of two or more commands is called a program. Hence the origin of the word!

**BBC BASIC** requires the steps in a program to be numbered. Not all programming
languages do - but the real beginner is helped by numbering statements, because it makes
it easier to edit anything that goes wrong. For editing purposes also we number our lines
in steps of 10: line one is 10, line two 20, and so on. The reason for this is that if you need
to put finer detail into a program when you're revising it, you can add lines in between
each step of 10. Now let's get back to our program.

**10 LET E=70**

**20 PRINT E**

**RUN**

This two-line program is a program, however short. The combination of the BASIC
keyword **LET** and the equals sign stores the value of 70 in the letter E. To get the
computer to execute the program we enter the BASIC keyword **RUN**. Sure enough, the
figure we have entered for **E** is displayed on the screen. Now let's make the computer earn
its keep by doing some computing. We want two packets of eggs. What do they cost?
Type the following:

**10 LET E=70**

**20 PRINT 2*E**

**RUN**

We are told that the total cost is 140p. The computer cannot be expected to know that
140p=£1.40, but we can instruct it to convert the total pence into pounds as part of the
program. Here we have a new variable called "total", which we shall abbreviate to **T**. So
we now give the computer four instructions in sequence:

1) to store to memory the statement that one packet of eggs costs 70 p

2) to multiply the cost by two

3) to divide the total by 100 to give the cost in pounds and pence as a decimal fraction.
(The pound sign can give problems, so we shall use the abbreviation **GBP** for sterling.)

4) to print out the total on screen.

Now that we are familiar with the assignment statement, we can note in passing that the
**BASIC keyword LET** can be dropped. Type in the following program and RUN it:

**10 E=70**

**20 T=(2*E)**

**30 GBP=T/100**

**40 PRINT GBP**

To consolidate this, let us assume a range of three prices, from small eggs to extra large,
@ 70p, 80p and 99p respectively. Type in the following assignment statements and
**PRINT** commands:

**E=70**

**PRINT E**

**E=80**

**PRINT E**

**E=99**

**PRINT E**

**10 INPUT E
20 T=2*E
30 GBP=T/100
40 PRINT GBP**

The obvious drawback of entering the price of the eggs in pence is that we have to divide by 100 to convert into pounds. To avoid this, we will henceforth enter all pence values as decimal fractions of a pound.

Suppose we're doing the weekly shop, and we want small eggs for baking, medium eggs for omelettes and large eggs to boil. We want two packets of small, two of medium and three of large. How do we do it?

Type the following opening line:

**5 REM S=SMALL EGGS: M=MEDIUM EGGS: L=LARGE EGGS**

We are now ready to calculate the cost of our eggs before we shop. Let's assume that half a dozen small eggs cost 70p, medium cost 80p and large cost 99p, and we want three packets of each. Even without starting our program, it's obvious that multiplying prices in pence will give a large total of pence, so we will enter each price as a decimal fraction of a pound.

**5 REM S=SMALL EGGS : M=MEDIUM EGGS: L=LARGE EGGS
10 S=0.7
20 M=0.8
30 L=0.99
40 T=(3*S)+(3*M)+(3*L)
50 PRINT T**

**10 REM EGGS
20 REM S=SMALL:M=MEDIUM:L=LARGE
30 INPUT S
40 INPUT M
50 INPUT L
60 T=(3*S)+(3*M)+(3*L)
70 PRINT T**

When you **RUN** this program , the computer will present you on screen with three
question marks, one after the other. You choose and then type in (i.e. **INPUT**) the figures
(nothing else) for the separate values of a packet of small eggs, a packet of medium eggs
and a packet of large eggs, in response to each of the question marks. Once you **ENTER**
the final figure, the computer then returns the total cost in pounds and pence. Thus if you
choose £0.50 for a packet of small, £0.60 for a packet of medium and
£0.70 for a packet of large, your total cost comes to **GBP** 5.40.

The question might arise at this point why three different sizes of the same article can't be
grouped under a single heading. This can in fact be done in the form of an **Array**,
where **E** stands for eggs, and the three different sizes appear as **E(1)**, **E(2)** and **E(3)**.
However, in order to take full advantage of this, we need to construct a program which
goes round in numbered circles - doing a differentiated task each time round - and that will
require a separate chapter. For the moment we can simply note the possibility of grouping
like variables in sets - a facility to be elaborated later - so as to achieve the true economy
of effort of which **BBC BASIC** is capable.

This has often been confusing for beginners, but the key to getting it clear lies in the fact
that the name of the variable, whether **E** or **eggs**, can have a numeric value assigned to
it by means of the equals sign: the computer reads that letter as a token for a specific
agreed number. When we start using text, however, we have to type in a command which
changes the role of the keyboard. Once the command is issued, every key on the keyboard
sends a code to the processor, which produces the **letter **represented by the key code on
screen. In other words, it types it. That seems common sense enough, but it is a different
deal from representing numbers.

The programming switch which changes over this function of representation, from
numbers to text, is a "two-pole" switch: the variable **name** is followed by the dollar sign,
and the text itself is enclosed in inverted commas, as follows:

**10 N$= "Ebenezer Scrooge"
20 PRINT N$**

As soon as you **RUN** this program, it prints out the name Ebenezer Scrooge. Try it
several times, substituting a different name for Dickens' celebrated character. From this it
becomes clear that **N$** is a variable, and because it represents a string of characters rather
than a number, we call it a **"string variable"**.

**10 REM EGGS
20 REM S=SMALL: M=MEDIUM:L=LARGE
30 L$= "Large eggs"
40 M$=" Medium eggs"
50 S$= " Small eggs"
60 PRINT S$
70 INPUT S
80 PRINT M$
90 INPUT M
100 PRINT L$
110 INPUT L
120 T=(3*S)+(3*M)+(3*L)
200 PRINT "The total cost is GBP";T**

When you **RUN** this program, you will find that instead of being presented with three
disembodied question marks for the **INPUT**, each question is labelled according to the
size of the eggs. From this the obvious conclusion can be drawn that we have here, in
outline, the beginnings of the **dialogue box**, which constitutes such a familiar feature of
commercial software. In the next Unit we will enhance it with graphics and colour.

To draw together the threads of text and numbers under the **PRINT **keyword, we will
reproduce a section of a supermarket till receipt. This is what language teachers call an
"authentic text" - i.e. a text drawn from real life, for the purpose of obtaining and giving
information, rather than a text that has been invented for the purpose of illustrating a
grammatical principle - although the latter does sometimes have its uses!

| BANANAS | 0.79 |

1.770 kg @ £ 1.08 /kg | ||

APPLES | 1.91 | |

0.640 kg @ £ 1.08 /kg | ||

GRANNY SMITHS | 0.69 | |

0.650 kg @ £ 0.36 /kg | ||

CARROTS | 0.23 | |

CUCUMBER | 0.59 |

**10 PRINTTAB(7) "BANANAS"**

We then need to add the price, separated from the text. There is no need to add spaces,
since **BBC BASIC** will print the figures flushed right. So type the following:

**10 PRINTTAB(7) "BANANAS"0.79**

To familiarise yourself with this you can print the remainder of the items from the receipt in this way. We have now completed the lesson material of Unit 1. Before going on, it needs plenty of practice in the form of assignments, where the routines studied here can be repeated and adapted and thereby learnt from memory.

Item: | Unit | Unit price |
---|---|---|

Turkey | kg | 2.89 |

Mince pies | 6 | 1.09 |

Christmas pudding | 454g | 1.99 |

Parsnips | kg | 1.12 |

Brussels sprouts | kg | 1.08 |

Sherry | 75cl | 4.99 |

Hock | 75cl | 2.29 |

Port | 75cl | 6.69 |

Let's assume a family of four on a modest income. You might want, say, a 5kg turkey,
four packs of mince pies, a pudding for Christmas and one for New Year, 1kg of parsnips,
500g of sprouts, two bottles of sherry, half a dozen bottles of hock and two bottles of
port. All the items in the list begin with a different letter, so you can name each numeric
variable by the first letter, e.g.**T=2.89**. Once the values are assigned, you can find the total
by adding together the numeric variable letters. To print out the bill on screen, you will
need to assign the name of each article as a string variable name, e.g. **T$= "Turkey"**

By chance, your college has just had a new central heating system installed, and the Principal has arranged with the Bursar to let the students use the surplus copper piping for project work. To save the situation you decide to make a sculpture out of 22 millimetre (internal diameter) copper piping, and to decant the cider into the sculpture to hide it.
Write a program to work out what length of piping you will need. (The formula for the area of a circle in **BASIC** is **PI*(R^2)**, where **R** is the radius. **BBC BASIC** automatically supplies the value of **PI**. You will naturally find the radius by halving the diameter of the cross-section of the piping.) In geometrical terms, the internal volume of the required piping will effectively be a cylinder, where the area of the cross-section is multiplied by the length. Since you know from the quantity of cider what the internal volume has to be, you can work out the overall length of piping you will need with the help of the formula.

## INTRODUCTION |
## UNIT 2 |