increasing/decreasing percentage - pie chart/ circular graph

David McFarlane mcfarla9 at msu.edu
Wed May 12 19:35:10 UTC 2010


Susan,

Good catch, I obviously missed that when I made & posted my revisions! 
Just for the record (and because I am such a pedant) here are all the 
code samples again with corrections made.  <editorial>AFAIK 
E-Basic/Visual Basic is the only language that has this silly rule about 
parentheses around Function arguments but not Sub arguments, which 
causes much pain for no useful purpose.  (For that matter, more rational 
languages such as C do away with the useless distinction between 
functions and subroutines altogether.)</editorial>


First, my base revision of Mich's code (also adding more parentheses 
around conditional clauses, and putting tests into numerical order just 
because I think it reads better) (and please pay attention to the 
underscore "_" that I use at the end of some lines, yet another silly 
affectation of Basic)...

If (mySlide.resp = 1) then  ' decrease pie slice
     If c.GetAttrib("CurrentPerc") > 1 then _
         c.SetAttrib "CurrentPerc", CInt(c.GetAttrib("CurrentPerc")) - 1
     c.SetAttrib "myPicture", _
         "pie" & cstr(c.GetAttrib("CurrentPerc")) & ".bmp"
     goto Label1
ElseIf (mySlide.resp = 2) then  ' increase pie slice
     If c.GetAttrib("CurrentPerc") < 100 then _
         c.SetAttrib "CurrentPerc", CInt(c.GetAttrib("CurrentPerc")) + 1
     c.SetAttrib "myPicture", _
         "pie" & cstr(c.GetAttrib("CurrentPerc")) & ".bmp"
     goto Label1
End If

Then, my revision using a variable instead of an attribute reference for
CurrentPerc (and this time giving a type to the variable)...

Dim  currentPerc as Integer  ' Single would allow fractional changes
If (mySlide.resp = 1) then  ' decrease pie slice
     If (currentPerc > 1) then currentPerc = currentPerc - 1
     c.SetAttrib "myPicture", "pie" & cstr(currentPerc) & ".bmp"
     goto Label1
ElseIf (mySlide.resp = 2) then  ' increase pie slice
     If (currentPerc < 100) then currentPerc = currentPerc + 1
     c.SetAttrib "myPicture", "pie" & cstr(currentPerc) & ".bmp"
     goto Label1
End If

Then my exercise using Select...Case...

Dim  currentPerc as Integer
Select Case mySlide.RESP
Case 1  ' decrease pie slice
     If (currentPerc > 1) then currentPerc = currentPerc - 1
     c.SetAttrib "myPicture", "pie" & cstr(currentPerc) & ".bmp"
     goto Label1
Case 2  ' increase pie slice
     If (currentPerc < 100) then currentPerc = currentPerc + 1
     c.SetAttrib "myPicture", "pie" & cstr(currentPerc) & ".bmp"
     goto Label1
End Select

And finally, Mich reduced it all to (with me now adding the Dim, and 
making a correction to his literal constant value)...

' Assumes .RESP = 1 for decrease, .RESP = 3 for increase, otherwise
' algorithm will fail.
Dim  currentPerc as Integer
If IsNumeric(mySlide.RESP) then
     If ((currentPerc + cint(mySlide.RESP) - 2) > 0) AND _
         ((currentPerc + cint(mySlide.RESP) - 2) < 100) then _
         currentPerc = currentPerc + cint(mySlide.RESP)- 2
     c.SetAttrib "myPicture", "pie" & cstr(currentPerc) & ".bmp"
     goto Label1
End if

Note that this all assumes that the Procedure runs until we are done 
with pie slices, otherwise we would have to work with a global variable.

-- David McFarlane, Professional Faultfinder


> Here's a thought: while c.GetAttrib takes parens, c.SetAttrib does
> not; I believe the general form should be:
> 
> c.SetAttrib "CurrentPerc", "12"
> 
> or whatever. That should fix that particular error. You may also have
> a problem because all attributes are strings, so conversion to integer
> may be necessary in some places.
> 
> HTH,
> Susan
> 
> On May 12, 12:37 pm, Matt Paffel <mpaf... at gmail.com> wrote:
>> Arrrgggh!!!
>>
>> So I've spent the last couple of days trying to place the various code
>> within the experiment. every time i try to do so i get the error
>> messages "SetAttrib is not a property of the object" when i put any of
>> the above script in or "CurrentPerc is not an assignable property of
>> the object" when i try to set CurrentPerc as an attribute, any
>> suggestions?

-- 
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.



More information about the Eprime mailing list