Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : Array, number of elements
Author | Message | ||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 91 |
I'm DIMing a float array with DIM float xy(10) OPTION BASE is not defined and thus is 0. I can access xy(0) to xy(10) which gives 11 elements. The manual says for DIM arrays the the NUMBER of elements is specified which would give xy(0) to xy(9). Why can i access the element xy(10) ....??? From my POV i should get an index out of bounds error. Btw, base and number of elements checked with BOUND ... no problems to see there. Where did my thoughts thake the wrong exit? Environment is WebMite, MMBasic 6.00.00RC8 Regards Gerald 73 de OE1HGA, Gerald |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6776 |
The array bounds are only checked at runtime. The DIM statement index is for the last element, not the number of elements including the zeroeth one. :) If you use OPTION BASE 1 then you get an error if you attempt to reference x(0), but not if you use OPTION BASE 0. AFAIK this is pretty normal behaviour in BASIC. . Edited 2024-10-17 23:38 by Mixtel90 Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 91 |
So this is an error in the manual as it says this is the number of elements not the index of the elements. 73 de OE1HGA, Gerald |
||||
Geoffg Guru Joined: 06/06/2011 Location: AustraliaPosts: 3194 |
Small point but OK, I will fix it. Geoff Geoff Graham - http://geoffg.net |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6776 |
I don't think I've ever used OPTION BASE 1. I just check the boundaries if necessary. :) After all, if it goes out of bounds you're going to have to trap the error anyway or you'll leave the user with a crashed program, so why bother? Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
Volhout Guru Joined: 05/03/2018 Location: NetherlandsPosts: 4222 |
Mick, Sometimes option base 1 is handy. In the thermal camera there is a lot of vendor provided arrays an indexes in the documentation. These where in base 1 (in example the left most pixel in the array is (1,1) and not (0,0). Rather than continuously changing the pointer when transferring data from vendor array to arrays that can be processed with MATH statements (and getting confused), I used option base 1. Also option base 1 in (this is standard in basic) strings. There is no left$(a$,0). The first character has index 1. Volhout PicomiteVGA PETSCII ROBOTS |
||||
javavi Senior Member Joined: 01/10/2023 Location: UkrainePosts: 206 |
In the LUA programming language, all array indices start with 1 only. |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6776 |
I knew there was something putting me off LUA..... :) If I want to use an array from 1 then I just ignore the zero element. I don't bother with OPTION BASE. I often DIM arrays slightly too big anyway. Sloppy, I know, but I'm rarely that stuck for RAM. :) Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 91 |
Thank you Geoff and sorry guys, i didn't want to start a discussion about base 0 or 1 ... ;-). I'm just hunting a bug and I wanted to make sure I understand at least the language elements i'm using. 73 de OE1HGA, Gerald |
||||
toml_12953 Guru Joined: 13/02/2015 Location: United StatesPosts: 339 |
I believe he's saying that, when using OPTION BASE 0, you can still access array(10) which should flag an error. OPTION BASE 1 does work properly. |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9104 |
No it shouldn't This correct OPTION BASE 0 (default) creates an array from 0 to n where n is the dimension requested e.g. dim a(10) has elements 0-10. This is completely standard with most Basics and has been the way MMBasic works since its inception |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2118 |
dim sprite1(wh,bl,bl,bl,bl,bk,bk,bk,bk,bk,bk,bl,bl,bl,bl,wh, bk,bl,re,re,re,bl,bl,bk,bk,bl,bl,re,re,re,bl,bk, bk,bk,bk,bl,re,wh,bl,bk,bk,bl,wh,re,bl,bk,bk,bk, bk,bk,bk,bl,re,wh,bl,bk,bk,bl,wh,re,bl,bk,bk,bk, bk,bk,bk,bk,bl,wh,bl,bk,bk,bl,wh,bl,bk,bk,bk,bk, bk,bk,bk,bk,bk,bl,bl,bk,bk,bl,bl,bk,bk,bk,bk,bk, bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk, bk,bk,bk,bk,ye,ye,ye,bk,bk,ye,ye,ye,bk,bk,bk,bk, bk,bk,bk,ye,bk,bk,bk,bk,bk,bk,bk,bk,ye,bk,bk,bk, bk,ye,ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye,ye,bk, bk,ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye,bk, ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bl,ye, ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye, ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye, bk,ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye,bk, bk,bk,ye,bk,bk,bk,bk,bk,bk,bk,bk,bk,bk,ye,bk,bk) but get Error : Expected closing bracket using mmedit ?? posted on another thread. regards, stan |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9104 |
Of course you do. MMbasic has never supported multi-line statements. You were shown how to do it with DATA statements |
||||
Print this page |