ul$() - versie5.0

Geef hier je beste Liberty BASIC tips door. (Hier geen hulp vragen)

Moderators: anthonio, Abcott

ul$() - versie5.0

Berichtdoor glpape » vr jun 17, 2011 8:01 pm

Versie 5 alweer, steeds is er wel iets maar ik heb nu het gevoel dat het echt in order is. We zullen zien.

Probleem met v4.1 was dat ik de int() functie gebruikte om het deel voor de decimale punt te krijgen van het te formatteren getal. Nu is int() de perfecte manier om problemen te krijgen met berekeningen met floating point getallen erin, en dat gebeurde dus ook. Hier een korte code met voorbeelden van wat ik bedoel :

Code: Selecteer alles
print
print 25^0.5                  ' vierkantswortel van 25
print log(1000)/log(10)       ' logarithme van 1000 met basis 10
print (1.13 mod 1)*100

print
print int( 25^0.5 )
print int (log(1000)/log(10) )
print int( (1.13 mod 1)*100 )
End


In v5.0 gebruik ik string functies om het getal te manipuleren. In de code staat ook wat commentaar, alles in het Engels deze keer want Roberto rapporteerde een probleem op zijn computer met v4.1 en ik zoek nu een breder publiek om me te vertellen of het goed werkt, dus ik zet het ook op het Community Forum.

Code: Selecteer alles
calldll #user32, "GetActiveWindow", hmain as ulong
mainwin 75 30

for n = 1 to 3                                         ' 3 rnd numbers [num(n)] of max 10 digits
lennum = int(rnd(0)*10)+1                              ' lennum = length new number
   for m = 1 to lennum
   if m = 1 then num$(n) = str$(int(rnd(0)*9+1)) _     ' 1st number not 0
      else num$(n) = num$(n) + str$(int(rnd(0)*10))
   next m
k = int(rnd(0)+0.5)  :  if k = 0 then k=-1
num(n) = val(num$(n))  :  num(n) = num(n) * k                   ' some numbers negative
if len(str$(num(n))) > lenmax then lenmax = len(str$(num(n)))   ' lenmax = length longest number
next n

print cr$(5), "Three Random Numbers  :"
print cr$(3)
for n = 1 to 3
print , "And the number is ... : "; ul$(lenmax, 0, num(n))
next n

print cr$(3)
for n = 1 to 3
print , "And the number is ... : "; ul$(0-lenmax, 0, num(n))
next n

input ""; cr$(5); " Press  <Enter>  to Close : "; aa
if hmain then calldll #user32, "PostMessageA", hmain as ulong, _WM_CLOSE as long, _
                               0 as long, 0 as long, rtn as void  :  End


Function ul$(apn, b, nmbr) ' v5.0       ' positions before the dot; behind it; number to display
                                        ' inserts comma's in integer part if apn is Negative
a = abs(apn)                            ' apn: aposneg
ntc$ = chr$(10); "At least One Integer Position Required"; space$(5); _
       chr$(10); chr$(10); "You can print < 0.25 >, not < .25 >"; chr$(10)
if a = 0 then notice ntc$ : exit function
      for n = 1 to a
      a$ = a$; "#"
      next n
   if b<>0 then
      for n = 1 to b
      b$ = b$; "#"
      next n
   dot$ = "."
   end if
ul$ = using(a$; dot$; b$, nmbr)                       ' using() applied to nmbr
if (apn>0) then exit function
if (left$(ul$,1)="%") then perc$ = "%"  :  j = j+1    ' starting COMMA FORMATTING
if (nmbr<0) then sign$ = "-"  :  j = j+1              ' j = number of prefixes
   while (asc(mid$(trim$(ul$),k+j+1,1)) >47) and (asc(mid$(trim$(ul$),k+j+1,1)) <58)
   k = k+1                                            ' k = no of numerals in integer part of nmbr
   wend
anmbr$ = mid$(trim$(ul$), j+1, k)       ' the numerals in the integer part of nmbr
bnmbr$ = right$(ul$, b)                               ' decimal part of nmbr
ldspace = a - len(sign$) - len(anmbr$)                ' no leading spaces from using() function
seprtot = int((a-1)/3)                                ' total no separators
seprcma = int((len(anmbr$)-1)/3)                      ' no of separators that is commas
seprldspace = seprtot - seprcma                       ' no of separators that is leading spaces
i = len(anmbr$) mod 3  :  if i = 0 then i = 3         ' i = number of positions left of next comma
   if a > 3 then
      for n = 1 to seprcma
      anmbr$ = left$(anmbr$, i); ","; mid$(anmbr$, i+1)
      i = i+4
      next n
   end if
ul$ = perc$; space$(ldspace+seprldspace); sign$; anmbr$; dot$; bnmbr$
End Function

Function cr$(k)                         ' Gives k carriage returns [chr$(13)]
   for i = 1 to k
   cr$ = cr$; chr$(13)
   next i
End Function



En : If Bugs then "Tell Me" .

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Re: ul$() - versie5.0

Berichtdoor ForNext » ma jul 25, 2011 11:32 am

George,

Het programma werkt prima.
Bijgaand een screendumpje van de 5e ronde.

Ciao,
Roberto
Bijlagen
scr_6.jpg
scr_6.jpg (53.47 KiB) 2001 keer bekeken
Cursist LB Amstelveen
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen


Keer terug naar Tips en informatie

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron