Announcement

Collapse
No announcement yet.

Need help on Data Type and long line formula

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
    Michael Mattias
    Member

  • Michael Mattias
    replied
    I am still thining about the use of LEN.

    Yes, it handles more than "length of a dynamic string"... specifically PB documents it to support scalar variables, types and unions as an equivalent to SIZEOF(), and ASCIIZ variables as "Number of bytes of data up to but not including the first $NUL" (that's my wording, which is better than that in the help file).

    But if I recall correctly, LEN() had to do all that, because SIZEOF() was not added to the compiler line until sometime later.

    That is, the introduction of the SIZEOF() function made certain capabilities of LEN() redundant, but since no publisher likes to 'deprecate' any feature, PowerBASIC didn't.

    Well, maybe others will join me in considering it 'good programming practice" to use LEN() only to get the length of a dynamic string, and SIZEOF() to get the size of any variable.

    I suppose it would be OK to use LEN() against an ASCIIZ string variable, although personally I'd suggest the lstrlen() WinAPI function.

    MCM

    Leave a comment:


  • Can Le
    replied
    Thank Michael Mattias for your good help on LEN(FORMAT$(Numbervar))

    Can Le

    Leave a comment:

  • Michael Mattias
    Member

  • Michael Mattias
    replied
    LEN() is for use with dynamic strings, not scalar variables.

    Frankly I don't know why LEN() is even allowed with non-string variables; IMNSHO it should be a compile-time error to do so. SIZEOF() is the correct function to use for scalar variables.

    However, the SIZEOF() a numeric variable is unrelated to its magnitude.

    To count decimal digits of the value of a numeric variable, you can use LEN(FORMAT$(Numbervar))

    Leave a comment:


  • Can Le
    replied
    Thank you all for your helps,

    I tried your lines and it works, my errors were Data Type.

    Now I have another problem: I counted a number for numbers of digits, I was working OK in PBCC 4.0 but when I changed data type, I can't count a number any more

    Example

    Local Num1, Num2 AS EXT
    local LenNum1, LenNum2 as BYTE

    Num1=123.25
    Num2=1.75

    LenNum1=LEN(Num1)
    LenNum2=LEN(Num2)

    PRINT LenNum1, LenNum2

    My new problem are: All the answers equal =10, I checked SIZEOF(Num1)=10!

    10 10

    It should be 6 and 4. I can't count the total number of digits or characters of a number or a string !

    Please help

    Can Le

    Leave a comment:

  • Nick Luick
    Member

  • Nick Luick
    replied
    Another good reason to break up the formula in parts is that many times partial values change less often or remain constant. These intermediate values can be placed in outer for/next or do/loops.

    Leave a comment:

  • Michael Mattias
    Member

  • Michael Mattias
    replied
    I just had a thought on this. Well, two thoughts...
    One formula should read as:
    b12= (c1+d2 +................................................. .................................................. ..............................a4)/(a1+c1 +................................................. .................................................. ................................a3+a4)
    Thought One: instead of a formula that long, is it possible to use arrays instead of all those discrete variables? Possibly using the MAT() functions?

    Thought Two: you are in this deep anyway; why not use some temp variables so you can hold all the source code in field of view?

    Eg instead of a line so long, use something like

    Code:
     Temp1 = A1 + B2 + ...........    
     Temp2 = C1 + C2 + ....
     ...
      Answer = Temp1 + Temp2 [ +Tempn]...
    With the use of the line continuation character that's probably overkill, but it's a thought, especially if "TempN" is meaningful enough to be a 'trace or debugging value.'

    MCM

    Leave a comment:


  • Can Le
    replied
    Michael Mattias,

    Thank you for helps.

    Can Le

    Leave a comment:

  • Michael Mattias
    Member

  • Michael Mattias
    replied
    1. Do I have the continue line for formmula entry such as _ for continue as in print ?
    Sure. You could have tried it and it would have worked for you.

    2. Do I have to change to another new data type for longer than 12 digits, so what is the Data Type should be used ??
    Yes you do, and for 12 significant digits you may pick any legal type which supports 12 or more. In help file, hit the index entry under 'Data Types'

    MCM

    Leave a comment:


  • Can Le
    started a topic Need help on Data Type and long line formula

    Need help on Data Type and long line formula

    Hi
    I need help on data type for a long line formula

    I had my program worked OK on PB DOS 3.5, but I have wrong number when I changed to PBCC 4.0.
    I have problem of data type, because I have a long line formula, so I have to break it into 2 lines.

    When I run in PBCC 4.0 I had error in data type sine new value=-32768, in PBDOS the real value was about 20.
    My break line the old variable N is now treated as a NEW DEFINITION

    I have my program now in PBCC 4.0 susch as

    FUNCTION PBMAIN AS LONG

    LOCAL a1, a2, b1, b2,.....AS INTEGER
    LOCAL c1, c2, d1, d2,....., N, b12 AS LONG

    ''''' N was not defined in PBDOS 3.5, and N is treated as (a NEW DEFINITION) AS INTEGER in PBCC 4.0

    ' examle of my 1 formula in 2 lines

    a1=10: c1=22: d2=30.......

    N = a1+c1+......................................................................................................a3+a4
    b12= (c1+d2+..................................................................................................a4)/N

    print b12

    END FUNCTION


    ====================
    I have now number N exceed limit, I checked new number in PBCC 4.0 with N = -32768.
    So my new result is a wrong number for b12! which is b12 = -2123456789 or so

    One formula should read as:
    b12= (c1+d2 +.................................................................................................................................a4)/(a1+c1 +...................................................................................................................................a3+a4)


    My questions are:

    1. Do I have the continue line for formmula entry such as _ for continue as in print ?
    2. Do I have to change to another new data type for longer than 12 digits, so what is the Data Type should be used ??

    Thank you for your help

    Can Le
    Last edited by Can Le; 14 Jul 2008, 06:20 PM.
Working...
X