Prime Error or Mine?



Post: #14

When I run the following program, the emulator crashes and the real calc reboots. What's the problem?

EXPORT HAT()
BEGIN
LOCAL XP,XL;
XP:=4;
XL:=INT(v(XP));
END;

This is part of a larger program but I cut it down to the part that causes the error.
N.B. v is the square root sign.



Edited: 20 Oct 2013, 10:37 p.m.


Post: #15

Try XL:=INT(v XP); or XL:=INT(sqrt(XP));


Post: #16

Well, sqrt seems to have worked. I wonder why the square root symbol crashes the program!

Thanks for the workaround.

Tom L


Post: #17

The reason is that INT stands for integral, whereas I assume you meant integer part, which is IP.

Post: #18

The root cause of the crash had to do with a use of a local variable, inside a numerical command, inside a cas command, inside a numerical program. It was quite a difficult one to track down.

TW

Post: #19

Thanks to all! I got the program working and here it is:
(the v is the square root symbol)

EXPORT HAT()
BEGIN
LOCAL P,Q,XP,XR,YP,YR,ZP,ZF;
LOCAL XF,YF,ZF;
LOCAL ZI,ZT,ZZ,XL,XI,XT,XX,YY;
LOCAL X1,Y1;
Xmin:=0;Xmax:=320;
Ymin:=0;Ymax:=240;
RECT();
P:=160;
Q:=100;
XP:=144;
XR:=1.5*PI;
YP:=56;
YR:=1;
ZP:=64;
XF:=XR/XP;
YF:=YP/YR;
ZF:=XR/ZP;
FOR ZI FROM -Q TO Q-1 DO
IF ZI >= -ZP AND ZI <= ZP THEN
ZT:=ZI*XP/ZP;
ZZ:=ZI;
XL:=IP(.5+v(XP*XP-ZT*ZT));
FOR XI FROM -XL TO XL DO
XT:=v(XI*XI+ZT*ZT)*XF;
XX:=XI;
YY:=(SIN(XT)+.4*SIN(3*XT))*YF;
X1:=XX+ZZ+P;
Y1:=YY-ZZ+Q;
PIXON(X1,Y1,#FF0000h);
IF Y1 <> 0 THEN
LINE(X1,Y1-1,X1,0,#FFFFFFh)
END;
END;
END;
END;
WAIT;
END;

Edited: 25 Oct 2013, 8:19 a.m. after one or more responses were posted


Post: #20

Nice! Can I buy one like that?

TW

Post: #21

The code with NTHROOT ready to be copied to the program editor =)

EXPORT HAT()
BEGIN
LOCAL P,Q,XP,XR,YP,YR,ZP,ZF;
LOCAL XF,YF,ZF;
LOCAL ZI,ZT,ZZ,XL,XI,XT,XX,YY;
LOCAL X1,Y1;
Xmin:=0;Xmax:=320;
Ymin:=0;Ymax:=240;
RECT();
P:=160;
Q:=100;
XP:=144;
XR:=1.5*PI;
YP:=56;
YR:=1;
ZP:=64;
XF:=XR/XP;
YF:=YP/YR;
ZF:=XR/ZP;
FOR ZI FROM -Q TO Q-1 DO
IF ZI >= -ZP AND ZI <= ZP
THEN
ZT:=ZI*XP/ZP;
ZZ:=ZI;
XL:=IP(0.5+2 NTHROOT (XP*XP-ZT*ZT));
FOR XI FROM -XL TO XL DO
XT:=2 NTHROOT (XI*XI+ZT*ZT)*XF;
XX:=XI;
YY:=(SIN(XT)+0.4*SIN(3*XT))*YF;
X1:=XX+ZZ+P;
Y1:=YY-ZZ+Q;
PIXON(X1,Y1,#FF0000h);
IF Y1 <> 0
THEN
LINE(X1,Y1-1,X1,0,#FFFFFFh)
END;
END;
END;
END;
WAIT;
END;

for CAS MODE #FF0000h => RGB() =(

HAT():=
BEGIN
LOCAL P,Q,XP,XR,YP,YR,ZP,ZF;
LOCAL XF,YF,ZF;
LOCAL ZI,ZT,ZZ,XL,XI,XT,XX,YY;
LOCAL X1,Y1;
Xmin:=0;Xmax:=320;
Ymin:=0;Ymax:=240;
RECT();
P:=160;
Q:=100;
XP:=144;
XR:=1.5*PI;
YP:=56;
YR:=1;
ZP:=64;
XF:=XR/XP;
YF:=YP/YR;
ZF:=XR/ZP;
FOR ZI FROM -Q TO Q-1 DO
IF ZI >= -ZP AND ZI <= ZP
THEN
ZT:=ZI*XP/ZP;
ZZ:=ZI;
XL:=IP(0.5+2 NTHROOT (XP*XP-ZT*ZT));
FOR XI FROM -XL TO XL DO
XT:=2 NTHROOT (XI*XI+ZT*ZT)*XF;
XX:=XI;
YY:=(SIN(XT)+0.4*SIN(3*XT))*YF;
X1:=XX+ZZ+P;
Y1:=YY-ZZ+Q;
PIXON(X1,Y1,RGB(0,0,0) );
IF Y1 <> 0
THEN
LINE(X1,Y1-1,X1,0,RGB(255,255,255))
END;
END;
END;
END;
WAIT;
END;

Edited: 21 Oct 2013, 1:53 p.m.


Post: #22

Wow! When you indent, you REALLY indent!

Thanks for the alternative to hard to print characters.

Tom L


Post: #23

>> Wow! When you indent, you REALLY indent!

Use the TAB character, in this forum is decoded with many spaces =(


Post: #24

What is the TAB character ?

Edited: 21 Oct 2013, 4:20 p.m.


Post: #25

copy the following string in the entry line of the emulator

ASC("	")


ASC("	"); => {9}

Edited: 21 Oct 2013, 5:27 p.m.


Post: #26

Quote:
copy the following string in the entry line of the emulator

ASC("	")

ASC("	"); => {9}


OK, that works. So how do we use the tab character to enter programs?

Tom L

Edited: 22 Oct 2013, 10:37 a.m.


Forum Jump: