BBC BASIC for Windows
« REPEAT loops indentation »

Welcome Guest. Please Login or Register.
Apr 5th, 2018, 11:47pm



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

If you require a dump of the post on your message board, please come to the support board and request it.


Thank you Conforums members.

BBC BASIC for Windows Resources
Online BBC BASIC for Windows documentation
BBC BASIC for Windows Beginners' Tutorial
BBC BASIC Home Page
BBC BASIC on Rosetta Code
BBC BASIC discussion group
BBC BASIC for Windows Programmers' Reference

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: REPEAT loops indentation  (Read 894 times)
chrispc
New Member
Image


member is offline

Avatar




PM


Posts: 19
xx REPEAT loops indentation
« Thread started on: Nov 1st, 2014, 2:15pm »

This is perhaps an unimportant matter, but it bothers me; because one way I check my programs is to see if my REPEAT loops are completed properly, and that check is made easier when the loops are indented. So can you please explain this apparent inconsistency:

When I typed a procedure definition into a large program it appeared on the screen as follows:

7030 DEF PROC_PrintUpdatedGrid
7040 PRINT"Now we shall look at the updated grid, after PROC_Eliminations."
7050 X=0
7060 REPEAT
7070 X=X+1
7080 Y=0
7090 REPEAT
7100 Y=Y+1
7110 Z=0
7120 REPEAT
7130 Z=Z+1
7140
7150 PRINT"N(";X;",";Y;",";Z;") = ";N(X,Y,Z)
7160
7170 UNTIL Z=9
7180 UNTIL Y=9
7190 UNTIL X=9
7200
7210 PRINT"END OF DEF PROC_PrintUpdatedGrid"
7220 ENDPROC

But when I copied that procedure definition and pasted it into a new so-far-unused program, it looked like this:

10 DIM N(9,9,9)
20 PROC_PrintUpdatedGrid
30 END
40
50 DEF PROC_PrintUpdatedGrid
60 PRINT"Now we shall look at the updated grid, after PROC_Eliminations."
70
80 X=0
90 REPEAT
100 X=X+1
110 Y=0
120 REPEAT
130 Y=Y+1
140 Z=0
150 REPEAT
160 Z=Z+1
170 N(X,Y,Z)=Z
180 PRINT"N(";X;",";Y;",";Z;") = ";N(X,Y,Z)
190
200 UNTIL Z=9
210 G$=GET$
220 PRINT""
230 UNTIL Y=9
240 UNTIL X=9
250
260 PRINT"END OF DEF PROC_PrintUpdatedGrid"
270 ENDPROC
Why in the first version are the two outside loops not indented (as I would have preferred them to be), whereas when I have copied them into a new program all loops are indented?
Note: in the first example, taken from a larger program, the values of each number N(X,Y,Z) have been calculated before the program reached that procedure. Is that relevant?
I have not run the large program since adding that new procedure because it would take too long; that it why I copied the procedure into the (second) test program to check it would be ok. I am assuming that the procedure would run properly at the end of my large, earlier, program.

Thanks,

Chrispc

P.S. After writing the above, and then checking the version your website shows, I see that it left-justified my text, so that the indentations were not apparent as they were in my WORD version. I hope it still makes sense to you.
« Last Edit: Nov 1st, 2014, 2:21pm by chrispc » User IP Logged

rtr2
Guest
xx Re: REPEAT loops indentation
« Reply #1 on: Nov 1st, 2014, 4:05pm »

on Nov 1st, 2014, 2:15pm, chrispc wrote:
Why in the first version are the two outside loops not indented

If the indentation isn't correct when you list the routine in the context of the entire program, then evidently there is a fault earlier on in the code. Try running the Cross Reference utility (slot 5 in the menu, usually) to see if that reports anything untoward.

You prefixed your remarks by saying that you use the indentation to check the correctness of your code, and indeed the faulty indentation is demonstrating that something in your code isn't correct!

Richard.

Quote:
P.S. After writing the above, and then checking the version your website shows, I see that it left-justified my text,

That's because you omitted the code tags. With them, whitespace is preserved and it appears as follows:

Code:
 7030 DEF PROC_PrintUpdatedGrid
 7040 PRINT"Now we shall look at the updated grid, after PROC_Eliminations."
 7050 X=0
 7060 REPEAT
 7070   X=X+1
 7080   Y=0
 7090   REPEAT
 7100     Y=Y+1
 7110     Z=0
 7120     REPEAT
 7130       Z=Z+1
 7140       
 7150       PRINT"N(";X;",";Y;",";Z;") = ";N(X,Y,Z)
 7160       
 7170     UNTIL Z=9
 7180   UNTIL Y=9
 7190 UNTIL X=9 

« Last Edit: Nov 1st, 2014, 4:30pm by rtr2 » User IP Logged

rtr2
Guest
xx Re: REPEAT loops indentation
« Reply #2 on: Nov 4th, 2014, 10:17pm »

on Nov 1st, 2014, 4:05pm, g4bau wrote:
evidently there is a fault earlier on in the code. Try running the Cross Reference utility

Did that enable you to locate the fault? A possible cause of incorrect indentation is an 'unexpected' (surplus to requirements) ENDIF or ENDWHILE statement. The Cross Reference utility will report that, if present.

Richard.
User IP Logged

chrispc
New Member
Image


member is offline

Avatar




PM


Posts: 19
xx Re: REPEAT loops indentation
« Reply #3 on: Nov 5th, 2014, 09:18am »

Thanks for your 2nd thought on the indentation. I looked at the Cross Reference and at first thought how great it was, then noticed that it told me that I had an unexpected ENDIF at row 562. Did that mean LINE 562? Because I haven't got one; I go from 560 to 570. What now?
chrispc
User IP Logged

rtr2
Guest
xx Re: REPEAT loops indentation
« Reply #4 on: Nov 5th, 2014, 10:40am »

on Nov 5th, 2014, 09:18am, chrispc wrote:
then noticed that it told me that I had an unexpected ENDIF at row 562. Did that mean LINE 562?

No, it meant what it said - row 562. The column and row numbers are displayed in the status bar:

http://www.bbcbasic.co.uk/bbcwin/manual/bbcwin1.html#cursor

'Modern' BASIC programs don't use line numbers, so they are not a useful way for the utility to report the location of an error.

Quote:
What now?

Be more trusting! The report of an 'unexpected ENDIF' in row 562 is almost certainly correct and would explain, at least in part, the misbehaving indentation.

Richard.
User IP Logged

Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »

| |

This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls