▼
Posts: 22
Threads: 5
Joined: Oct 2010
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.
▼
Posts: 1,665
Threads: 142
Joined: Jan 2009
Try XL:=INT(v XP); or XL:=INT(sqrt(XP));
▼
Posts: 22
Threads: 5
Joined: Oct 2010
Well, sqrt seems to have worked. I wonder why the square root symbol crashes the program!
Thanks for the workaround.
Tom L
▼
Posts: 1,665
Threads: 142
Joined: Jan 2009
The reason is that INT stands for integral, whereas I assume you meant integer part, which is IP.
Posts: 1,278
Threads: 44
Joined: Jul 2007
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
Posts: 22
Threads: 5
Joined: Oct 2010
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
▼
Posts: 1,278
Threads: 44
Joined: Jul 2007
Nice! Can I buy one like that?
TW
Posts: 213
Threads: 60
Joined: Mar 2013
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.
▼
Posts: 22
Threads: 5
Joined: Oct 2010
Wow! When you indent, you REALLY indent!
Thanks for the alternative to hard to print characters.
Tom L
▼
Posts: 213
Threads: 60
Joined: Mar 2013
>> Wow! When you indent, you REALLY indent!
Use the TAB character, in this forum is decoded with many spaces =(
▼
Posts: 1,665
Threads: 142
Joined: Jan 2009
What is the TAB character ?
Edited: 21 Oct 2013, 4:20 p.m.
▼
Posts: 213
Threads: 60
Joined: Mar 2013
copy the following string in the entry line of the emulator
ASC(" ")
ASC(" "); => {9}
Edited: 21 Oct 2013, 5:27 p.m.
▼
Posts: 22
Threads: 5
Joined: Oct 2010
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.
|