HP 39gii Tutorial: REPEAT and WHILE « Next Oldest | Next Newest »

 ▼ Eddie W. Shore Posting Freak Posts: 764 Threads: 118 Joined: Aug 2007 03-18-2013, 10:52 PM ▼ Gilles Carpentier Senior Member Posts: 468 Threads: 17 Joined: May 2011 03-19-2013, 07:20 AM Hi Eddie here is an improved version of your SQFACTOR program : ```EXPORT SQFACTOR(N) BEGIN LOCAL C,K,S; C:=1; K:=FLOOR(VN); // V for square root symbol WHILE K > 1 DO WHILE FRAC(N/K²) == 0 DO N:=N/K²; C:=C*K; END; K:=K-1; END; S:=""; IF C<>1 THEN S:=string(C);END; IF N<>1 THEN S:=S+"V"+string(N); END; RETURN S; END; ``` So SQFACTOR(400) returns "20" and not "4 √ 25" Edited: 19 Mar 2013, 7:26 a.m. ▼ Eddie W. Shore Posting Freak Posts: 764 Threads: 118 Joined: Aug 2007 03-20-2013, 11:25 AM Thanks Giles! I am going to test this out ▼ Gilles Carpentier Senior Member Posts: 468 Threads: 17 Joined: May 2011 03-20-2013, 03:27 PM Here is an interesting program by C.RET posted on silicium.org ```EXPORT RAC(X) BEGIN LOCAL F:=SIGN(X), R:=ABS(X); LOCAL I:=1,Txt:="V("+X+")="; REPEAT IF R MOD I*I THEN I:=I-1; ELSE F:=F*I; R:=R/I/I; I:=FLOOR(VR); END; UNTIL I<2; IF (ABS(F)<>1) OR (R=F) THEN Txt:=Txt+ABS(F) END; IF F<0 THEN Txt:=Txt+" i " END; IF R<>1 THEN Txt:=Txt+"V"+R END; RETURN Txt; END; ``` Change V by square root symbol it works also with negative numbers : ▼ Eddie W. Shore Posting Freak Posts: 764 Threads: 118 Joined: Aug 2007 03-20-2013, 04:10 PM I did not know we could initialize and localize variables in one step. This will make things more efficient. Gilles, is it OK if I post your program in my next blog entry? Credit will be given. Eddie ▼ Gilles Carpentier Senior Member Posts: 468 Threads: 17 Joined: May 2011 03-20-2013, 04:26 PM Hi Eddie, this program is not by me, but by C.RET. C.Ret Senior Member Posts: 260 Threads: 0 Joined: Oct 2008 03-20-2013, 06:35 PM Eddie you are welcome. No problem at all, I consider this code has already fallen into the public domain since I posted it this public forum. It was the result of a kid of brain storm threat. Several people were involved in the discussion. Gilles is one of them. Please feel free to publish it, as soon as you are kind enough to indicate references of the peoples and the Silicium.org forum. www.silicium.org/forum [hp39gII] Simplificateur de racines carrées ([hp39gii] A Square Roots Simplicator) The HP-39gii is really an amazing system. Every day, we discover new capabilities; the localization and initialization in one shot is one of its numerous features. The Silicium.org forum is really active, we already analyze this first version of the code and turn it into two new versions : ```EXPORT RAC(X) BEGIN LOCAL F:=SIGN(X), R:=ABS(X); LOCAL I:=1,Txt:="¡Ì("+X+")="; REPEAT IF R MOD I*I THEN I:=prevprime(I); ELSE F:=F*I; R:=R/I/I; I:=FLOOR(¡ÌR); END; UNTIL Q<2; IF (ABS(F)<>1) OR (R=F) THEN Txt:=Txt+ABS(F) END; IF F<0 THEN Txt:=Txt+" i " END; IF R<>1 THEN Txt:=Txt+" \V"+R END; RETURN Txt; END; ``` The only change is prevprime(I) replacing I:=I-1; expecting speed-up with large numbers. The last version, is quite more different, it is using the built-in function ifactors that returns the list of prime factors (and multiplicity). This last version has the shortest/fastest look-up loop ! ```EXPORT RAC( X ) BEGIN LOCAL F:=SIGN(X),R:=ABS(X); LOCAL p,I,T:="¡Ì("+X+")="; LOCAL LF:=ifactors(R); FOR p FROM 2 TO SIZE(LF) STEP 2 DO I:=LF(p-1)^FLOOR(LF(p)/2); F:=F*I; R:=R/I/I; END; IF (ABS(F)<>1) OR (R=F) THEN T:=T+ABS(F) END; IF F<0 THEN T:=T+" i " END; IF R<>1 THEN T:=T+" \V"+R END; RETURN T; END; ``` Edited: 20 Mar 2013, 6:40 p.m.

 Possibly Related Threads... Thread Author Replies Views Last Post HP Prime Tutorial #6 and #7: Drawing Eddie W. Shore 2 1,106 12-10-2013, 08:16 AM Last Post: Eddie W. Shore Gathering USB dumps for Connectivity Kit <-> 39gII communication... debrouxl 2 936 12-01-2013, 12:59 PM Last Post: Marcus von Cube, Germany New firmware for HP 39gII Mic 6 1,572 11-26-2013, 06:23 PM Last Post: DeboT HP Prime Tutorial #4 is up (CASE/CHOOSE/INPUT) Eddie W. Shore 1 762 11-15-2013, 07:32 AM Last Post: Davi Ribeiro de Oliveira HP Prime Programming Tutorial #3: WHILE, INPUT, KILL, REPEAT, GETKEY Eddie W. Shore 5 1,378 11-07-2013, 12:25 AM Last Post: Han HP Prime Programming Tutorial #1: LOCAL, RETURN Eddie W. Shore 6 1,755 10-26-2013, 08:42 PM Last Post: Miguel Toro HP Prime Programming Tutorial #2: MSGBOX, IF-THEN-ELSE, PRINT, FOR Eddie W. Shore 0 747 10-26-2013, 03:51 PM Last Post: Eddie W. Shore HP Prime vs. 39gII Connectivity Kit Marcus von Cube, Germany 3 1,004 10-09-2013, 05:44 PM Last Post: Marcus von Cube, Germany [HP 39Gii] - Bug report Jean-Michel 1 886 08-28-2013, 10:53 AM Last Post: Tim Wessman hp 39gii lcd clear question giancarlo 7 1,668 08-18-2013, 07:30 AM Last Post: Mic

Forum Jump: