The program is relatively simple, leaving the student the opportunity to fine-tune and extend the details. The measurements are in metric, as there is no way of circumventing the quantities printed on tins of paint, etc. The calculation of quantities of paint is based on average examples in the author's own paint cupboard, but these vary between different types and brands, so the student will need to check out coverage as printed on paint tins, and adjust the program accordingly.
10 @%=&20209
20 REM Program for calculating quantities in decorating
30 CLS
40 INPUT' ' "Enter the length of the room in metres.",length
50 CLS
60 INPUT' ' "Enter the width of the room in metres ",width
70 CLS
80 area=length*width
90 PRINT' ' "The area of the floor, and likewise the ceiling, is
";area;"sq.metres."
100 INPUT' ' "Are you intending to replace the carpet Y/N ?",C$
110 IF C$="Y" OR C$="y"THEN PROCCARPET ELSE PROCPAINT
120 END
130 :
140 DEFPROCCARPET
150 CLS
160 INPUT' ' "Enter the cost per sq. metre of carpet ",carpsqm
170 CLS
180 carpcost=carpsqm*area
190 PRINT''"The total cost of carpet is GBP ";carpcost
200 PRINT' ' "Press any key to continue."
210 G=GET
220 CLS
230 PROCPAINT
240 ENDPROC
250 :
260 CLS
270 DEFPROCPAINT
280 PRINT' ' "The area of the ceiling is ";area;" sq.m."
290 CLS:INPUT''"Enter the coverage per litre of emulsion ",coverage_ltr
300 PRINT' ' "The ceiling will require ";area/coverage_ltr;" litres of
emulsion."
310 PRINT' "Press any key to continue."
320 G=GET
330 CLS
340 INPUT' ' "Enter the height of the room ",height
350 wallarea=2*(length*height)+2*(width*height)
360 CLS
370 PRINT' ' "The area of the walls, including doors and windows, is
";wallarea;"sq.m."
380 INPUT' ' "Are you going to emulsion the walls or paper them e/p
",wallfinish$
390 IF wallfinish$="E" OR wallfinish$="e" THEN PROCEMUL ELSE
PROCPAPER
400 ENDPROC
410 :
420 DEFPROCEMUL
430 CLS
440 INPUT' ' "Enter the coverage per litre of emulsion ",coverage_ltr
450 CLS
460 emulqty=wallarea/coverage_ltr
470 PRINT' ' "The emulsion required, disregarding windows and doors, is
";emulqty
480 ENDPROC
490:
520 DEFPROCGLOSS
530 INPUT "Measure the height of the door",doorheight
540 INPUT "Measure the width of the door ",doorwidth
550:
560 CLS
570 PRINT' ' "The area of the door is ";doorwidth;" sq.m."
580 CLS:INPUT' ' "Measure the height of the skirting board" ' "and enter
it as a decimal fraction of " ' "a metre ",skirt
590 board=skirt*((2*length)+(2*width))
600 CLS:PRINT''"The total area to be glossed is ",doorwidth+skirt
610 ENDPROC
615 :
620 DEFPROCPAPER
630 CLS
640 INPUT' ' "Enter the coverage per roll of paper " ' "that you have
chosen ",coverage
650 CLS
660 rolls=wallarea/coverage
670 PRINT ' ' "You will need ";rolls;" rolls of wallpaper."
680 ENDPROC
This program is appended as a text-file to this lesson, as DECOBAS.TXT, and you can *EXEC it straight into BBC BASIC.
At this point it would be useful to refresh your memory on the topic of graphics by revising Unit 2. We began our box 200 pixels up from the bottom of the screen and 200 pixels in. That's fine for a one-off diagram - but what happens if you want to write a program catering for rectangles of varying sizes, in which the length and the width of any given rectangle can be simply entered in a dialogue box, so as to construct the rectangle automatically?
To move the "graphics origin" to the centre, we use the BASIC command VDU 29, as follows:
VDU 29,640;512;
For technical reasons, don't forget the semi-colons, which send the number as a two-byte pair. Note also that in the program, the centre of the X co-ordinate is called XCEN and that of the Y co-ordinate YCEN. Herewith the program:
10 MODE 8
20 XCEN= 640
30 YCEN= 512
40 VDU29,XCEN;YCEN;
50 INPUT'"Enter width of box ",width
60 CLS
70 INPUT'"Enter height of box ",height
80 CLS
90 MOVE -width/2,-height/2
100 DRAW -width/2,height/2
110 DRAW width/2,height/2
120 DRAW width/2,-height/2
130 DRAW -width/2,-height/2
140 VDU 26
The program is appended to this lesson as DRAWBOX.TXT, and you can *EXEC it straight into BBC BASIC.
UNIT 7 |
UNIT 9 |