¡á¤³¤³¤«¤é¡á
option character kanji
input prompt "Á´³Ñ¤Ç£±Ê¸»úÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:":a$
let b=ord(a$)
let b$=str$(b)
let c$=bstr$(ord(a$),16)
let d$=right$(c$,2)&left$(c$,2)
print
print chr$(bval(c$,16))&"(JIS:"&c$&")"&" -> "&chr$(bval(d$,16))&"(JIS:"&d$&")"
end
¡á¤³¤³¤Þ¤Ç¡á
ͱ¡¢Îã³°¤¬½Ð¤ëʸ»úÈÖÃϤò°ìÍ÷¤¹¤ë¤â¤Î½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£
¡á¤³¤³¤«¤é¡á
rem -- Á´³Ñʸ»ú¤Î»ÏÅÀ:8481 (2121) / ½ªÃ¼:38700 (972C) --
rem -- ·ë²Ì½ÐÎϤϲèÌÌɽ¼¨¤è¤ê¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤¿Êý¤¬Áᤤ¤«¤â --
option arithmetic decimal
option character kanji
do
input prompt "¤É¤³¤«¤é¸«¤ë?(Ⱦ³Ñ»ÏÅÀ=1,Á´³Ñ»ÏÅÀ=2)":start
if start=1 or start=2 then
exit do
elseif start=0 then
stop
else
end if
loop
select case start
case is =2
let start=8481
case else
end select
for count=start to 38700 step 1
let hcount$=bstr$(count,16)
let strcount$=str$(count)
when exception in
print chr$(39)+chr$(count)+chr$(39)+" chr$("+strcount$+") <-> JIS ["+hcount$+"]"
use
print chr$(7)+"Îã³°"+str$(extype)+chr$(7)+" chr$("+strcount$+") <-> JIS ["+hcount$+"]"
end when
next count
end
¡á¤³¤³¤Þ¤Ç¡á
Windows XP (Windows2000) ¤Ïʸ»ú¥³¡¼¥É¤¬¥æ¥Ë¥³¡¼¥É¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥·¥Õ¥ÈJIS¤Îʸ»ú¤Ï¥æ¥Ë¥³¡¼¥É¤ËÊÑ´¹¤µ¤ì¤ÆÉ½¼¨¤µ¤ì¤Þ¤¹¡£
¥·¥Õ¥ÈJIS¤ÈJIS¤ÎÂбþ¤Ï¡¤°ì±þ¡¤°ìÂаì¤È¤ß¤Ê¤»¤Þ¤¹¤¬¡¤
¥æ¥Ë¥³¡¼¥É¤ÈJIS¡Ê¤¢¤ë¤¤¤Ï¥·¥Õ¥ÈJIS¡Ë¤È¤ÎÂбþ¤Ï°ìÂаì¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¥·¥Õ¥ÈJIS¢ª¥æ¥Ë¥³¡¼¥É¢ª¥·¥Õ¥ÈJIS¤ÈÊÑ´¹¤¹¤ë¤È¸µ¤ËÌá¤é¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
½½¿ÊBASIC¤Î¾ì¹ç¡¤¥Õ¥¡¥¤¥ëÆþ½ÐÎϤϥ·¥Õ¥ÈJIS¤Ê¤Î¤Ç¡¤
²èÌ̤Ëɽ¼¨¤·¤¿Ê¸»ú¤ò¥¯¥ê¥Ã¥×¥Ü¡¼¥É·Ðͳ¤Ç¼è¤ê½Ð¤¹¤Î¤Ç¤Ê¤¯¡¤
¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤¿Ê¸»ú¤òÂоݤˤ¹¤ì¤Ð¡¤ÌäÂê¤Ïµ¯¤³¤ê¤Ë¤¯¤¯¤Ê¤ë¤È»×¤¤¤Þ¤¹¡£
100 OPTION CHARACTER KANJI
110 INPUT PROMPT "Á´³Ñ¤Ç£±Ê¸»úÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:":a$
120 LET b=ORD(a$)
130 LET b$=STR$(b)
140 LET c$=BSTR$(ORD(a$),16)
150 LET d$=right$(c$,2)&left$(c$,2)
160 PRINT
170 PRINT CHR$(BVAL(c$,16))&"(JIS:"&c$&")"&" -> "&CHR$(BVAL(d$,16))&"(JIS:"&d$&")"
180 OPEN #1:NAME "A:TEST.TXT"
190 ERASE #1
200 PRINT #1:CHR$(BVAL(d$,16))
210 CLOSE #1
220 OPEN #2:NAME "A:TEST.TXT"
230 INPUT #2:s$
240 CLOSE #2
250 PRINT BSTR$(ORD(s$),16)
260 END
100 OPTION ARITHMETIC DECIMAL
110 OPTION CHARACTER KANJI
120 FOR hi=BVAL("21",16) TO BVAL("73",16)
130 FOR lo=BVAL("21",16) TO BVAL("7E",16)
140 LET count=hi*256+lo
150 LET hcount$=BSTR$(count,16)
160 LET strcount$=STR$(count)
170 WHEN EXCEPTION IN
180 PRINT
CHR$(39)&CHR$(count)&CHR$(39)&" chr$("&strcount$&")
<-> JIS ["&hcount$&"]"
190 USE
200 PRINT
CHR$(7)&"Îã³°"&STR$(EXTYPE)&CHR$(7)&"
chr$("&strcount$&") <-> JIS ["&hcount$&"]"
210 END WHEN
220 NEXT lo
230 NEXT hi
240 END
FUNCTION GCD(a,b) !ºÇÂç¸øÌó¿ô
IF b=0 THEN LET GCD=a ELSE LET GCD=GCD(b, MOD(a,b))
END FUNCTION
LET r1=8 !¸ÇÄê±ß¤ÎȾ·Â
LET r2=5 !ư¤¯±ß¤ÎȾ·Â¡¡¢¨r1*r2>0¤Ê¤éÆâ¦¡¢r1*r2<0¤Ê¤é³°Â¦
LET r3=4 !ÅÀP¤Î°ÌÃÖ¡ÊÆ°¤¯±ß¤ÎÃæ¿´¤«¤é¡Ë¡¡¢¨r3=r2¤Ê¤é¥µ¥¤¥¯¥í¥¤¥É¡¢r3¡âr2¤Ê¤é¥È¥í¥³¥¤¥É
IF r1*r2>0 THEN
LET sz=ABS(r1)+ABS(r3)+1
ELSE
LET sz=ABS(r1)+ABS(r2)+ABS(r3)+1
END IF
SET WINDOW -sz,sz,-sz,sz !ɽ¼¨Îΰè
DRAW grid !ºÂɸ
DRAW circle WITH SCALE(r1) !Â礤ʱß
LET iter=r2/GCD(r1,r2) !¼þ²ó¿ô
FOR th=0 TO 360*iter !STEP 0.2 !¢¨Á¤ˤʤë¤Ê¤éÄ´À°
DRAW p WITH ROTATE(r1/r2*RAD(th))*SHIFT(r1-r2,0)*ROTATE(-RAD(th)) !ÅÀP
NEXT th
PICTURE p !¸¶ÅÀ¡Êư¤¯±ß¤ÎÃæ¿´¡Ë¤ò´ð½à¤ËÅÀP¤òÉÁ¤¯
DRAW disk WITH SCALE(0.1)*SHIFT(r3,0) !ÅÀP
END PICTURE
FUNCTION GCD(a,b) !ºÇÂç¸øÌó¿ô
IF b=0 THEN LET GCD=a ELSE LET GCD=GCD(b, MOD(a,b))
END FUNCTION
LET r1=8 !¸ÇÄê±ß¤ÎȾ·Â
LET r2=5 !ư¤¯±ß¤ÎȾ·Â¡¡¢¨r1*r2>0¤Ê¤éÆâ¦¡¢r1*r2<0¤Ê¤é³°Â¦
LET r3=4 !ÅÀP¤Î°ÌÃÖ¡ÊÆ°¤¯±ß¤ÎÃæ¿´¤«¤é¡Ë¡¡¢¨r3=r2¤Ê¤é¥µ¥¤¥¯¥í¥¤¥É¡¢r3¡âr2¤Ê¤é¥È¥í¥³¥¤¥É
IF r1*r2>0 THEN
IF ABS(r1)>ABS(r2) THEN
LET sz=MAX(ABS(r1),ABS(r1-r2)+ABS(r3))+1
ELSE
LET sz=ABS(r1)+ABS(r3)+1
END IF
ELSE
LET sz=ABS(r1)+ABS(r2)+ABS(r3)+1
END IF
SET WINDOW -sz,sz,-sz,sz !ɽ¼¨Îΰè
DRAW grid !ºÂɸ
DRAW circle WITH SCALE(r1) !Â礤ʱß
LET iter=r2/GCD(r1,r2) !¼þ²ó¿ô
SET DRAW MODE NOTXOR
DIM w(4,4) !¥í¡¼¥«¥ëºÂɸ¤ò¥ï¡¼¥ë¥ÉºÂɸ¤ËÊÑ´¹¤¹¤ë
MAT w=SHIFT(r1-r2,0) !£±¤ÄÁ°
DRAW p(0) WITH w
FOR th=0 TO 360*iter !STEP 0.2 !¢¨Á¤ˤʤë¤Ê¤éÄ´À°
DRAW p(0) WITH w !£±¤ÄÁ°¤ò¾Ã¤¹
MAT w=ROTATE(-r1/r2*RAD(th)) * SHIFT(r1-r2,0)*ROTATE(RAD(th)) !»ÑÀª¤È°ÌÃÖ
DRAW p(1) WITH w !¥ï¡¼¥ë¥ÉºÂɸ¤Ë¡¢Æ°¤¯±ß¤ÈÅÀP¤òÉÁ¤¯
WAIT DELAY 0.02
NEXT th
PICTURE p(f) !¥í¡¼¥«¥ëºÂɸ¤Î¸¶ÅÀ¤ò´ð½à¤Ë¡¢Æ°¤¯±ß¤ÈÅÀP¤òÉÁ¤¯
IF f=1 THEN !ÉÁ²è½ç¤ò¹Íθ¤·¤Æ¡¢Àè¤ËÅÀP¤òÉÁ¤¯
SET DRAW MODE OVERWRITE !ÉÁ²èdisk¤ËNOTXOR¤òÈ¿±Ç¤µ¤»¤Ê¤¤
DRAW disk WITH SCALE(0.2)*SHIFT(r3,0)
SET DRAW MODE NOTXOR
END IF
DRAW circle WITH SCALE(r2) !ư¤¯±ß
PLOT LINES: 0,0; r3,0
END PICTURE
REM ** ²èÁü½Ì¾®ÊäÀµ¥×¥í¥°¥é¥à **
OPTION ARITHMETIC NATIVE
DECLARE EXTERNAL SUB revision1,revision2
GLOAD "C:\Program Files\Decimal BASIC\BASICw32\SAMPLE\ZENKOUJI.JPG"
LET px0=PIXELX(1)
LET py0=PIXELY(1)
SET WINDOW 0,px0,0,py0
DIM pict0(0 TO px0,0 TO py0) ! ¸µ²èÁü(ÇÛÎó¤Î²¼¸Â¤Ï0°Ê³°¤â²Ä)
SET COLOR MODE "NATIVE"
ASK PIXEL ARRAY (0,py0) pict0 ! ¸µ²èÁü¤Î¿§»ØÉ¸
DO
LET err=0
INPUT PROMPT "[½Ì¾®Î¨ÆþÎÏ] ʬ»Ò,ʬÊì (ʬ»Ò=1 or ʬ»Ò=ʬÊì-1)" : num,denom
IF num<1 OR INT(num)<>num THEN LET err=1
IF denom<2 OR INT(denom)<>denom THEN LET err=1
IF num<>1 AND num<>denom-1 THEN LET err=1
LOOP UNTIL err=0
LET t0=TIME
LET kk=num/denom ! ½Ì¾®Î¨
MAT PLOT CELLS, IN px0-px0*kk,py0*kk ; px0,0 : pict0 !! ÊäÀµ¤Ê¤·
!
LET px9=INT(SIZE(pict0,1)*kk+0.00001)-1 ! k=1/3,3*k<>1¤ËÂбþ
LET py9=INT(SIZE(pict0,2)*kk+0.00001)-1
DIM pict9(0 TO px9,0 TO py9) ! ½Ì¾®ÊäÀµ²èÁü(ÇÛÎó¤Î²¼¸Â¤Ï0)
IF num=1 THEN
CALL revision1(pict0,pict9,denom) ! ½Ì¾®Î¨=1/n
ELSE
CALL revision2(pict0,pict9,denom) ! ½Ì¾®Î¨=(n-1)/n
END IF
IF TIME-t0<0.2 THEN WAIT DELAY 0.2
BEEP
SET TEXT COLOR "RED"
SET TEXT HEIGHT py0/30
PLOT TEXT ,AT 1,1 : "PUSH ANY KEY"
DO
FOR i=8 TO 239
IF GetKeyState(i)<0 THEN EXIT DO
NEXT i
LOOP
MAT PLOT CELLS, IN 0,py9 ; px9,0 : pict9 !! ÊäÀµ¤¢¤ê
BEEP
END
REM ½Ì¾®Î¨=1/n (1/2,1/3,1/4,...)
EXTERNAL SUB revision1(sp0(,),sp9(,),k)
OPTION ARITHMETIC NATIVE
LET kk=1/k
DIM c9(3)
LET lx0=LBOUND(sp0,1)
LET ly0=LBOUND(sp0,2)
LET ux0=UBOUND(sp0,1)
LET uy0=UBOUND(sp0,2)
LET ux9=UBOUND(sp9,1)
LET uy9=UBOUND(sp9,2)
FOR i=lx0 TO ux0-(k-1) STEP k
FOR j=ly0 TO uy0-(k-1) STEP k
MAT c9=ZER
FOR ii=0 TO k-1
FOR jj=0 TO k-1
CALL acm(i+ii,j+jj)
NEXT jj
NEXT ii
LET sp9((i-lx0)*kk,(j-ly0)*kk)=COLORINDEX(c9(1)/k^2,c9(2)/k^2,c9(3)/k^2)
NEXT j
NEXT i
LET rm2=MOD(uy0,k) ! ±ï(²£)¤Î½èÍý
IF rm2<>k-1 THEN
FOR i=lx0 TO ux0-(k-1) STEP k
MAT c9=ZER
FOR j=0 TO rm2
CALL acm(i,uy0-j)
NEXT j
LET sp9((i-lx0)*kk,uy9)=COLORINDEX(c9(1)/(rm2+1),c9(2)/(rm2+1),c9(3)/(rm2+1))
NEXT i
END IF
LET rm1=MOD(ux0,k) ! ±ï(½Ä)¤Î½èÍý
IF rm1<>k-1 THEN
FOR j=ly0 TO uy0-(k-1) STEP k
MAT c9=ZER
FOR i=0 TO rm1
CALL acm(ux0-i,j)
NEXT i
LET sp9(ux9,(j-ly0)*kk)=COLORINDEX(c9(1)/(rm1+1),c9(2)/(rm1+1),c9(3)/(rm1+1))
NEXT j
END IF
IF rm1<>k-1 OR rm2<>k-1 THEN ! ³Ñ¤Î½èÍý
MAT c9=ZER
FOR i=0 TO rm1
FOR j=0 TO rm2
CALL acm(ux0-i,uy0-j)
NEXT j
NEXT i
LET rm12=(rm1+1)*(rm2+1)
LET sp9(ux9,uy9)=COLORINDEX(c9(1)/rm12,c9(2)/rm12,c9(3)/rm12)
END IF
SUB acm(x0,y0)
ASK COLOR MIX(sp0(x0,y0)) b,g,r
LET c9(1)=c9(1)+b
LET c9(2)=c9(2)+g
LET c9(3)=c9(3)+r
END SUB
END SUB
REM ½Ì¾®Î¨=(n-1)/n (2/3,3/4,4/5,...)
EXTERNAL SUB revision2(sp0(,),sp9(,),k)
OPTION ARITHMETIC NATIVE
DECLARE FUNCTION c_ave
LET kk=(k-1)/k
LET num1=(k-1)-1
LET lx0=LBOUND(sp0,1)
LET ly0=LBOUND(sp0,2)
LET ux0=UBOUND(sp0,1)
LET uy0=UBOUND(sp0,2)
LET ux9=UBOUND(sp9,1)
LET uy9=UBOUND(sp9,2)
FOR i=lx0 TO ux0-k STEP k
FOR j=ly0 TO uy0-k STEP k
CALL center
CALL side1(i,j,1,0)
CALL side1(i+k,j,-1,num1)
CALL side2(i,j,1,0)
CALL side2(i,j+k,-1,num1)
CALL corner(i,j,1,1,0,0)
CALL corner(i,j+k,1,-1,0,num1)
CALL corner(i+k,j,-1,1,num1,0)
CALL corner(i+k,j+k,-1,-1,num1,num1)
NEXT j
NEXT i
LET x8=(i-lx0-k)*kk+num1
LET y8=(j-ly0-k)*kk+num1
IF uy9<>y8 THEN CALL edge1
IF ux9<>x8 THEN CALL edge2
IF ux9<>x8 AND uy9<>y8 THEN CALL edge_corner
FUNCTION c_ave(c1,c2) ! ¿§¶¯ÅٲýÅÊ¿¶Ñ
ASK COLOR MIX(c1) b1,g1,r1
ASK COLOR MIX(c2) b2,g2,r2
LET c_ave=COLORINDEX((b1+2*b2)/3,(g1+2*g2)/3,(r1+2*r2)/3)
END FUNCTION
SUB center
FOR ii=2 TO num1
FOR jj=2 TO num1
LET sp9((i-lx0)*kk+ii-1,(j-ly0)*kk+jj-1)=sp0(i+ii,j+jj)
NEXT jj
NEXT ii
END SUB
SUB side1(x,y,ii,m)
FOR jj=2 TO num1
LET sp9((i-lx0)*kk+m,(j-ly0)*kk+jj-1)=c_ave(sp0(x,y+jj),sp0(x+ii,y+jj))
NEXT jj
END SUB
SUB side2(x,y,jj,n)
FOR ii=2 TO num1
LET sp9((i-lx0)*kk+ii-1,(j-ly0)*kk+n)=c_ave(sp0(x+ii,y),sp0(x+ii,y+jj))
NEXT ii
END SUB
SUB corner(x,y,ii,jj,m,n)
ASK COLOR MIX(sp0(x,y)) b1,g1,r1
ASK COLOR MIX(sp0(x,y+jj)) b2,g2,r2
ASK COLOR MIX(sp0(x+ii,y)) b3,g3,r3
ASK COLOR MIX(sp0(x+ii,y+jj)) b4,g4,r4
LET bb=(b1+2*b2+2*b3+4*b4)/9
LET gg=(g1+2*g2+2*g3+4*g4)/9
LET rr=(r1+2*r2+2*r3+4*r4)/9
LET sp9((i-lx0)*kk+m,(j-ly0)*kk+n)=COLORINDEX(bb,gg,rr)
END SUB
SUB edge1
FOR i=lx0 TO ux0-k STEP k ! ²¼ÊդνèÍý
FOR ii=0 TO num1
FOR jj=0 TO uy9-y8-2
LET sp9((i-lx0)*kk+ii,uy9-jj)=sp0(i+ii+1,uy0-jj)
NEXT jj
LET sp9((i-lx0)*kk+ii,uy9-jj)=c_ave(sp0(i+ii+1,uy0-(jj+1)),sp0(i+ii+1,uy0-jj))
NEXT ii
NEXT i
END SUB
SUB edge2
FOR j=ly0 TO uy0-k STEP k ! ±¦ÊդνèÍý
FOR jj=0 TO num1
FOR ii=0 TO ux9-x8-2
LET sp9(ux9-ii,(j-ly0)*kk+jj)=sp0(ux0-ii,j+jj+1)
NEXT ii
LET sp9(ux9-ii,(j-ly0)*kk+jj)=c_ave(sp0(ux0-(ii+1),j+jj+1),sp0(ux0-ii,j+jj+1))
NEXT jj
NEXT j
END SUB
SUB edge_corner
FOR ii=ux9 TO x8+1 STEP-1
FOR jj=uy9 TO y8+1 STEP-1
LET sp9(ii,jj)=sp0(ux0-(ux9-ii),uy0-(uy9-jj))
NEXT jj
NEXT ii
END SUB
END SUB
FUNCTION phi(k,i,N) !´ðÄì´Ø¿ô¦Õk(i)
IF k=0 THEN
LET phi=1/SQR(N)
ELSE
LET phi=SQR(2/N)*COS((2*i+1)*k*PI/(2*N))
END IF
END FUNCTION
SUB DCT(f(,),TBL(,),iTBL(,), FF(,)) !DCTÊÑ´¹
MAT FF=TBL*f
MAT FF=FF*iTBL !F(k,l)=¦²[j=0,N-1]¦²[i=0,N-1]f(i,j)*¦Õk(i)*¦Õl(j)
END SUB
SUB iDCT(FF(,),TBL(,),iTBL(,), f(,)) !DCTµÕÊÑ´¹
MAT f=iTBL*FF
MAT f=f*TBL !f(i,j)=¦²[l=0,N-1]¦²[k=0,N-1]F(k,l)*¦Õk(i)*¦Õl(j)
END SUB
DIM TBLn(0 TO N-1,0 TO N-1) !ÊÑ´¹¹ÔÎó T
MAT TBLn=ZER
FOR k=0 TO N-1 !N¡ßN¥Ö¥í¥Ã¥¯¤Î¦Õk(i)¤Î¥Æ¡¼¥Ö¥ë¤ò¤Ä¤¯¤ë
FOR i=0 TO N-1
LET TBLn(k,i)=phi(k,i,N)
NEXT i
NEXT k
!!!MAT PRINT TBLn;
DIM iTBLn(N,N) !¢¨T^-1=T^t¡¢¢è¥æ¥Ë¥¿¥ê¡¼¹ÔÎó
MAT iTBLn=TRN(TBLn)
!-------------------- ¤³¤³¤Þ¤Ç¤¬¥µ¥Ö¥ë¡¼¥Á¥ó
SET COLOR MODE "NATIVE"
!GLOAD "c:\BASICw32\SAMPLE\ZENKOUJI.JPG" !²èÁü¤òÆÉ¤ß¹þ¤à
GLOAD "c:\My Documents\test2.bmp" !²èÁü¤òÆÉ¤ß¹þ¤à
ASK PIXEL SIZE (0,0; 1,1) w,h !²èÁü¤Î½Ä²£¤ÎÂ礤µ(¥Ô¥¯¥»¥ëñ°Ì)¤òÄ´¤Ù¤ë
DIM p(w,h) !²èÁü¤ÎÂ礤µ¤ËÂбþ¤¹¤ëÇÛÎóÍ×ÁǤòÍѰդ¹¤ë
ASK PIXEL ARRAY (0,1) p !²èÁü¤Î³ÆÅÀ¤Î¿§¾ðÊó¤òÇÛÎó¤Ë³ÊǼ¤¹¤ë
PRINT "²èÁü¤ÎÂ礤µ ½Ä:";h;" ²£:";w
!SET BITMAP SIZE w,h !¥¦¥£¥ó¥É¥¦¤ÎÂ礤µ¤ò²èÁü¤Ë¹ç¤ï¤»¤ë
LET A=5 !³ÈÂç½Ì¾®Î¨ A/N
!LET A=11 !³ÈÂç½Ì¾®Î¨
LET ww=INT(w*A/N+0.5) !ÊÑ´¹¸å¤Î²èÁü¤ÎÂ礤µ
LET hh=INT(h*A/N+0.5)
PRINT A;"/";N;"ÇܡʽIJ£Èæ¤Ï¸ÇÄê¡Ë ½Ä:";hh;" ²£:";ww
IF ww<=0 OR hh<=0 THEN
PRINT "²èÁü¤ÎÂ礤µ¤¬£°¤Þ¤¿¤ÏÉé¤Ë¤Ê¤ê¤Þ¤¹¡£"
STOP
END IF
DIM q(ww,hh) !ÊÑ´¹¸å¤Î²èÁü¤ò³ÊǼ¤¹¤ëÇÛÎó
LET t0=TIME
DIM TBLa(0 TO A-1,0 TO A-1)
MAT TBLa=ZER
FOR k=0 TO A-1 !A¡ßA¥Ö¥í¥Ã¥¯¤Î¦Õk(i)¤Î¥Æ¡¼¥Ö¥ë¤ò¤Ä¤¯¤ë
FOR i=0 TO A-1
LET TBLa(k,i)=phi(k,i,A)
NEXT i
NEXT k
DIM iTBLa(0 TO A-1,0 TO A-1)
MAT iTBLa=TRN(TBLa)
FOR by=0 TO INT((h-1)/N) !¥Ö¥í¥Ã¥¯Ã±°Ì¤Ëʬ³ä¤¹¤ë
FOR bx=0 TO INT((w-1)/N)
FOR j=1 TO N !¥Ö¥í¥Ã¥¯Æâ¤Î²èÁü
LET y=by*N+j
IF y>h THEN EXIT FOR !²¼Ã¼¤Ê¤é
FOR i=1 TO N
LET x=bx*N+i
IF x>w THEN EXIT FOR !±¦Ã¼¤Ê¤é
!!!PRINT x;y,i;j
LET c=p(x,y)
ASK COLOR MIX(c) r,g,b !RGB¤ò¼èÆÀ¤¹¤ë
DIM Br(N,N),Bg(N,N),Bb(N,N) !²èÁǤο§Ç»ÅÙ¡¡¢¨²èÁü¿®¹æ f(i,j)
LET Br(i,j)=r
LET Bg(i,j)=g
LET Bb(i,j)=b
NEXT i
NEXT j
!¢¨½Ì¾®¤Ê¤é¹â¼þÇÈÀ®Ê¬¤Î¹Ô¤ÈÎó¤ò½ü¤¯¡¢³ÈÂç¤Ê¤éÉÔÂÉôʬ¤Ï£°¤òÊ䤦
DIM Tr(A,A),Tg(A,A),Tb(A,A)
IF A>N THEN !³ÈÂç¤Ê¤é
MAT Tr=ZER(A,A)
MAT Tg=ZER(A,A)
MAT Tb=ZER(A,A)
END IF
FOR j=1 TO MIN(N,A) !copy it
FOR i=1 TO MIN(N,A)
LET Tr(i,j)=BVr(i,j)
LET Tg(i,j)=BVg(i,j)
LET Tb(i,j)=BVb(i,j)
NEXT i
NEXT j
DEF ha(f)=MOD(f,cEps*10) !ɾ²Á´Ø¿ô
SUB hatch(t, x,y,c) !¥Ï¥Ã¥Á·Á¾õ¤Ê¤éÅÀ(x,y)¤òÉÁ¤¯
LET flg=0
IF (t=1 OR t=5) AND ha(y)<cEps THEN LET flg=1 !²£
IF (t=2 OR t=5) AND ha(x)<cEps THEN LET flg=1 !½Ä
IF (t=3 OR t=6) AND ha(x+y)<cEps THEN LET flg=1 !º¸¼Ð¤á
IF (t=4 OR t=6) AND ha(x-y)<cEps THEN LET flg=1 !±¦¼Ð¤á
IF t=0 OR flg=1 THEN !t=0¤Ï¥Ù¥¿Åɤê
SET POINT COLOR c
PLOT POINTS: x,y
END IF
END SUB
!¾ò·ï¤òËþ¤¿¤¹Îΰè¤òÉÁ¤¯
SET POINT STYLE 1 !¥É¥Ã¥È·Á¼°
FOR j=1 TO h !²èÌÌÁ´ÂΤòÁöºº¤¹¤ë
LET y=WORLDY(j) !¥É¥Ã¥È¤òxyºÂɸ¤ËÊÑ´¹¤¹¤ë
FOR i=1 TO w
LET x=WORLDX(i)
WHEN EXCEPTION IN
!ÉÔÅù¼°¤¬¼¨¤¹Îΰ衡¢¨y>f(x)¤Ïf(x)>0¡¢y<f(x)¤Ïf(x)<0¤ò°ÕÌ£¤¹¤ë
IF y>f(x) THEN CALL hatch(4, x,y,4) !¾ò·ï¤òËþ¤¿¤¹¤Ê¤é
IF g(x,y)<0 THEN CALL hatch(3, x,y,2)
!¶ÊÀþ¤òÉÁ¤¯¡¡¢¨y=f(x)
FOR x=a TO b STEP cEps
WHEN EXCEPTION IN
PLOT LINES: x,f(x); !ÀÞ¤ìÀþ¤Ç¶á»÷¤¹¤ë
USE
PLOT LINES
END WHEN
NEXT x
PLOT LINES
PLOT TEXT ,AT -2,4: "f(x)"
!¶ÊÀþ¤òÉÁ¤¯¡¡¢¨Ï¢Â³¤Êf(x,y)=0
SET POINT COLOR 1
FOR y=c TO d STEP cEps
LET x=a
LET z=g(x,y)
FOR x=a TO b STEP cEps
LET z0=z
LET z=g(x,y)
IF z0*z<0 THEN PLOT POINTS: x,y !É乿¤¬ÊѤï¤ì¤Ð
NEXT x
NEXT y
PLOT TEXT ,AT -3,-3: "g(x)"
LET ba=b-a
LET hit=0
FOR i=1 TO N
LET x=RND*ba+a !N¸Ä¤Î°ìÍÍÍð¿ô
LET y=RND*c
IF y<f(x) THEN LET hit=hit+1 !f¤è¤ê²¼¤ÎÎΰè
NEXT i
LET S=c*ba * hit/N !ĹÊý·Á¤È¤ÎÌÌÀÑÈæ
IF X ¡ã¡á 10 THEN PRINT USING "¡ã###" : 123
IF X ¡ã¡ä 10 THEN PRINT USING "¡ã%%%" : 123
IF X¡ã¡á10 THEN PRINT USING "¡ã###":123
IF X¡ã¡ä10 THEN PRINT USING "¡ã%%%":123
PRINT USING "#¡ã" : w10, w1
PRINT USING "#¡ã":w10, w1
¡¡¤È½ñ¤¤¤¿¤È¤¹¤ë¡£
IF X <= 10 THEN PRINT USING "<###" : 123
IF X <> 10 THEN PRINT USING "<%%%" : 123
IF X<=10 THEN PRINT USING "<###":123
IF X<>10 THEN PRINT USING "<%%%":123
PRINT USING "#<" : w10, w1
PRINT USING "#<":w10, w1
IF MOD(p(1),3)=0 THEN !³Æ·å¤ÎϤ¬£³¤ÎÇÜ¿ô¤Ê¤é
PRINT p(10) !x=k1+k2*10+k3*100+ ¡Ä
ELSEIF k1=3 OR k2=3 THEN !¤¤¤º¤ì¤«¤¬£³¤È¤Ê¤ë
PRINT p(10) !x=k1+k2*10+k3*100+ ¡Ä
END IF
DIM CC(K) !Äê¿ô (1 1 1 ¡Ä)
MAT CC=CON
DIM BB(K) !Äê¿ô (1 10 100 ¡Ä)
FOR i=1 TO K
LET BB(i)=10^(i-1) !°Ì
NEXT i
DIM V(K) !¥Ù¥¯¥È¥ë
FOR k2=0 TO 9 !½½¤Î°Ì
LET V(2)=k2
FOR k1=0 TO 9 !°ì¤Î°Ì
LET V(1)=k1
IF MOD(DOT(V,CC),3)=0 THEN !³Æ·å¤ÎϤ¬£³¤ÎÇÜ¿ô¤Ê¤é
PRINT DOT(V,BB) !x=k1+k2*10+k3*100+ ¡Ä
ELSEIF V(1)=3 OR V(2)=3 THEN !¤¤¤º¤ì¤«¤¬£³¤È¤Ê¤ë
PRINT DOT(V,BB) !x=k1+k2*10+k3*100+ ¡Ä
END IF
FUNCTION tr(A(,)) !¹ÔÎóA¤Î¥È¥ì¡¼¥¹
LET t=0 !ÂгÑÀ®Ê¬¤ÎÏÂ
FOR m=1 TO MIN(UBOUND(A,1),UBOUND(A,2))
LET t=t+A(m,m)
NEXT m
LET tr=t
END FUNCTION
LET K=4 !·å¿ô
DIM B(K,1) !Äê¿ô t[1 10 100 ¡Ä]
FOR i=1 TO K
LET B(i,1)=10^(i-1) !°Ì
NEXT i
DIM C(1,K) !Äê¿ô [1 1 1 ¡Ä]
MAT C=CON
DIM TT(K,1),X(1,1) !ºî¶ÈÍÑ
DIM A(K,K) !ÂгѹÔÎó
MAT A=ZER
FOR k2=0 TO 9 !½½¤Î°Ì
LET A(2,2)=k2
FOR k1=0 TO 9 !°ì¤Î°Ì
LET A(1,1)=k1
IF MOD(tr(A),3)=0 THEN !³Æ·å¤ÎϤ¬£³¤ÎÇÜ¿ô¤Ê¤é
MAT TT=A*B !x=k1+k2*10+k3*100+ ¡Ä
MAT X=C*TT
MAT PRINT X; !PRINT X(1,1)
ELSEIF A(1,1)=3 OR A(2,2)=3 THEN !¤¤¤º¤ì¤«¤¬£³¤È¤Ê¤ë
MAT TT=A*B !x=k1+k2*10+k3*100+ ¡Ä
MAT X=C*TT
MAT PRINT X;
END IF
PUBLIC NUMERIC ANSWER_COUNT !²òÅú¿ô
LET ANSWER_COUNT=0
PUBLIC STRING num$
LET num$="0123456789ABCDEF" !N¿ÊË¡¤Î¿ô»ú
DIM M(0 TO N-1,0 TO N-1) !Ê¿Êý¤ÎÊý¿Ø
MAT M=(-1)*CON
SET WINDOW -1,N+1,N+1,-1
DRAW grid
LET t0=TIME
CALL BackTrack(N,M,0) !º¸¾å¤«¤é
PRINT "·×»»»þ´Ö=";TIME-t0
END
EXTERNAL SUB BackTrack(N,M(,),p) !¡Êº¸¾å¤«¤é¤ÎÏ¢È֡˰ÌÃÖp¤òÄ´ºº¤¹¤ë
IF p<N*N THEN !¤¹¤Ù¤Æ¤¬Ëä¤Þ¤ë¤Þ¤Ç
LET row=INT(p/N) !¹Ô¤ÈÎó¤Ë´¹»»¤¹¤ë
LET col=MOD(p,N)
FOR k=0 TO N*N-1 !£°¡ÁN*N-1ÈϰϤοô»ú¤ò
CALL CheckRule(N,M, row,col,k, rc)!Ì·½â¤Ê¤¯ÃÖ¤±¤ì¤Ð
IF rc=1 THEN
SET TEXT COLOR 1
PLOT TEXT ,AT col+0.5,row+0.5: STR$(k)
LET M(row,col)=k !¤³¤³¤ËÃÖ¤¤¤Æ¤ß¤ë
CALL BackTrack(N,M,p+1) !¼¡¤Ø
LET M(row,col)=-1 !¼è¤ê¾Ã¤¹
SET TEXT COLOR 0
PLOT TEXT ,AT col+0.5,row+0.5: STR$(k)
END IF
NEXT k
ELSE !¤¹¤Ù¤ÆËä¤Þ¤Ã¤¿¤é
LET ANSWER_COUNT=ANSWER_COUNT+1 !²òÅú¿ô
PRINT ANSWER_COUNT
FOR i=0 TO N-1
FOR j=0 TO N-1
LET t=M(i,j)
LET k1=MOD(t,N)+2 !N¿ÊË¡¤Ç¤Î³Æ·å¤ÎÃÍ¡Êʸ»ú°ÌÃÖ¤ò²ÃÌ£¡Ë
LET k2=INT(t/N)+2
PRINT num$(k2:k2); num$(k1:k1); " "; !²ò¤òɽ¼¨¤¹¤ë
NEXT j
PRINT
NEXT i
PRINT
END IF
END SUB
EXTERNAL SUB CheckRule(N,M(,), row,col,K, rc) !Ʊ¤¸¿ô¤¬¤¢¤ë¤«¤É¤¦¤«³Îǧ¤¹¤ë
LET rc=0
FOR y=0 TO N-1 !Ëä¤Þ¤Ã¤Æ¤¤¤ëÈϰϤÇ̤»ÈÍѤοô»ú¤«
FOR x=0 TO N-1
IF y>=row AND x>=col THEN EXIT FOR
IF M(y,x)=K THEN EXIT SUB !¸«¤Ä¤«¤Ã¤¿¤Î¤Ç¡¢£Î£Ç¡ª
NEXT x
NEXT y
LET k1=MOD(K,N) !N¿ÊË¡¤Ç¤Î£±·åÌÜ
LET k2=INT(K/N) !N¿ÊË¡¤Ç¤Î£²·åÌÜ
FOR y=0 TO row-1 !Îó
LET t=M(y,col)
IF MOD(t,N)=k1 THEN EXIT SUB
IF INT(t/N)=k2 THEN EXIT SUB
NEXT y
FOR x=0 TO col-1 !¹Ô
LET t=M(row,x)
IF MOD(t,N)=k1 THEN EXIT SUB
IF INT(t/N)=k2 THEN EXIT SUB
NEXT x
PUBLIC STRING num$
LET num$="0123456789ABCDEF" !N¿ÊË¡¤Î¿ô»ú
DIM M(0 TO N*N-1) !Ê¿Êý¤ÎÊý¿Ø
MAT M=(-1)*CON
FOR i=0 TO N-1 !ɸ½à·Á¤Î¾ì¹ç¡¡¢¨£±¹ÔÌܤȣ±ÎóÌܤ¬À°Î󤷤Ƥ¤¤ë
LET M(i*N+0)=i
LET M(0*N+i)=i
NEXT i
LET t0=TIME
CALL BackTrack(N,M,0) !º¸¾å¤«¤é
PRINT "·×»»»þ´Ö=";TIME-t0
END
EXTERNAL SUB BackTrack(N,M(),p) !¡Êº¸¾å¤«¤é¤ÎÏ¢È֡˰ÌÃÖp¤òÄ´ºº¤¹¤ë
IF p<N*N THEN !¤¹¤Ù¤Æ¤¬Ëä¤Þ¤ë¤Þ¤Ç
IF M(p)>=0 THEN !´û¤ËÃÖ¤¤¤Æ¤¢¤ì¤Ð
CALL BackTrack(N,M,p+1) !¼¡¤Ø
ELSE
FOR k=0 TO N-1 !¿ô»ú£°¡ÁN-1¤ò
CALL CheckRule(N,M, p,k, rc)!Ì·½â¤Ê¤¯ÃÖ¤±¤ì¤Ð
IF rc=1 THEN
LET M(p)=k !¤³¤³¤ËÃÖ¤¤¤Æ¤ß¤ë
CALL BackTrack(N,M,p+1) !¼¡¤Ø
LET M(p)=-1 !¼è¤ê¾Ã¤¹
END IF
NEXT k
END IF
ELSE !¤¹¤Ù¤ÆËä¤Þ¤Ã¤¿¤é
LET CntOfLM=CntOfLM+1 !²òÅú¿ô
PRINT CntOfLM
FOR i=0 TO N-1
FOR j=0 TO N-1
LET t=M(i*N+j)+1
PRINT num$(t+1:t+1); " "; !²ò¤òɽ¼¨¤¹¤ë
NEXT j
PRINT
NEXT i
PRINT
END IF
END SUB
EXTERNAL SUB CheckRule(N,M(), p,K, rc) !Ʊ¤¸¿ô¤¬¤¢¤ë¤«¤É¤¦¤«³Îǧ¤¹¤ë
LET rc=0
LET row=INT(p/N) !¹Ô¤ÈÎó¤Ë´¹»»¤¹¤ë
LET col=MOD(p,N)
FOR i=0 TO row-1 !Îó
IF M(i*N+col)=K THEN EXIT SUB
NEXT i
FOR i=0 TO col-1 !¹Ô
IF M(row*N+i)=K THEN EXIT SUB
NEXT i
!¢¨N=1,2,3,4,5,6,7,¡Ä¤Ê¤é¡¢1,1,1,4,56,9408,16942080,¡Ä¤È¤Ê¤ë¡£
PUBLIC NUMERIC LM(9408,0 TO 35) !ɸ½à·Á¥é¥Æ¥óÊý¿Ø N=6
PUBLIC NUMERIC CntOfLM !¤½¤Î¿ô
LET CntOfLM=0
DIM M(0 TO N*N-1) !Ê¿Êý¤ÎÊý¿Ø
MAT M=(-1)*CON
FOR i=0 TO N-1 !ɸ½à·Á¡¡¢¨£±¹ÔÌܤȣ±ÎóÌܤ¬À°Î󤷤Ƥ¤¤ë
LET M(i*N+0)=i
LET M(0*N+i)=i
NEXT i
LET t0=TIME
CALL BackTrack(N,M,0) !º¸¾å¤«¤é
PRINT CntOfLM
PRINT "·×»»»þ´Ö=";TIME-t0
LET t0=TIME
PUBLIC NUMERIC ANSWER_COUNT !²òÅú¿ô
LET ANSWER_COUNT=0
LET cnt=0 !¸¡¾Ú²ó¿ô
LET cc=comb(CntOfLM+2-1,2)
DIM A(0 TO N-1,0 TO N-1),B(0 TO N-1,0 TO N-1)
FOR i=1 TO CntOfLM !ɸ½à·ÁA¤Èɸ½à·ÁB¤ÎŸ³«¤È¤Î½ÅÊ£Áȹ礻 56H2
FOR y=0 TO N-1 !A¤ò»ØÄꤹ¤ë
FOR x=0 TO N-1
LET A(y,x)=LM(i,y*N+x)
NEXT x
NEXT y
FOR j=i TO CntOfLM
LET cnt=cnt+1 !¿ÊĽ
PRINT cnt;"/";cc
FOR y=0 TO N-1 !B¤ò»ØÄꤹ¤ë
FOR x=0 TO N-1
LET B(y,x)=LM(j,y*N+x)
NEXT x
NEXT y
DIM R(N) !½çÎó¤Î½é´üÃÍ
FOR k=1 TO N
LET R(k)=k
NEXT k
CALL RPerm(N,A,B, R,2) !¤Þ¤º¹Ô½ç¤ò»ØÄꤹ¤ë¡¡¢¨£±¹ÔÌܤϸÇÄê
NEXT j
NEXT i
IF ANSWER_COUNT=0 THEN PRINT "²ò¤Ê¤·"
PRINT "·×»»»þ´Ö=";TIME-t0
END
EXTERNAL SUB BackTrack(N,M(),p) !¡Êº¸¾å¤«¤é¤ÎÏ¢È֡˰ÌÃÖp¤òÄ´ºº¤¹¤ë
IF p<N*N THEN !¤¹¤Ù¤Æ¤¬Ëä¤Þ¤ë¤Þ¤Ç
IF M(p)>=0 THEN !´û¤ËÃÖ¤¤¤Æ¤¢¤ì¤Ð
CALL BackTrack(N,M,p+1) !¼¡¤Ø
ELSE
FOR k=0 TO N-1 !¿ô»ú£°¡ÁN-1¤ò
CALL CheckRule(N,M, p,k, rc)!Ì·½â¤Ê¤¯ÃÖ¤±¤ì¤Ð
IF rc=1 THEN
LET M(p)=k !¤³¤³¤ËÃÖ¤¤¤Æ¤ß¤ë
CALL BackTrack(N,M,p+1) !¼¡¤Ø
LET M(p)=-1 !¼è¤ê¾Ã¤¹
END IF
NEXT k
END IF
ELSE !¤¹¤Ù¤ÆËä¤Þ¤Ã¤¿¤é
LET CntOfLM=CntOfLM+1 !¿ô¤ÈÇÛÃÖ¤òµÏ¿¤¹¤ë
FOR i=0 TO N*N-1
LET LM(CntOfLM,i)=M(i)
NEXT i
END IF
END SUB
EXTERNAL SUB CheckRule(N,M(), p,K, rc) !Ʊ¤¸¿ô¤¬¤¢¤ë¤«¤É¤¦¤«³Îǧ¤¹¤ë
LET rc=0
LET row=INT(p/N) !¹Ô¤ÈÎó¤Ë´¹»»¤¹¤ë
LET col=MOD(p,N)
FOR i=0 TO row-1 !Îó
IF M(i*N+col)=K THEN EXIT SUB
NEXT i
FOR i=0 TO col-1 !¹Ô
IF M(row*N+i)=K THEN EXIT SUB
NEXT i
LET rc=1 !¸«¤Ä¤«¤é¤Ê¤¤¤Î¤Ç¡¢£Ï£Ë¡ª
END SUB
EXTERNAL SUB RPerm(N,A(,),B(,), P(),i) !½çÎó¤òÀ¸À®¤·¤Æ¹Ô¤ÎʤÓÂØ¤¨¡¡¢¨¼½ñ¼°½ç¤Ç¤Ï¤Ê¤¤
IF I<N THEN
FOR j=i TO N
LET t=P(i) !iÈÖÌܤÈjÈÖÌܤò¸ò´¹¤¹¤ë
LET P(i)=P(j)
LET P(j)=t
CALL RPerm(N,A,B, P,i+1) !ºÆµ¢¸Æ½Ð¤·
LET t=P(i) !¸µ¤ËÌ᤹
LET P(i)=P(j)
LET P(j)=t
NEXT j
ELSE !´°Î»¤Ê¤é
DIM C(N) !½çÎó¤Î½é´üÃÍ
FOR j=1 TO N
LET C(j)=j
NEXT j
CALL CPerm(N,A,B,P,C,1) !º£ÅÙ¤ÏÎó½ç¤ò»ØÄꤹ¤ë
END IF
END SUB
EXTERNAL SUB CPerm(N,A(,),B(,),R(), P(),i) !½çÎó¤òÀ¸À®¤·¤ÆÎó¤ÎʤÓÂØ¤¨¡¡¢¨¼½ñ¼°½ç¤Ç¤Ï¤Ê¤¤
IF I<N THEN
FOR j=i TO N
LET t=P(i) !iÈÖÌܤÈjÈÖÌܤò¸ò´¹¤¹¤ë
LET P(i)=P(j)
LET P(j)=t
CALL CPerm(N,A,B,R, P,i+1) !ºÆµ¢¸Æ½Ð¤·
LET t=P(i) !¸µ¤ËÌ᤹
LET P(i)=P(j)
LET P(j)=t
NEXT j
ELSE !¥ª¥¤¥é¡¼Êý¿Ø¤ò¤Ä¤¯¤Ã¤Æ¸¡¾Ú¤¹¤ë
DIM EM(N,N) !»ÈÍѤǤ¤ë¿ô»ú¤ÎÁȤȻÈÍѾõ¶·
MAT EM=ZER
!¢¨¥é¥Æ¥óÊý¿Ø¤ÎÁȹ礻¤Ê¤Î¤Ç¡¢¹Ô¤ÈÎó¤Î½ÅÊ£¤Ï¤Ê¤¤¡£
FOR i=0 TO N-1 !Êý¿ØÁ´ÂÎ¤ÇÆ±¤¸¿ô¤¬¤¢¤ë¤«¤É¤¦¤«³Îǧ¤¹¤ë
FOR j=0 TO N-1
LET rr=A(i,j)+1 !¥ª¥¤¥é¡¼Êý¿Ø¤ò¤Ä¤¯¤ë
LET cc=B(R(i+1)-1,P(j+1)-1)+1
IF EM(rr,cc)=1 THEN EXIT SUB !¤½¤Î¿ô»ú¤Ï»ÈÍÑÃæ¤Ê¤Î¤Ç£Î£Ç¡ª
LET EM(rr,cc)=1
NEXT j
NEXT i
LET ANSWER_COUNT=ANSWER_COUNT+1 !²òÅú¿ô
PRINT ANSWER_COUNT
FOR i=0 TO N-1 !Åú¤¨¤òɽ¼¨¤¹¤ë
FOR j=0 TO N-1
PRINT (A(i,j)+1)*10 + B(R(i+1)-1,P(j+1)-1)+1 ;
NEXT j
PRINT
NEXT i
OPTION BASE 0
LET N= 3 !¡¡2,3,4,5,6
DIM lb(9408,N,N) !¡¡N=1¡Á7: 1,1,1,4,56,9408,16942080 N=7¤ÏÈ󸽼ÂŪ
DIM wb(N,N), xidx(N), yidx(N), fb(N,N)
!
CALL main
SUB makelb(x, y)
local i,j
FOR i=0 TO N-1
FOR j=0 TO x-1
IF i=wb(y,j) THEN EXIT FOR ! break;
NEXT j
IF j>x-1 THEN
FOR j=0 TO y-1
IF i=wb(j,x) THEN EXIT FOR ! break;
NEXT j
IF j>y-1 THEN
LET wb(y,x)= i
IF y=N-1 AND x=N-1 THEN
!----memcpy(lb[lbs++], wb, sizeof(wb));
FOR a=0 TO N
FOR b=0 TO N
LET lb(lbs,a,b)=wb(a,b)
NEXT b
NEXT a
LET lbs=lbs+1
!---------------
EXIT SUB ! return;
END IF
IF
y=N-1 THEN CALL makelb(x+1, 1) ELSE CALL makelb((x),y+1)
END IF
END IF
NEXT i
END SUB
SUB echk
local i,j
MAT fb=ZER ! memset(fb, 0, sizeof(fb));
FOR i= 0 TO N-1
FOR j= 0 TO N-1
IF fb( lb(p,i,j), lb(q,yidx(i),xidx(j)) )>0 THEN EXIT SUB ! return;
LET fb( lb(p,i,j), lb(q,yidx(i),xidx(j)) )=1
NEXT j
NEXT i
FOR i= 0 TO N-1
FOR j= 0 TO N-1
PRINT USING "%#": lb(p,i,j)+1, lb(q,yidx(i),xidx(j))+1;
IF j=N-1 THEN PRINT ELSE PRINT " ";
NEXT j
NEXT i
STOP ! exit(0);
END SUB
SUB check1(n_)
local i
FOR i=n_ TO N-1
swap xidx(i),xidx(n_)
!-----check2(n_)
local i_
FOR i_= n_ TO N-1
swap yidx(i_),yidx(n_)
IF ( yidx(n_)<>xidx(n_)) AND (n_<>1 OR yidx(n_)< xidx(n_) ) THEN
IF n_=N-1 THEN CALL echk ELSE CALL check1(n_+1)
END IF
swap yidx(i_),yidx(n_)
NEXT i_
!------
swap xidx(i),xidx(n_)
NEXT i
END SUB
SUB main
FOR i= 0 TO N-1
LET wb(i,0)= i
LET wb(0,i)= i
NEXT i
LET lbs = 0
PRINT "N=";N; ! Äɲä·¤¿É½¼¨
CALL makelb(1,1)
PRINT "lbs=";lbs !ÄɲÃ
MAT PRINT wb !¡¡¡¡ÄɲÃ
LET count= 0
FOR p=0 TO lbs-1
FOR q=p TO lbs-1
LET count=count+1
IF MOD(count,1000)=0 THEN PRINT count
FOR i= 0 TO N-1
LET yidx(i)= i
LET xidx(i)= i
NEXT i
CALL check1(1)
NEXT q
NEXT p
PRINT "²ò¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿."
END SUB
SUB dec(C(),p, w) !¥Ñ¥±¥Ã¥ÈÆâ¾å¤«¤ép°ÌÃ֤Υ«¡¼¥É¤òºï½ü¤¹¤ë
LET w=C(p)
FOR i=p TO C(0)-1 !Á°¤ËµÍ¤á¤ë
LET C(i)=C(i+1)
NEXT i
LET C(0)=C(0)-1
END SUB
SUB inc(C(),p,w) !¥Ñ¥±¥Ã¥ÈÆâ¾å¤«¤ép°ÌÃ֤˥«¡¼¥É¤òÄɲ乤ë
IF p<=C(0) THEN
FOR i=C(0) TO p STEP -1 !¸å¤í¤Ë¤º¤é¤¹
LET C(i+1)=C(i)
NEXT i
ELSE
LET p=C(0)+1 !ºÇ¸å
END IF
LET C(p)=w
LET C(0)=C(0)+1
END SUB
DIM TT(0 TO 13*4+1)
SUB add(C1(),C2(), C()) !C1¤ò¾å¡¢C2¤ò²¼¤Ë¥Ñ¥±¥Ã¥È¤ò½Å¤Í¤ë
FOR i=1 TO C1(0)
LET TT(i)=C1(i)
NEXT i
FOR i=1 TO C2(0) !³¤±¤Æ
LET TT(C1(0)+i)=C2(i)
NEXT i
LET C(0)=C1(0)+C2(0)
FOR i=1 TO C(0)
LET C(i)=TT(i)
NEXT i
END SUB
SUB clr(C()) !¥Ñ¥±¥Ã¥È¤ò¥¯¥ê¥¢¤¹¤ë
LET C(0)=0
END SUB
SUB rev(C()) !¥Ñ¥±¥Ã¥È¤ò΢ÊÖ¤¹
FOR i=1 TO INT(C(0)/2)
swap C(i),C(C(0)-i+1)
NEXT i
END SUB
SUB disp(C(),m$) !¥Ñ¥±¥Ã¥È¤ò¾å¤«¤é½ç¤Ëɽ¼¨¤¹¤ë
PRINT m$;"(";C(0);"Ëç)";
FOR i=1 TO C(0)
PRINT C(i);
NEXT i
PRINT
END SUB
!-------------------- ¤³¤³¤Þ¤Ç¤¬¥µ¥Ö¥ë¡¼¥Á¥ó
LET N=12 !Ëç¿ô
DIM S(0 TO N),H(0 TO N) !¥¹¥Ú¡¼¥É¡¢¥Ï¡¼¥È¥Ñ¥±¥Ã¥È¤Î½é´ü²½
FOR i=1 TO N !À°Îó
LET S(i)=i !¥¹¥Ú¡¼¥É 1¡Á13
LET H(i)=i+13*2 !¥Ï¡¼¥È 27¡Á39
NEXT i
LET H(0)=N !Ëç¿ô
LET S(0)=N
!¥Æ¡¼¥Ö¥ë¤Î½é´ü²½
DIM Y1(0 TO N),Y2(0 TO N),Y3(0 TO N) !»³£±¡¢»³£²¡¢¼Î¤Æ¾ì
CALL clr(Y1) !»³¤Î¥¯¥ê¥¢
CALL clr(Y2)
CALL clr(Y3)
CALL dump !ÆâÍÆ¤ò³Îǧ¤¹¤ë
SUB dump
CALL disp(S,"¥¹¥Ú¡¼¥É") !¥È¥ì¡¼¥¹
CALL disp(H,"¥Ï¡¼¥È")
CALL disp(Y1,"»³£±")
CALL disp(Y2,"»³£²")
CALL disp(Y3,"¼Î¤Æ¾ì")
PRINT
END SUB
SUB routine !ºî¶È¤ÎÄêµÁ
FOR x=1 TO N !¼ê»ý¤Á¤Î¥«¡¼¥É¤¬¤Ê¤¯¤Ê¤ë¤Þ¤Ç
PRINT x;"ËçÌܤò¥Æ¡¼¥Ö¥ë¤Ø"
CALL dec(S,1,w) !ºï½ü¤¹¤ë
IF x=K THEN !°ìÃפ¹¤ëËç¿ôÌܤʤé¼Î¤Æ¾ì¤Ø
!IF MOD(x,K)=0 THEN !°ìÃפ¹¤ëËç¿ôÌܤʤé¼Î¤Æ¾ì¤Ø
CALL inc(Y3,1,w)
CALL dec(H,1,w) !ÂåÂØ¤È¤·¤Æ¾ì¤«¤é
END IF
IF MOD(x,2)=0 THEN !º¸±¦¸ò¸ß¤Ç»³¤ËÃÖ¤¯
CALL inc(Y2,1,w)
ELSE
CALL inc(Y1,1,w)
END IF
IF UCASE$(c$)="H" THEN
LET w=H(K) !¥¹¥Ú¡¼¥É¤ÎÎó¤Ë¤Ê¤Ã¤Æ¤¤¤ë
LET w=S(w)
ELSE
LET w=MOD(S(K),13) !¥Ï¡¼¥È¤ÎÎó¤Ë¤Ê¤Ã¤Æ¤¤¤ë
LET w=H(w)
END IF
PRINT mid$(mk$,INT(w/13)+1,1); MOD(w,13)
PRINT "----- ºÇ½é¤Î¾õÂÖ -----"
CALL ready
CALL printa(s) !¡¡¥¹¥Ú¡¼¥É
CALL printa(h) !¡¡¥Ï¡¼¥È
PRINT
!
FOR R=1 TO 12
PRINT "----- Request";R;"¤Î¾ì¹ç-----"
CALL ready
LET k=1
DO WHILE k< 13
FOR i=1 TO 12
LET j=MOD(i,2)*7+INT(i/2) !¡¡Ê¬¤±¤¿£²¤Ä¤ò½Å¤Í¤¿»þ¤Î°ÌÃÖ¡£
IF i=R THEN
LET t(j)=h(k) !¡¡¥Ï¡¼¥È¤ò¥Æ¡¼¥Ö¥ë¤Ø
LET w(k)=s(i) !¡¡¼ê¸µ(ºÇ½é¥¹¥Ú¡¼¥É)¤ò¡Ö¼Î¤Æ¡×¤Ø
LET k=k+1
ELSE
LET t(j)=s(i) !¡¡¼ê¸µ(ºÇ½é¥¹¥Ú¡¼¥É)¤ò¥Æ¡¼¥Ö¥ë¤Ø
END IF
NEXT i
MAT s=t !¡¡¥Æ¡¼¥Ö¥ë¤ò¼ê¸µ(ºÇ½é¥¹¥Ú¡¼¥É)¤Ø
LOOP
CALL printa(s) !¡¡Èæ³Ó¡¦¡¦¡¦¼ê¸µ(ºÇ½é¥¹¥Ú¡¼¥É)
CALL printa(w) !¡¡Èæ³Ó¡¦¡¦¡¦¡Ö¼Î¤Æ¡×¤Î½Å¤Ê¤ê
PRINT
NEXT R
SUB printa(a())
FOR n=1 TO 12
PRINT USING "## ":a(n);
NEXT n
PRINT "¡¡¡Ä¸ß¤¤¤Ë Index."
END SUB
SUB ready
FOR i=1 TO 12
LET s(i)=i
LET h(i)=i
NEXT i
END SUB
!Êä½õ¥ë¡¼¥Á¥ó
SUB PermPrintOut(A()) !ɽ¼¨¤¹¤ë¡¡¢¨É¸½à·Á¡Ê£²¹Ô£îÎó¤Î¹ÔÎóɽµ¤¹¤ë¡Ë
!PRINT "¨£";
!FOR i=1 TO UBOUND(A)
! PRINT USING "###": i;
!NEXT i
!PRINT " ¨¤"
!PRINT "¨¦";
FOR i=1 TO UBOUND(A)
PRINT USING "###": A(i);
NEXT i
!PRINT " ¨¥";
PRINT
END SUB
!ÃÖ´¹
SUB PermIdentity(A()) !¹±ÅùÃÖ´¹
FOR i=1 TO UBOUND(A)
LET A(i)=i
NEXT i
END SUB
SUB PermMultiply(A(),B(), AB()) !ÀÑAB¡¡¢¨AB¡âBA¡¢A(BC)=(AB)C
LET ua=UBOUND(A)
LET ub=UBOUND(B)
IF ua=ub THEN
FOR i=1 TO ua
LET AB(i)=A(B(i)) !¢¨¹çÀ®¼ÌÁü(AB)(i)=A(B(i))
NEXT i
ELSE
PRINT "¼¡¸µ¤¬°ã¤¤¤Þ¤¹¡£A=";ua;" B=";ub
STOP
END IF
END SUB
!-------------------- ¤³¤³¤Þ¤Ç¤¬¥µ¥Ö¥ë¡¼¥Á¥ó
!main
LET N=12 !¢¨2,4,10,12
!A=¨£ 1 2 3 4 ¨¤=(1 2 4 3)¡¡¢¨£±¹ÔÌܤνçÈ֤ϸÇÄê¤È¤¹¤ë
!¡¡¨¦ 2 4 1 3 ¨¥
DATA 2,4,6,8,10,12,1,3,5,7,9,11 !ÇÛÎóÊÑ¿ô¤Î¡Öꤍ»ú¤ÈÃ͡פËÂбþ¤µ¤»¤ë
!DATA 2,4,6,8,10,1,3,5,7,9 !N=10
!DATA 2,4,1,3 !N=4
!DATA 2,1 !N=2
DIM A(N)
MAT READ A
FOR i=1 TO N
PRINT USING "###": i;
NEXT i
PRINT
DIM B(N)
CALL PermIdentity(B) !½é´üÃÍ
DIM c(N)
FOR k=1 TO N !²ó¿ô
CALL PermMultiply(B,A,c) !¥·¥ã¥Ã¥Õ¥ë
PRINT "K=";k
CALL PermPrintOut(c) !²¿²ó¤«¼Â¹Ô¤¹¤ë¤È¸µ¤ËÌá¤ë
MAT B=c
NEXT k
!£±£³°Ê³°¤Î¿ô£Î¤Ë¡¢¼«Ê¬¼«¿È£Î¤ò²Ã¤¨¤Æ¿·¤·¤¤¿ô¤òºî¤ë¡£
!¤½¤Î¿ô¤¬£±£³¤è¤êÂ礤¤¤È¤¤Ï¡¢£±£³¤ò°ú¤¯¡£
DIM A(13),B(13)
FOR k=1 TO 12
LET A(k)=k
LET B(k)=0
NEXT k
FOR i=1 TO 12
FOR k=1 TO 12
LET B(k)=MOD(B(k)+A(k),13)
NEXT k
LET B(13)=13
MAT PRINT B;
NEXT i
END
2870 INPUT PROMPT "¹¥¤¤Ê»³¤òÁª¤Ö¡Ê1¡ÁK:K<=N,¤¿¤À¤·0¤Ï½ªÎ»¡Ë": x
2880
2890 DIM wlk(N)
2900 DATA 1,1,1,1,-2,1,-1,-3,4,3,2,1 !²ó¼ýÊýË¡¡¡¢¨£±¤Ê¤é±¦¤Ø£±¡¢¡Ý£²¤Ê¤éº¸¤Ø£²¤Î°Õ
2910 MAT READ wlk
2920 LET KEY1=wlk(K) !½ªÃ¼°ÌÃÖ¤òµ²±¤¹¤ë
2930
2940 DIM yy(0 TO N+1)
2950 CALL routine2_2 !³Æ»³¤«¤é²ó¼ý¤¹¤ë
!OPTION ARITHMETIC decimal_high
LET t0=TIME
DIM S(1000000) !S1,S2,¡Ä,Sn
LET S(1)=1
FOR k=2 TO 1000000
LET S(k)=S(k-1)+k !º¸ÊÕ 1+ ¡Ä +(k-1)+k ¤ÎÃÍ
NEXT k
LET c=0 !¸Ä¿ô
FOR n=1 TO 1000000
LET key=S(n)/2 !¡ÖÁ´ÂΤÎȾʬ¤ÎÃ͡פò¸«¤Ä¤±¤ë
LET L=1 !²¼¸Â
LET H=n !¾å¸Â
DO WHILE L<=H !µÕž¤·¤¿¤é½ªÎ»
LET M=INT((L+H)/2) !Ãæ±û
IF S(M)<=key THEN LET L=M+1 !¹Ê¤ê¹þ¤à
IF S(M)>=key THEN LET H=M-1
LOOP
!!!PRINT n;L;H
IF L=H+2 THEN !¸«¤Ä¤«¤Ã¤¿¤é
LET c=c+1
PRINT c;"¸ÄÌÜ"
PRINT "1 + ¡Ä +";M;"=";M+1; !º¸Êդȡá
IF M<n-1 THEN !À°·Á¤Î¤¿¤á
PRINT "+ ¡Ä +";n; !±¦ÊÕ
END IF
PRINT "¡Ê=";S(M);"¡Ë" !ÏÂ
END IF
NEXT n
PRINT "·×»»»þ´Ö=";TIME-t0
END
¡ü¡Ö£²¼¡ÊýÄø¼°¤ò²ò¤¯¡×¤ÎÊ̲ò¤È¤·¤Æ¤Î¥µ¥ó¥×¥ë
FOR k=1 TO 1000000
¡¡£î¤Ë¤Ä¤¤¤Æ¤Î£²¼¡ÊýÄø¼° n^2+n-2*(k^2+k)=0 ¤ò²ò¤¤¤ÆÀµ¤ÎÀ°¿ô²ò¤òÆÀ¤ë
NEXT k
¤³¤ì¤Ï¡¢¿ôÎó{Sk,Sk+1,¡Ä}¤ÎÃæ¤«¤é¡¢2*Sk¤òõ¤¹¤³¤È¤Ç¤¹¡£
̵¸Â¸Ä¤ÎÃæ¤òõº÷¤Ç¤¤Ê¤¤¤Î¤Ç¡¢¡Ê¼ÂºÝ¤Ï¾®¤µ¤¤½ç¤ËÀ°Î󤷤Ƥ¤¤ë¤Î¤ÇÅÓÃæ¤ÇÃæ»ß¤¹¤ë¡Ë
!OPTION ARITHMETIC decimal_high
LET t0=TIME
LET c=0 !¸Ä¿ô
FOR N=2 TO 1000000
LET S=N*(N+1)/2 !Á´Éô¤ÎÏÂ
LET a=INT(SQR(S)) !¡á¤¬Æþ¤ë²Õ½ê¤Î²ÄǽÀ
FOR k=a TO a+1
LET L=k*(k+1)/2 !º¸ÊÕ¤ÎÏÂ
IF 2*L=S THEN !2*º¸ÊÕ¡áÁ´Éô¤ÎϤʤ顢¾ò·ï¤ò¤ß¤¿¤¹
LET c=c+1
PRINT c;"¸ÄÌÜ"
PRINT "1 + ¡Ä +";k;"="; !º¸Êդȡá
IF i=N-1 THEN !À°·Á¤Î¤¿¤á
PRINT k+1;"¡Ê=";L;"¡Ë" !±¦ÊÕ¤ÈÏÂ
ELSE
PRINT k+1;"+ ¡Ä +";N;"¡Ê=";L;"¡Ë"
END IF
END IF
NEXT k
NEXT N
PRINT "·×»»»þ´Ö=";TIME-t0
END
!OPTION ARITHMETIC decimal_high
LET t0=TIME
LET a=1000000
LET n=1 !ÀèÆ¬¤«¤é
LET k=1
LET c=0 !¸Ä¿ô
DO UNTIL n>a OR k>a-1 !¤É¤Á¤é¤«¤Î¥Ç¡¼¥¿Î󤬽ª¤ï¤ë¤Þ¤Ç
LET s1=n*(n+1)/2 !¥Ç¡¼¥¿Îó¤òÆÀ¤ë
LET s2=2*k*(k+1)/2
IF s1=s2 THEN !¥Þ¡¼¥¸¤¹¤ë
LET c=c+1
PRINT c;"¸ÄÌÜ"
PRINT "1 + ¡Ä +";k;"=";k+1; !º¸Êդȡá
IF k<n-1 THEN !À°·Á¤Î¤¿¤á
PRINT "+ ¡Ä +";n; !±¦ÊÕ
END IF
PRINT "¡Ê=";s1/2;"¡Ë" !ÏÂ
LET k=k+1
LET n=n+1
ELSEIF s1>s2 THEN
LET k=k+1
ELSE
LET n=n+1
END IF
LOOP
PRINT "·×»»»þ´Ö=";TIME-t0
END
LET k=4 ! 4¹Ô
LET n=k*(k+1)/2 ! n=10
DIM a(k,k),check(n)
FOR maxn=1 TO CEIL(k/2)
FOR r=1 TO n^(n/2)
MAT check=ZER
LET a(1,maxn)=n
LET check(n)=1
FOR i=1 TO k
FOR j=1 TO k+1-i
IF NOT (i=1 AND j=maxn) THEN
DO
LET
num=INT((n-1)*RND)+1
LOOP UNTIL check(num)=0
LET a(i,j)=num
LET check(num)=1
END IF
NEXT j
NEXT i
!MAT PRINT a
CALL diff
IF p=0 THEN MAT PRINT a
LET p=0
NEXT r
NEXT maxn
SUB diff
FOR i=1 TO k-1
FOR j=1 TO k-i
IF ABS(a(i,j)-a(i,j+1))<>a(i+1,j) THEN
LET p=1
EXIT SUB
END IF
NEXT j
NEXT i
END SUB
END
DECLARE EXTERNAL SUB combi
PUBLIC NUMERIC k,n,h,pt,count
LET t0=TIME
LET k=5 ! ¹Ô¿ô
LET n=k*(k+1)/2 ! ºÇÂçÃÍ
LET h=INT(k/2) ! Ⱦʬ
LET pt=MOD(k,2) ! ´ñ¶ö
DIM nn(n-1),c(k-1)
MAT nn=ZER
LET count=0
LET j=0
CALL combi(nn,1,k-1,j,c)
PRINT TIME-t0;"ÉÃ",count;"²ó"
END
EXTERNAL SUB differ(p()) !Ãí°Õ:°ìÉô²þÎɤ·¤Þ¤·¤¿
DIM a(k,k),ck(n-1)
LET a(1,1)=n
FOR j=2 TO k
LET a(1,j)=p(j-1)
NEXT j
CALL check
FOR j=2 TO h
SWAP a(1,j-1),a(1,j)
CALL check
NEXT j
IF pt=1 AND p(1)<p(k-1) THEN ! n¤¬Ãæ±û¤Î¤È¤
SWAP a(1,h),a(1,h+1)
CALL check
END IF
SUB check
LET count=count+1
MAT ck=ZER
FOR r=1 TO k-1
LET ck(p(r))=1
NEXT r
FOR ii=1 TO k-1
FOR jj=1 TO k-ii
LET d=ABS(a(ii,jj)-a(ii,jj+1))
IF ck(d)=1 THEN EXIT SUB ! ¿ôÃͽÅÊ£
LET ck(d)=1
LET a(ii+1,jj)=d
NEXT jj
NEXT ii
MAT PRINT a; ! ²ò¤¢¤ê
END SUB
END SUB
REM ½½¿ÊBASICźÉÕ"\BASICw32\SAMPLE\COMBINAT.BAS"¤è¤ê
REM 1¡Án-1¤Î½¸¹ç¤«¤ér¸Ä¤òÁª¤ÖÁȹ礻¤òÀ¸À®¤¹¤ë¡£
EXTERNAL SUB combi(nn(),kk,r,j,c())
DECLARE EXTERNAL SUB permu
! kk°Ê¹ß¤Î¿ô¤«¤ér¸Ä¤òÁªÂò¤¹¤ë
IF r=0 THEN
FOR i=1 TO n-1
IF nn(i)=1 THEN
LET j=j+1
LET c(j)=i
END IF
NEXT i
!MAT PRINT c;
CALL permu(c,1)
LET j=0
ELSE
FOR i=kk TO n-r
LET nn(i)=1
CALL combi(nn,i+1,r-1,j,c)
LET nn(i)=0
NEXT i
END IF
END SUB
REM ½½¿ÊBASICźÉÕ"\BASICw32\SAMPLE\PERMUTAT.BAS"¤è¤ê
REM (k-1)¸Ä¤Î¿ôÃͤνçÎó¤ò¼½ñ¼°½ç½ø¤ÇÀ¸À®¤¹¤ë¡£
EXTERNAL SUB permu(p(),r)
DECLARE EXTERNAL SUB differ
IF r=k-1 THEN
!MAT PRINT p;
CALL differ(p)
ELSE
FOR i=r TO k-1
LET t=p(i)
FOR j=i-1 TO r STEP -1
LET p(j+1)=p(j)
NEXT j
LET p(r)=t
CALL permu(p,r+1)
LET t=p(r)
FOR j=r TO i-1
LET p(j)=p(j+1)
NEXT j
LET p(i)=t
NEXT i
END IF
END SUB
OPTION CHARACTER byte
SET TEXT BACKGROUND "opaque"
SET TEXT font"",14
OPTION BASE 0
DIM wb(8,8)
!
LET lb$=REPEAT$( CHR$(0),10000*8*8) ! N=1¡Á7: 1,1,1,4,56,9408,16942080
LET N= 6 ! 2,3,4,5,6
LET cp= 1000 ! ¥«¥¦¥ó¥¿¡¼¤Îɽ¼¨´Ö³Ö(1~20000)¡¢¾®¤µ¤¤¤È®ÅÙÄã²¼¡£Â礤¤¤ÈÃæ»ß¤¬º¤Æñ¡£
!
CALL main
SUB makelb(x,y)
local element
FOR element=0 TO N-1
FOR i=0 TO x-1
IF element=wb(y,i) THEN EXIT FOR ! break;
NEXT i
IF i>x-1 THEN
FOR i=0 TO y-1
IF element=wb(i,x) THEN EXIT FOR ! break;
NEXT i
IF i>y-1 THEN
LET wb(y,x)=element
IF y=N-1 AND x=N-1 THEN
!----memcpy(lb[lbs++], wb, sizeof(wb));
LET w=1+64*lbs
FOR i=0 TO N-1
FOR j=0 TO N-1
LET lb$(w+j:w+j)=CHR$(wb(i,j))
NEXT j
LET w=w+8
NEXT i
!--------¥â¥Ë¥¿¡¼
IF MOD(lbs,1000)=0 THEN PRINT "ºîÀ®Ãæ¡£N=";N;"lbs=";lbs
!--------
LET lbs=lbs+1
EXIT SUB ! return;
END IF
IF
y=N-1 THEN CALL makelb(x+1,1) ELSE CALL makelb((x),y+1)
END IF
END IF
NEXT element
END SUB
Á°²ó¡¡NO95 NO¤Î¸æ²óÅúÍÆñ¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£»³Ã椵¤ó¤òÃæ»³¤µ¤ó¤È´Ö°ã¤¨¤ÆÅê¹Æ¤·¤Þ¤·¤¿¡£¼ºÎé¤ò¸æµö¤·¤¯¤À¤µ¤¤¡£
¤½¤Î¸å¤À¤¤¤Ö10¿ÊBASIC¤ò¿Ê¤á¤Æ¤Þ¤¹¤¬¡¢²¼µ¤ÎÉÔ¶ñ¹ç¤Ç¥¹¥È¥Ã¥×¤·¤Æ¤Þ¤¹¡£
MAT T=INV(A)¡¡¤¬½ÐÍè¤Ê¤¤¤Î¤Ç¤¹¡£
OPTION ARITHMETIC COMPLEX
LET j=SQR(-1)
LET R1=5000
LET R2=5000
LET C1=0.1*10^( -6 )
LET C2=0.1*10^( -6 )
LET F=100
LET SZ=0.001
LET NP=4
LET ZC1=1/(2*PI*F*C1)
LET ZC2=1/(2*PI*F*C2)
OPTION BASE 1
PRINT "ZCI=";ZC1
DIM A(NP,NP),B(NP,NP),T(NP,NP),E1(NP)
LET A(1,2)=1/R1+SZ*j
LET A(2,3)=1/R2+SZ*j
LET A(2,4)=SZ+1/ZC1*j
LET A(3,4)=SZ+1/ZC2*j
MAT PRINT A
LET E1(1)=1
LET E1(4)=0
PRINT"²¼µ¤Î¤´¤È¤¯MAT PRINT E1¤È¤ä¤ë¤È²£¤Ë°ìʸ»ú¤Ë¤Ê¤ë¡£"
MAT PRINT E1
PRINT"²¼µ¤Î¤´¤È¤¯MAT PRINT USING REPEAT$RI¤Ç½Ä¤Ë°ìʸ»úʤÓÎÉ
¹¥¡£"
MAT PRINT USING REPEAT$(" #.#### ",1):E1
MAT T=INV(A)
> ¤Þ¤¿¡¢°ìÎó¤ÎE(5)¤Ê¤É¤òºî¤ê¡¢PRINT E ¡¡¤ò¤ä¤ë¤È¡¢²£°ìÎó¤Ëɽ¼¨¤·¤Þ¤¹¡£
> »Íü»ÒÌ֤Ρ¡A*E Åù¤ÏÂç¾æÉפǤ·¤ç¤¦¤«¡£½Ä¤ËÊѹ¹¤·¤ÆT=TRAN(E) ¤½¤·¤ÆA*T ¤Ç¤·¤ç¤¦¤«¡£
DIM A(3,3)
DIM X(3),B(3)
MAT B=A*X !(3¹Ô,3Îó)(3¹Ô,1Îó)=(3¹Ô,1Îó)¤È¤·¤Æ·×»»¤µ¤ì¤ë
MAT PRINT B !²£¤Ø
MAT B=X*A !(1¹Ô,3Îó)(3¹Ô,3Îó)=(1¹Ô,3Îó)¤È¤·¤Æ·×»»¤µ¤ì¤ë
MAT PRINT B !²£¤Ø
END
¤³¤Î¾ì¹ç¡¢X,B¤Ï¥Ù¥¯¥È¥ë°·¤¤¤Ë¤Ê¤ê¤Þ¤¹¡£
X,B¤ò¹ÔÎó¤È¤·¤Æ°·¤¦¾ì¹ç¤Ï¡¢¡ÊX,B¤ËÂФ·¤ÆTRN¤òŬÍѤ¹¤ë¾ì¹ç¡Ë
¹Ô¤Þ¤¿¤ÏÎó¤Î¤ß¤Î¹ÔÎó¤Ï¡¢¤¿¤È¤¨¤Ð
¡¡£³¹Ô£±Îó¤Ê¤é DIM B(3,1)
¡¡£±¹Ô£³Îó¤Ê¤é DIM B(1,3)
¤È¤·¤Æ¤¯¤À¤µ¤¤¡£
MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.40, 0.60
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11, 0.11, 0.11
SET WINDOW -1/4,1/4, -1/4,1/4
!----------
LET N=3
DO
LET s=MOD(s,36)+1
LET s2=INT((s-1)/4)+1
SET DRAW mode hidden
CLEAR
DRAW D4(N) WITH SHIFT(-0.5,-0.5/SQR(3))*ROTATE(PI*2/36*s+PI)
SET DRAW mode explicit
WAIT DELAY 0.2
LOOP
!------
PICTURE D4(k)
IF 0< k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) !¡¡¾å
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) !¡¡Ãæ
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) !¡¡º¸
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) !¡¡±¦
ELSE
DRAW Set01
END IF
END PICTURE
!------ ¼ï¤Î»°³Ñ¿Þ
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 5 !2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s2),py(s2)) ! ¾þ¤ê£±
SET AREA COLOR 6 !3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s2+1),py(s2+1)) ! ¾þ¤ê£²
SET AREA COLOR 7 !4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s2+2),py(s2+2)) ! ¾þ¤ê£³
SET AREA COLOR 1
DRAW disk WITH SCALE(0.1)*SHIFT(px(s2+3),py(s2+3)) ! ¾þ¤ê£´
END PICTURE
SET TEXT FONT "£Í£Ó ÌÀÄ«",12
SET TEXT BACKGROUND "OPAQUE"
SET POINT STYLE 1
!----------------
LET t$="¥¢¥ó¥â¥Ê¥¤¥È"
LET N=101
LET xm=-0.63
LET ym=0.5
LET h=1.5
RANDOMIZE 19650218
SET WINDOW xm-h,xm+h, ym-h,ym+h
PLOT TEXT,AT xm+h*0.1,ym+h*0.85:t$& " N="& USING$("###",N)
SET POINT COLOR 44
CALL fa(N, 0.4, 0.2)
beep
!----------------
LET t$="¥·¥À¤ÎÍÕ"
LET N=19
LET xm=0.32
LET ym=0.5
LET h=0.6
RANDOMIZE 19650218
SET WINDOW xm-h,xm+h, ym-h,ym+h
DRAW axes
PLOT TEXT,AT xm+h*0.1,ym+h*0.7:t$& " N="& USING$("###",N)
PLOT TEXT,AT xm-h*0.75, ym+h*0.85:"¤·¤Ð¤é¤¯¸æÂÔ¤Á²¼¤µ¤¤¡£"
SET POINT COLOR 10
CALL fs(N, 0,0)
CALL fs(N, 0,0)
beep
PLOT TEXT,AT xm-h*0.75, ym+h*0.85:"¡¡ÉÁ²è¤Î½ªÎ»¡¡¡¡¡¡¡¡¡¡"
!------------------------------------------------------------
!¡¡Ê£¿ô¤Î½Ì¾®¥¢¥Õ¥¡¥¤¥óÊÑ´¹ (¥¢¥ó¥â¥Ê¥¤¥È)
DEF A1x(x,y)=-0.289993*x-0.001347*y+0.593333
DEF A1y(x,y)= 0.001986*x-0.196662*y-0.32 !¡¡p1=0.06124
DEF A2x(x,y)=-0.073058*x-0.024834*y+0.793333
DEF A2y(x,y)=-0.006353*x+0.285589*y-0.056667 !¡¡p2=0.022236
DEF A3x(x,y)= 0.939186*x-0.218787*y-0.046667
DEF A3y(x,y)= 0.214337*x+0.958685*y+0.01 !¡¡p3=0.916524
!------------------------------------------------------------
SUB fa(k, x,y)
IF 0< k THEN
CALL fa(k-1, A3x(x,y),A3y(x,y))
IF RND< 0.0668176 THEN CALL fa(k-1, A1x(x,y),A1y(x,y))
IF RND< 0.024261 THEN CALL fa(k-1, A2x(x,y),A2y(x,y))
END IF
PLOT POINTS: x,y
END SUB
!------------------------------------------------------------
! Ê£¿ô¤Î½Ì¾®¥¢¥Õ¥¡¥¤¥óÊÑ´¹ (¥·¥À¤ÎÍÕ)
DEF W1x(x,y)= 0.836*x+0.044*y
DEF W1y(x,y)=-0.044*x+0.836*y+0.169 ! p1=0.4
DEF W2x(x,y)=-0.141*x+0.302*y
DEF W2y(x,y)= 0.302*x+0.141*y+0.127 ! p2=0.2
DEF W3x(x,y)= 0.141*x-0.302*y
DEF W3y(x,y)= 0.302*x+0.141*y+0.169 ! p3=0.2
DEF W4x(x,y)= 0
DEF W4y(x,y)= 0.175337*y ! p4=0.2
!------------------------------------------------------------
!³ÎΨŪ¥×¥í¥Ã¥È(p1~p4)¤Ï¡¢ÊÑ·Á¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
SUB fs(k, x,y)
IF 0< k THEN
CALL fs(k-1, W1x(x,y),W1y(x,y))
IF RND< 0.3 THEN CALL fs(k-1, W2x(x,y),W2y(x,y))
IF RND< 0.3 THEN CALL fs(k-1, W3x(x,y),W3y(x,y))
IF RND< 0.3 THEN CALL fs(k-1, W4x(x,y),W4y(x,y))
END IF
PLOT POINTS: x,y
END SUB
!£²½Å¿¶»ÒChaos
LET g= 9.8 !m/s^2
LET m1=0.1 !kg
LET m2=0.1 !kg
LET L1= 5 !m
LET L2= 5 !m
!
LET dt=0.05 !sec. ±é»»¥Ô¥Ã¥Á¡£
!
LET ¦Ì2=m2/(m1+m2)
LET L21=L2/L1
DEF ss1(w2,¦È1,¦È2)=-g/L1*SIN(¦È1) -¦Ì2*L21*w2^2*SIN(¦È1-¦È2)
DEF ss2(w1,¦È1,¦È2)=-g/L2*SIN(¦È2) +w1^2*SIN(¦È1-¦È2)/L21
DEF D(¦È1,¦È2)=1-¦Ì2*COS(¦È1-¦È2)^2
DEF ¦Á1(w1,w2,¦È1,¦È2)=( ss1(w2,¦È1,¦È2) -L21*¦Ì2*COS(¦È1-¦È2)*ss2(w1,¦È1,¦È2) )/D(¦È1,¦È2)
DEF ¦Á2(w1,w2,¦È1,¦È2)=(-ss1(w2,¦È1,¦È2)*COS(¦È1-¦È2)/L21 +ss2(w1,¦È1,¦È2) )/D(¦È1,¦È2)
SUB RK(¦È1,¦È2,w1,w2)
LET w11=w1
LET w12=w2
LET ¦Á11=¦Á1(w1,w2,¦È1,¦È2)
LET ¦Á12=¦Á2(w1,w2,¦È1,¦È2)
!
LET w21=w1+¦Á11*dt/2
LET w22=w2+¦Á12*dt/2
LET ¦Á21=¦Á1(w21,w22,¦È1+w11*dt/2,¦È2+w12*dt/2)
LET ¦Á22=¦Á2(w21,w22,¦È1+w11*dt/2,¦È2+w12*dt/2)
!
LET w31=w1+¦Á21*dt/2
LET w32=w2+¦Á22*dt/2
LET ¦Á31=¦Á1(w31,w32,¦È1+w21*dt/2,¦È2+w22*dt/2)
LET ¦Á32=¦Á2(w31,w32,¦È1+w21*dt/2,¦È2+w22*dt/2)
!
LET w41=w1+¦Á31*dt
LET w42=w2+¦Á32*dt
LET ¦Á41=¦Á1(w41,w42,¦È1+w31*dt,¦È2+w32*dt)
LET ¦Á42=¦Á2(w41,w42,¦È1+w31*dt,¦È2+w32*dt)
!
LET ¦È1=¦È1+(w11+2*w21+2*w31+w41)*dt/6
LET ¦È2=¦È2+(w12+2*w22+2*w32+w42)*dt/6
LET w1=w1+(¦Á11+2*¦Á21+2*¦Á31+¦Á41)*dt/6
LET w2=w2+(¦Á12+2*¦Á22+2*¦Á32+¦Á42)*dt/6
END SUB
!----init.
LET a_1=PI*0.8 !½é´ü³ÑÅÙ£±
LET a_2=PI*0.9 !¡¡¡¡¡Á¡¡£²
LET a_3=0 !¡¡½é´ü³Ñ®ÅÙ£±
LET a_4=0 !¡¡¡¡¡¡¡¡¡Á¡¡£²
!
LET b_1=-a_1+0.001
LET b_2=-a_2
LET b_3=0
LET b_4=0
!
LET c_1=a_1
LET c_2=a_2+0.002
LET c_3=0
LET c_4=0
!
LET d_1=-a_1
LET d_2=-a_2+0.003
LET d_3=0
LET d_4=0
!
!----run
LET w=14
SET WINDOW -w,w,-w,w
SET LINE width 2 !4
SET LINE COLOR 2 !43
LET r1=SQR(m1)
LET r2=SQR(m2)
LET t0=TIME
DO
LET t=TIME
IF dt=< ABS(t-t0) THEN
SET DRAW mode hidden
CLEAR
PLOT TEXT,AT 0.25*w,0.9*w:"¥Þ¥¦¥¹ ±¦¥Ü¥¿¥ó¤Ç¡¢½ªÎ»¡£"
PLOT TEXT,AT -0.98*w,0.93*w,USING"±é»»¥Ô¥Ã¥Á=#.### ÉÃ":dt
PLOT TEXT,AT -0.98*w,0.87*w,USING"ÉÁ²è¥Ô¥Ã¥Á=#.### ÉÃ":t-t0
LET t0=t
SET AREA COLOR 15
DRAW disk WITH SCALE(3.86,4.67)
SET AREA COLOR 1
DRAW PDL1X2(a_1,a_2) WITH ROTATE(a_1)*SHIFT(-3,3)
DRAW PDL1X2(b_1,b_2) WITH ROTATE(b_1)*SHIFT(3,3)
DRAW PDL1X2(c_1,c_2) WITH ROTATE(c_1)*SHIFT(-3,-3)
DRAW PDL1X2(d_1,d_2) WITH ROTATE(d_1)*SHIFT(3,-3)
CALL RK(a_1,a_2,a_3,a_4)
CALL RK(b_1,b_2,b_3,b_4)
CALL RK(c_1,c_2,c_3,c_4)
CALL RK(d_1,d_2,d_3,d_4)
SET DRAW mode explicit
END IF
WAIT DELAY 0 !¥Î¡¼¥È¥Ñ¥½¥³¥óÅù¤Î¾ÃÈñÅÅÎϤò²¡¤¨¤ë¡£
MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb=1
PICTURE PDL1X2(¦È1,¦È2)
DRAW circle WITH SCALE(0.3)
DRAW PDLM(L1,r1)
DRAW PDLM(L2,r2) WITH ROTATE(¦È2-¦È1)*SHIFT(0,-L1)
END PICTURE
PICTURE PDLM(L,r)
PLOT LINES: 0,0;0,-L
DRAW disk WITH SCALE(r)*SHIFT(0,-L)
END PICTURE
!SET bitmap SIZE 600,600 !²èÌ̤òÂ礤¯¤¹¤ë
SET WINDOW -0.5,6.5, -50,5 !ɽ¼¨Îΰè
DRAW grid(1,5) !º¸Ã¼¤ÎÌÜÀ¹¤ê
FOR f=1 TO 6 !£ø¼´¤¬Âпô
PLOT TEXT ,AT f-0.3,-0.15: mid$("10 100 1k 10k 100k1M ",4*(f-1)+1,4)
NEXT f
FOR f=10 TO 100000 STEP 100 !¼þÇÈ¿ô[Hz]
CALL routine
LET vv=vo(1)/vi(1)
PLOT LINES: LOG10(f),20*LOG10(ABS(vv)); !ÍøÆÀ[dB]
NEXT f
PLOT LINES
SET TEXT COLOR 2
FOR i=5 TO -45 STEP -5 !±¦Ã¼¤Î½Ä¼´ÌÜÀ¹¤ê
PLOT TEXT ,AT 6,i: STR$(i*2)&"¡ë"
NEXT i
SET LINE COLOR 2
FOR f=10 TO 100000 STEP 100 !¼þÇÈ¿ô[Hz]
CALL routine
LET vv=vo(1)/vi(1)
PLOT LINES: LOG10(f),DEG(ATN(Im(vv)/Re(vv)))/2; !°ÌÁê¦È¡¡¢¨1/2ÇÜ
NEXT f
PLOT LINES
END
!ľÀÜË¡¤Ë¤è¤ë¹ÔÎó¤Î¸ÇÍÃͤòµá¤á¤ë
OPTION ARITHMETIC COMPLEX
LET i=SQR(-1) !µõ¿ôñ°Ì
LET cEps=1e-8 !¸íº¹¡¡¢¨Ã±ÀºÅÙ
LET N=3 !N¼¡ÀµÊý¹ÔÎó
FUNCTION tr(A(,)) !¹ÔÎóA¤Î¥È¥ì¡¼¥¹
LET t=0
FOR j=1 TO N
LET t=t+A(j,j)
NEXT j
LET tr=t
END FUNCTION
DIM c(N) !¿¹à¼° X^N+c(1)*X^(N-1)+c(2)*X^(N-2)+ ¡Ä +c(N-1)*X+c(N) ¤Î·¸¿ô
SUB DKA_00(A(),Xr()) !DKAË¡¡ÊDurand Kerner Aberth¡Ë
LET r=1 !½é´üÃͤò²¾Äꤹ¤ë
FOR j=2 TO N
LET rn=ABS(A(j))^(1/j)
if r<rn then LET r=rn
NEXT j
FOR j=1 TO N !Ⱦ·Âr¤Î±ß¤ËÅù´Ö³Ö¤ËÇÛÃÖ¤¹¤ë
LET Xr(j)=-A(1)/N+r*EXP( 2*PI*i/N *(j-3/4) ) !¥¢¡¼¥Ð¥¹¤Î½é´üÃÍ
NEXT j
FOR m=0 TO 100 !È¿Éü¡¡¢¨Ä´À°Í×
LET mfx=0
LET maj=0
FOR j=1 TO N
LET Xk=1
LET fx=1
FOR w=1 TO N
LET fx=fx*Xr(j)+A(w)
IF w<>j THEN LET Xk=Xk*(Xr(j)-Xr(w))
NEXT w
LET Xr(j)=Xr(j)-fx/Xk
IF mfx<ABS(fx) THEN LET mfx=ABS(fx)
IF maj<ABS(fx/Xk) THEN LET maj=ABS(fx/Xk)
NEXT j
IF mfx<cEps AND maj<cEps THEN EXIT FOR !¼ý«¤·¤¿¤é
NEXT m
END SUB
!-------------------- ¤³¤³¤Þ¤Ç¤¬¥µ¥Ö¥ë¡¼¥Á¥ó
DIM A(N,N) !¹ÔÎóA
!DATA 1,0,0 !¦Ë=1¡Ê£³½Åº¬¡Ë
!DATA 0,1,1
!DATA 0,0,1
!DATA 0,1,1 !¦Ë=2,-1¡Ê½Åº¬¡Ë
!DATA 1,0,1
!DATA 1,1,0
!DATA 3,0,0 !¦Ë=3,¡Þi
!DATA 0,2,-5
!DATA 0,1,-2
DATA 2,1,-1 !¦Ë=3,2,1
DATA 0,3,0
DATA 0,2,1
MAT READ A
MAT PRINT A;
!n¼¡ÀµÊý¹ÔÎóA¤Î¸ÇÍ¿¹à¼° det(tE-A)=t^n+c1*t^(n-1)+ ¡Ä + cn ¤òµá¤á¤ë¡£
DIM X(N,N),cE(N,N)
MAT X=IDN !frameˡ
FOR k=1 TO N
MAT X=A*X
LET c(k)=-tr(X)/k
MAT cE=(c(k))*IDN
MAT X=X+cE
NEXT k
MAT PRINT c;
!¥Ë¥å¡¼¥È¥óË¡¤Ê¤É¤Ç²ò¤¯¡£²ò¤¬¸ÇÍÃͤˤʤ롣
DIM lmd(N)
CALL DKA_00(c,lmd)
FOR k=1 TO N
PRINT "¸ÇÍÃÍ=";lmd(k)
NEXT k
!¢¨N¸Äµá¤Þ¤Ã¤¿¾ì¹ç¤Î¸¡»»
LET s=1
FOR k=1 TO N
LET s=s*lmd(k)
NEXT k
PRINT s, DET(A) !¸ÇÍÃͤÎÀÑ=¹ÔÎó¤Î¹ÔÎó¼°¡¡¦°¦Ëi=|A|
LET s=0
FOR k=1 TO N
LET s=s+lmd(k)
NEXT k
PRINT s, tr(A) !¸ÇÍÃͤÎÏÂ=¹ÔÎó¤Î¥È¥ì¡¼¥¹¡¡¦²¦Ëi=trA
END
LET N=4 !N¹ÔNÎó
LET a=-2 !Àޤꤿ¤¿¤à°ÌÃÖ(a,b)
LET b=2
DATA 0,1,1,0 !£Ñ¥Ñ¥¿¡¼¥ó¡¡¢¨1:ɽ¡¢0:΢
DATA 0,1,0,1
DATA 1,0,1,0
DATA 1,1,0,0
DIM M(N,N)
MAT READ M
FOR y=1 TO N !¹Ô
FOR x=1 TO N !Îó
IF MOD(ABS(x-a)+ABS(y-b),2)=1 THEN !³Ê»Ò¾å¤Ç¤Îµ÷Î¥¡¡¢¨1:ȿž¡¢0:¤½¤Î¤Þ¤Þ
LET M(y,x)=1-M(y,x) !ÏÀÍýÈÝÄê
END IF
PRINT M(y,x); !¡Ö£°¤¬£´¤Ä¡×¤Þ¤¿¤Ï¡Ö£±¤¬£´¤Ä¡×¤Î°ÌÃÖ
NEXT x
PRINT
NEXT y
END
REM ½½¿ÊBASICźÉÕ"\BASICw32\SAMPLE\COMBINAT.BAS"¤è¤ê
REM 1¡Án¤Î½¸¹ç¤«¤ér¸Ä¤òÁª¤ÖÁȹ礻¤òÀ¸À®¤¹¤ë¡£ÇÛÎócom(,)
EXTERNAL SUB combination(a(),n,k,r,com(,),count)
! k°Ê¹ß¤Î¿ô¤«¤ér¸Ä¤òÁªÂò¤¹¤ë
IF r=0 THEN
LET count=count+1
LET ri=1
FOR i=1 TO n
IF a(i)=1 THEN
LET com(count,ri)=i
LET ri=ri+1
END IF
NEXT i
ELSE
FOR i=k TO n-r+1
LET a(i)=1
CALL combination(a,n,i+1,r-1,com,count)
LET a(i)=0
NEXT i
END IF
END SUB
!Âǽç¹Í»¡¤Î¤¿¤á¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó
DATA 0.2, 0.2, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1
!DATA 0.1, 0.2, 0.2, 0.3, 0.2, 0.1, 0.3, 0.2, 0.3
!DATA 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2
DIM D(9) !£¹¿Íʬ¤ÎÂÇΨ
MAT READ D
RANDOMIZE
LET N=5000 !»î¹ç¿ô
FOR x=1 TO N
DIM SM(N) !Áí¹çÆÀÅÀ
LET P=1 !Âǽç
FOR w=1 TO 9 !£¹²ó¤Þ¤Ç
LET B=0 !ÎݤξõÂÖ
LET S1=0 !ÆÀÅÀ
LET O=0
DO UNTIL O=3 !£³¥¢¥¦¥È¤Þ¤Ç
!PRINT P;"ÈÖÂǼԡ§";
IF RND<D(P) THEN !¥Ò¥Ã¥È¤Ê¤é
LET t=INT(RND*10)+1 !ĹÂÇΨ¤Ê¤É¡¡¢¨£±¡Á10
SELECT CASE t
CASE 1,2,3,4
LET v=1
CASE 5,6,7
LET v=2
CASE 8,9
LET v=3
CASE ELSE
LET v=4
END SELECT
!PRINT v;"ÎÝÂÇ", !£±¡Á£´
LET B=B*10+1 !vÎÝÂǤÇÁö¼Ô¤òÁ÷¤ë
LET S1=S1+INT(B/10^3)
LET B=MOD(B,10^3)
FOR i=0 TO v-2
LET B=B*10
LET S1=S1+INT(B/10^3)
LET B=MOD(B,10^3)
NEXT i
ELSE
LET O=O+1
!PRINT "¥¢¥¦¥È",
END IF
!PRINT USING "# %%%": S1,B !ÎݤξõÂÖ
LET P=P+1 !¼¡¤Ø
IF P>9 THEN LET P=1
LOOP
!PRINT w;"²ó";S1;"ÅÀ"
!PRINT
LET SM(w)=SM(w)+S1
NEXT w
NEXT x
LET S=0 !ÆÀÅÀ¤ÎʬÉÛ
FOR w=1 TO 9
PRINT w;"²ó";SM(w)/N;"ÅÀ"
LET S=S+SM(w)
NEXT w
PRINT "Áí¹çÆÀÅÀ=";S/N
END
DECLARE EXTERNAL SUB perm
PUBLIC NUMERIC player,games,rank,total_point,worst_point
PUBLIC NUMERIC ave(9),best_order(100,9),best_point(100)
PRINT TIME$
LET t=TIME
LET player=9 ! 9!=362880Ä̤ê
LET games=1000 ! »î¹ç¿ô
LET rank=100 ! ¥é¥ó¥¯
MAT READ ave
DATA .460,.420,.380,.340,.300,.260,.220,.180,.140
!DATA .380,.360,.340,.320,.300,.280,.260,.240,.220
DIM a(player)
FOR i=1 TO player
LET a(i)=i
NEXT i
MAT best_order=ZER
MAT best_point=ZER
LET total_point=0
LET worst_point=10*games
CALL perm(a,1)
FOR i=1 TO rank
PRINT USING "No## Âǽç" : i;
FOR j=1 TO player
PRINT best_order(i,j);
NEXT j
PRINT USING " ´üÂÔÃÍ-%.### ÅÀ":best_point(i)/games
NEXT i
PRINT "ºÇÄã´üÂÔÃÍ =";worst_point/games;"ÅÀ"
PRINT "Ê¿¶Ñ =";total_point/(games*FACT(player));"ÅÀ"
PRINT TIME-t;"sec"
END
EXTERNAL SUB simulation(order())
LET sum_point=0
FOR i=1 TO games
LET at_bat=0
FOR inning=1 TO 9 ! 9²ó
LET out_count=0
LET hit=0
DO
IF ave(order(MOD(at_bat,player)+1))>RND THEN
LET hit=hit+1
IF hit>=3 THEN LET sum_point=sum_point+1
ELSE
LET out_count=out_count+1
END IF
LET at_bat=at_bat+1
LOOP UNTIL out_count=3
NEXT inning
NEXT i
LET total_point=total_point+sum_point
IF sum_point>best_point(rank) THEN ! ¥é¥ó¥¯ÉÕ¤±
LET best_point(rank)=sum_point
FOR j=1 TO player
LET best_order(rank,j)=order(j)
NEXT j
FOR i=rank TO 2 STEP -1
IF best_point(i)>best_point(i-1) THEN
SWAP best_point(i),best_point(i-1)
FOR j=1 TO player
SWAP best_order(i,j),best_order(i-1,j)
NEXT j
ELSE
EXIT SUB
END IF
NEXT i
ELSEIF sum_point<worst_point THEN
LET worst_point=sum_point
END IF
END SUB
REM ½½¿ÊBASICźÉÕ"\BASICw32\SAMPLE\PERMUTAT.BAS"¤è¤ê
REM 1¡Án¤Î½çÎó¤ò¼½ñ¼°½ç½ø¤ÇÀ¸À®¤¹¤ë¡£
EXTERNAL SUB perm(a(),n)
DECLARE EXTERNAL SUB simulation
IF n=player THEN
CALL simulation(a)
ELSE
FOR i=n TO player
LET t=a(i)
FOR j=i-1 TO n STEP -1
LET a(j+1)=a(j)
NEXT j
LET a(n)=t
CALL perm(a,n+1)
LET t=a(n)
FOR j=n TO i-1
LET a(j)=a(j+1)
NEXT j
LET a(i)=t
NEXT i
END IF
END SUB
! euler function
!------------------
INPUT PROMPT "n=":M
LET Mw=M
LET Phi=1
DO
LET P=prmdiv(Mw)
LET Phi=Phi*(P-1)
LET Mw=INT(Mw/P)
DO WHILE MOD(Mw,P)=0
LET Phi=Phi*P
LET Mw=INT(Mw/P)
LOOP
LOOP UNTIL Mw=1
PRINT Phi
FUNCTION prmdiv(Mw) !£±¡ã¤ÎºÇ¾®¤ÎÌó¿ô
FOR i=2 TO Mw
IF MOD(Mw,i)=0 THEN EXIT FOR
NEXT i
LET prmdiv=i
END FUNCTION
FUNCTION prmdiv(Mw) !£±¡ã¤ÎºÇ¾®¤ÎÌó¿ô
IF MOD(Mw,2)=0 THEN
LET prmdiv=2
EXIT FUNCTION
ELSEIF MOD(Mw,3)=0 THEN
LET prmdiv=3
EXIT FUNCTION
END IF
FOR i=5 TO SQR(Mw) STEP 6
IF MOD(Mw,i)=0 THEN
LET prmdiv=i
EXIT FUNCTION
ELSEIF MOD(Mw,i+2)=0 THEN
LET prmdiv=i+2
EXIT FUNCTION
END IF
NEXT i
LET prmdiv=Mw
END FUNCTION
!¤Ù¤¾èË¡¤Ë¤è¤ë¹ÔÎó¤Î¸ÇÍÃͤȸÇÍ¥Ù¥¯¥È¥ë¤òµá¤á¤ë
!¢¨¸ÇÍÃͤ¬£°¡¢½ÅÊ£¤¹¤ë¾ì¹ç¤ÏŬÍѤǤ¤Ê¤¤¡£
!¢¨¼Â¿ô¤Î¸ÇÍÃͤΤߡ£µõ¿ô¤ò´Þ¤à²ò¤ÏÆÀ¤é¤ì¤Ê¤¤¡£
!Ax=¦ËIx¡¢¦Ë:¸ÇÍÃÍ¡¢x:¸ÇÍ¥Ù¥¯¥È¥ë
LET N=3 !N¼¡ÀµÊý¹ÔÎó
DATA 2,1,-1 !¦Ë=3,2,1
DATA 0,3,0
DATA 0,2,1
!DATA 0,1,1 !¦Ë=2,1,0
!DATA -4,4,2
!DATA 4,-3,-1
!DATA 1,0,0 !¦Ë=1¡Ê£³½Åº¬¡Ë
!DATA 0,1,1
!DATA 0,0,1
DIM A(N,N) !¹ÔÎóA
MAT READ A
MAT PRINT A;
LET cEps=1e-6 !¸íº¹¡¡¢¨Ä´À°Íס¢Ã±ÀºÅÙ
DIM u(N) !¸ÇÍ¥Ù¥¯¥È¥ë
DIM AA(N,N) !ºî¶ÈÍÑ
MAT AA=A
FOR s=1 TO N !sÈÖÌÜ
CALL EigenPower(N,AA, lambda,u)
PRINT "¸ÇÍÃÍ=";lambda
PRINT "¸ÇÍ¥Ù¥¯¥È¥ë"
MAT PRINT u;
FOR i=1 TO N !»Äº¹¹ÔÎó¤òµá¤á¤Æ¡¢¼¡¤Ø
FOR j=1 TO N
LET AA(i,j)=AA(i,j)-lambda*u(i)*u(j)
NEXT j
NEXT i
NEXT s
DEF norm(v())=SQR(DOT(v,v)) !¥Î¥ë¥à
SUB EigenPower(N,A(,), lambda,u()) !¸ÇÍÃÍ¡ÊÀäÂÐÃͺÇÂç¡Ë¡¢¸ÇÍ¥Ù¥¯¥È¥ë¤òµá¤á¤ë
DIM u0(100),u2(100) !¢¨ºÇÂç100¼¡
MAT u=CON !½é´üÃÍ¡¡¢¨¥Î¥ë¥à¤¬£±
MAT u=(1/norm(u))*u
LET cMax=100
FOR i=1 TO cMax !ºÇÂç²ó¿ô¤Þ¤Ç·«¤êÊÖ¤¹
MAT u0=u !ľÁ°¤Îu
MAT u=A*u0
WHEN EXCEPTION IN
MAT u=(1/norm(u))*u !Àµµ¬²½¤¹¤ë
USE
PRINT "£°¥Ù¥¯¥È¥ë¤Ë¤Ê¤ê¤Þ¤·¤¿¡£"
STOP
END WHEN
MAT u2=u-u0 !¼ý«¤·¤¿¤«³Îǧ¤¹¤ë
IF norm(u2)<cEps THEN EXIT FOR
MAT u2=u+u0
IF norm(u2)<cEps THEN EXIT FOR
NEXT i
IF i>cMax THEN
PRINT "¼ý«¤·¤Þ¤»¤ó¡£"
STOP
END IF
MAT u2=A*u
LET lambda=DOT(u2,u)/DOT(u,u) !¸ÇÍÃÍ
END SUB
END
!Âǽç¹Í»¡¤Î¤¿¤á¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó
DATA 0.2, 0.2, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1
!DATA 0.1, 0.2, 0.2, 0.3, 0.2, 0.1, 0.3, 0.2, 0.3
!DATA 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2
DIM D(9) !£¹¿Íʬ¤ÎÂÇΨ
MAT READ D
RANDOMIZE
LET N=10 !»î¹ç¿ô¡¡¢¨Ä´À°Í×
FOR x=1 TO N
PRINT !<----- ¤³¤³
PRINT "***";x;"»î¹çÌÜ ***" !<----- ¤³¤³
DIM SM(N) !Áí¹çÆÀÅÀ
LET P=1 !Âǽç
FOR w=1 TO 9 !£¹²ó¤Þ¤Ç
LET B=0 !ÎݤξõÂÖ
LET S1=0 !ÆÀÅÀ
LET O=0
DO UNTIL O=3 !£³¥¢¥¦¥È¤Þ¤Ç
PRINT P;"ÈÖÂǼԡ§"; !<----- ¤³¤³
IF RND<D(P) THEN !¥Ò¥Ã¥È¤Ê¤é
LET t=INT(RND*10)+1 !ĹÂÇΨ¤Ê¤É¡¡¢¨£±¡Á10
SELECT CASE t
CASE 1,2,3,4
LET v=1
CASE 5,6,7
LET v=2
CASE 8,9
LET v=3
CASE ELSE
LET v=4
END SELECT
PRINT v;"ÎÝÂÇ", !£±¡Á£´ <----- ¤³¤³
LET B=B*10+1 !vÎÝÂǤÇÁö¼Ô¤òÁ÷¤ë
LET S1=S1+INT(B/10^3)
LET B=MOD(B,10^3)
FOR i=0 TO v-2
LET B=B*10
LET S1=S1+INT(B/10^3)
LET B=MOD(B,10^3)
NEXT i
ELSE
LET O=O+1
PRINT "¥¢¥¦¥È", !<----- ¤³¤³
END IF
PRINT USING "# %%%": S1,B !ÎݤξõÂÖ <----- ¤³¤³
LET P=P+1 !¼¡¤Ø
IF P>9 THEN LET P=1
LOOP
PRINT w;"²ó";S1;"ÅÀ" !<----- ¤³¤³
PRINT !<----- ¤³¤³
LET SM(w)=SM(w)+S1
NEXT w
NEXT x
PRINT
LET S=0 !ÆÀÅÀ¤ÎʬÉÛ
FOR w=1 TO 9
PRINT w;"²ó";SM(w)/N;"ÅÀ"
LET S=S+SM(w)
NEXT w
PRINT "Áí¹çÆÀÅÀ=";S/N
END
DEF f(x)=x^2 !´Ø¿ôy=x^2
DEF g(x,a,b)=(f(b)-f(a))/(b-a)*(x-a)+f(a) !ÅÀA¤ÈÅÀB¤òÄ̤ëľÀþ
LET a=-2
LET b=4
SET bitmap SIZE 300,600
SET WINDOW -10,10,-20,20 !ɽ¼¨Îΰè
DRAW grid !ºÂɸ
FOR x=-10 TO 10 STEP 0.2 !ÊüʪÀþy=x^2¤òÉÁ¤¯
PLOT LINES: x,f(x);
NEXT x
PLOT LINES
SUB ten(x,y,s$)
PLOT TEXT ,AT x+0.4,y: s$
DRAW disk WITH SCALE(0.2)*SHIFT(x,y)
END SUB
CALL ten(-a,f(-a),"A")
CALL ten(b,f(b),"B")
FOR x=-10 TO 10 STEP 0.2 !ľÀþ¤òÉÁ¤¯
PLOT LINES: x,g(x,-a,b);
NEXT x
PLOT LINES
CALL ten(0,g(0,-a,b),"P") !yÀÚÊÒ
PRINT g(0,-a,b), a*b !¸¡»»
DEF h(a,b)=(f(b)-f(a))/(b-a) !·¹¤
PRINT h(a,b), a+b
END
10 DEF f(x)=x^2 !´Ø¿ôy=x^2
20 DEF g(x,a,b)=(f(b)-f(a))/(b-a)*(x-a)+f(a) !ÅÀA¤ÈÅÀB¤òÄ̤ëľÀþ
30 INPUT PROMPT "2¿ô¤òÁª¤Ö":x,y
40 LET x1=INT(LOG10(x))
50 LET y1=INT(LOG10(y))
60 LET x=x/10^x1
70 LET y=y/10^y1
80 LET a=x
90 LET b=y
100 IF a>b THEN LET t=a ELSE LET t=b
110 SET bitmap SIZE 300,600
120 SET WINDOW -(t+1),t+1,-2,(t+1)^2+5 !ɽ¼¨Îΰè
130 DRAW grid !ºÂɸ
140 FOR x=-10 TO 10 STEP 0.2 !ÊüʪÀþy=x^2¤òÉÁ¤¯
150 PLOT LINES: x,f(x);
160 NEXT x
170 PLOT LINES
180 SUB ten(x,y,s$)
190 PLOT TEXT ,AT x+0.4,y: s$
200 DRAW disk WITH SCALE(0.2)*SHIFT(x,y)
210 END SUB
220 CALL ten(-a,f(-a),"A")
230 CALL ten(b,f(b),"B")
240 FOR x=-10 TO 10 STEP 0.2 !ľÀþ¤òÉÁ¤¯
250 PLOT LINES: x,g(x,-a,b);
260 NEXT x
270 PLOT LINES
280 CALL ten(0,g(0,-a,b),"P") !yÀÚÊÒ
290 PRINT "YÀÚÊÒ¤ÎÃÍ";g(0,-a,b);
300 PRINT "·×»»·ë²Ì"; a*b*10^(x1+y1) !¸¡»»
310 DEF h(a,b)=(f(b)-f(a))/(b-a) !·¹¤
320 !PRINT h(a,b), a+b
330 END
> !ÁÇ¿ô¤ÎÀ¸À®
> PRINT prm(100) !541
> PRINT nxtprm(999) !prm(1000)=7919
> !PRINT nxtprm(9999) !prm(10000)=104729
>
> EXTERNAL FUNCTION prm(n) !nÈÖÌܤÎÁÇ¿ô¡¡¢¨n¤Ï£±°Ê¾å
> DIM prime(n) !ÁÇ¿ôÎó
> LET prime(1)=2 !£±ÈÖÌܤϣ²
> LET k=2 !kÈÖÌÜ
> LET x=1 !¸¡¾Ú¤¹¤ë¼«Á³¿ô
> DO WHILE k<=n !NÈÖÌܤޤÇ
> LET x=x+2 !´ñ¿ô¤¬ÂоÝ
> LET j=1 !¸«¤Ä¤«¤Ã¤¿ÁÇ¿ô¤ÎÇÜ¿ô¤«¤É¤¦¤«³Îǧ¤¹¤ë
> DO WHILE j<k AND MOD(x,prime(j))<>0 !ÇÜ¿ô¤Ê¤éÅÓÃæ¤Ç½ªÎ»
> LET j=j+1
> LOOP
> IF j=k THEN !¿·¤·¤¯¸«¤Ä¤«¤Ã¤¿ÁÇ¿ô¤òµÏ¿¤¹¤ë
> LET prime(k)=x
> LET k=k+1
> END IF
> LOOP
> LET prm=prime(n)
> END FUNCTION
>
> EXTERNAL FUNCTION nxtprm(n) !n+1ÈÖÌܤÎÁÇ¿ô
> LET nxtprm=prm(n+1)
> END FUNCTION
EXTERNAL FUNCTION prm(n) ! nÈÖÌܤÎÁÇ¿ô
DIM prime(n)
FOR i=1 TO MIN(n,10)
READ prime(i)
NEXT i
DATA 2,3,5,7,11,13,17,19,23,29
FOR i=11 TO n
LET m30=MOD(prime(i-1),30)
IF m30=1 OR m30=23 THEN LET a=prime(i-1)+6 ELSE LET a=prime(i-1)-2*MOD(m30,3)+6
DO
LET sqra=SQR(a)
FOR j=4 TO i-1
IF MOD(a,prime(j))=0 THEN EXIT FOR
IF prime(j)>=sqra THEN
LET prime(i)=a
EXIT DO
END IF
NEXT j
LET m30=MOD(a,30)
IF m30=1 OR m30=23 THEN LET a=a+6 ELSE LET a=a-2*MOD(m30,3)+6
LOOP
NEXT i
LET prm=prime(n)
END FUNCTION
EXTERNAL FUNCTION nxtprm(x) !x¤è¤êÂ礤¤ÁÇ¿ô¤ÎºÇ¾®¤Î¤â¤Î
DIM prime(x)
FOR i=1 TO 10 !ºÇ½é¤Î10¸Ä
READ prime(i)
IF x<prime(i) THEN
LET nxtprm=prime(i)
EXIT FUNCTION
END IF
NEXT i
DATA 2,3,5,7,11,13,17,19,23,29
FOR i=11 TO INT(x) !11¸ÄÌܰʹß
LET m30=MOD(prime(i-1),30)
IF m30=1 OR m30=23 THEN LET a=prime(i-1)+6 ELSE LET a=prime(i-1)-2*MOD(m30,3)+6
DO
LET sqra=SQR(a)
!!!LET sqra=INTSQR(a) !<----- ¢¨ÍÍý¿ô¥â¡¼¥É
FOR j=4 TO i-1
IF MOD(a,prime(j))=0 THEN EXIT FOR
IF prime(j)>=sqra THEN
LET prime(i)=a
EXIT DO
END IF
NEXT j
LET m30=MOD(a,30)
IF m30=1 OR m30=23 THEN LET a=a+6 ELSE LET a=a-2*MOD(m30,3)+6
LOOP
IF x<prime(i) THEN
LET nxtprm=prime(i)
EXIT FUNCTION
END IF
NEXT i
PRINT "¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
STOP
END FUNCTION
!ÁÇ¿ô¤Î¸Ä¿ô
!PRINT fnPrimePi(77777)
!¸¶»Ïº¬ genshi3
FOR LP=1 TO 100
LET P=prm(LP) !ºÇ½é¤Î100¸Ä¤ÎÁÇ¿ô¤ËÂФ·¤Æ
PRINT USING "##### ### |": P,fnGenshi(P);
IF MOD(LP,5)=0 THEN PRINT
NEXT LP
PRINT
!¸¶»Ïº¬ genshi2
FOR LP=1 TO 100
LET P=prm(LP) !ºÇ½é¤Î100¸Ä¤ÎÁÇ¿ô¤ËÂФ·¤Æ
LET G=1
IF P<>2 THEN
50 LET G=G+1
LET W=1
FOR i=1 TO P-2
LET W=MOD(W*G,P)
IF W=1 THEN GOTO 50
NEXT i
END IF
PRINT USING "##### ### |": P,G;
IF MOD(LP,5)=0 THEN PRINT
NEXT LP
PRINT
END
EXTERNAL FUNCTION fnPrimePi(X) !¼Â¿ôx¤ËÂФ·x°Ê²¼¤ÎÁÇ¿ô¤Î¸Ä¿ô
LET S=1
LET E=10000 !100,000°Ê²¼¤ÎÁÇ¿ô¤Ï10,000¸Ä̤Ëþ¤À¤«¤é¡¡¢¨
DO WHILE E>S+1
LET K=INT((S+E)/2) !£²Ê¬Ãµº÷
IF prm(K)<=X THEN LET S=K ELSE LET E=K
LOOP
LET fnPrimePi=S
END FUNCTION
EXTERNAL FUNCTION fnGenshi(P) !¸¶»Ïº¬
LET G=1
LET N=P-1
IF P<>2 THEN
180 LET G=G+1
LET Nw=N
DO
LET Div=prmdiv(Nw)
DO WHILE MOD(Nw,Div)=0
LET Nw=INT(Nw/Div)
LOOP
IF modpow(G,INT(N/Div),P)=1 THEN GOTO 180
LOOP UNTIL Nw=1
END IF
LET fnGenshi=G
END FUNCTION
OPTION BASE 0
SET WINDOW 0,500, 500,0
!
LET Xmax=90
LET Ymax=90
LET MaxCan=INT(Xmax*Ymax/4) !¡¡must Ymax<=Xmax
LET Bsize=4
LET Xoff=INT((500-Xmax*Bsize)/2)
LET Yoff=INT((500-Ymax*Bsize)/3) ! 20
DIM Map_(Xmax,Ymax)
DIM CanX_(MaxCan),CanY_(MaxCan),DirX_(MaxCan),DirY_(MaxCan)
RANDOMIZE
!
FOR I=0 TO 1
FOR J=0 TO Ymax
LET Map_(I,J)=1
LET Map_(Xmax-I,J)=1
NEXT J
NEXT I
FOR J=0 TO 1
FOR I=0 TO Xmax
LET Map_(I,J)=1
LET Map_(I,Ymax-J)=1
NEXT I
NEXT J
LET X=2
FOR Y=4 TO Ymax-2
CALL DOT_(X,Y)
NEXT Y
LET X=Xmax-2
FOR Y=2 TO Ymax-4
CALL DOT_(X,Y)
NEXT Y
LET Y=2
FOR X=2 TO Xmax-2
CALL DOT_(X,Y)
NEXT X
LET Y=Ymax-2
FOR X=2 TO Xmax-2
CALL DOT_(X,Y)
NEXT X
LET Ncan=0
FOR I=2 TO INT(Xmax/(2)) -2
CALL InsCan_(I*2,2)
CALL InsCan_(I*2,Ymax-2)
NEXT I
FOR J=2 TO INT(Ymax/(2)) -2
CALL InsCan_(2,J*2)
CALL InsCan_(Xmax-2,J*2)
NEXT J
LET Ndir=4
LET DirX_(1)=2
LET DirY_(1)=0
LET DirX_(2)=0
LET DirY_(2)=2
LET DirX_(3)=-2
LET DirY_(3)=0
LET DirX_(4)=0
LET DirY_(4)=-2
DO WHILE Ncan>0
CALL Selcan_(I,J)
DO
LET Ndir=4
DO
CALL SelDir_(DI,DJ)
LET Ok=1-Map_(I+DI,J+DJ)
LOOP UNTIL Ok<>0 OR Ndir=0
IF Ok<>0 THEN
CALL DOT_(I+INT(DI/(2)),J+INT(DJ/(2)) )
LET I=I+DI
LET J=J+DJ
CALL DOT_(I,J)
CALL InsCan_(I,J)
END IF
LOOP UNTIL NOT Ok<>0
LOOP
SUB DOT_(X,Y)
LET Map_(X,Y)=1
! SET AREA COLOR 5
PLOT AREA:
Bsize*X+Xoff,Bsize*Y+Yoff;Bsize*X+Xoff+Bsize-1,Bsize*Y+Yoff;Bsize*X+Xoff+Bsize-1,Bsize*Y+Yoff+Bsize-1;Bsize*X+Xoff,Bsize*Y+Yoff+Bsize-1
END SUB
SUB InsCan_(I,J)
LET Ncan=Ncan+1
LET CanX_(Ncan)=I
LET CanY_(Ncan)=J
END SUB
SUB Selcan_(I,J)
local R
LET R=int(Ncan*rnd)+1
LET I=CanX_(R)
LET J=CanY_(R)
LET CanX_(R)=CanX_(Ncan)
LET CanY_(R)=CanY_(Ncan)
LET Ncan=Ncan-1
END SUB
SUB SelDir_(I,J)
local R
LET R=int(Ndir*rnd)+1
LET I=DirX_(R)
LET J=DirY_(R)
LET DirX_(R)=DirX_(Ndir)
LET DirY_(R)=DirY_(Ndir)
LET DirX_(Ndir)=I
LET DirY_(Ndir)=J
LET Ndir=Ndir-1
END SUB
SUB Routine_
LET I=K-J
IF fnCheck(I,J)< 3 THEN EXIT SUB
LET Ii=I
LET Jj=J
DO
CALL Fil_(Ii,Jj)
IF Map_(Ii-1,Jj)=0 THEN
LET Ii=Ii-1
ELSEIF Map_(Ii,Jj+1)=0 THEN
LET Jj=Jj+1
ELSEIF Map_(Ii+1,Jj)=0 THEN
LET Ii=Ii+1
ELSEIF Map_(Ii,Jj-1)=0 THEN
LET Jj=Jj-1
END IF
LOOP UNTIL fnCheck(Ii,Jj)<>3
END SUB
SUB Fil_(X,Y)
LET Map_(X,Y)=1
SET AREA COLOR 4 !3
PLOT AREA:
Bsize*X+Xoff,Bsize*Y+Yoff;Bsize*X+Xoff+Bsize-1,Bsize*Y+Yoff;Bsize*X+Xoff+Bsize-1,Bsize*Y+Yoff+Bsize-1;Bsize*X+Xoff,Bsize*Y+Yoff+Bsize-1
END SUB
DECLARE EXTERNAL SUB sort
PUBLIC NUMERIC c
LET tt=TIME
LET s=4
LET n=13
LET c=s*n
DIM check(c),card(c),position(n,s),face(n),total(0 TO n-1),count(0 TO n-1)
LET test=100000 ! 100000¤Ç125ÉÃ
FOR t=1 TO test
CALL prep
CALL play
NEXT t
LET cc=0
PRINT " ÁÈ ³ÎΨ Ê¿¶ÑËç¿ô"
FOR i=0 TO n-1
PRINT USING " ## .##### ##.##Ëç" : i,total(i)/test,count(i)/total(i)
LET cc=cc+count(i)
NEXT i
PRINT USING " ##.##Ëç" : cc/test
PRINT INT(TIME-tt);"sec"
SUB prep
FOR i=1 TO c
LET check(i)=RND
NEXT i
CALL sort(check,card)
!MAT PRINT card;
FOR j=1 TO s
FOR i=1 TO n
LET position(i,j)=card((j-1)*n+i)
NEXT i
NEXT j
!MAT PRINT position;
END SUB
SUB play
MAT face=ZER
LET cc=0
CALL open_card(n)
!MAT PRINT face;
LET f=0
FOR i=1 TO n-1
IF face(i)=s THEN LET f=f+1
NEXT i
LET total(f)=total(f)+1
LET count(f)=count(f)+cc
END SUB
SUB open_card(nn)
LET cc=cc+1
LET look=position(nn,1)
FOR j=1 TO s-1
LET position(nn,j)=position(nn,j+1)
NEXT j
LET p=MOD(look,n)+1
!PRINT p;
LET face(p)=face(p)+1
IF face(n)=s THEN EXIT SUB
CALL open_card(p)
END SUB
END
REM ½½¿ÊBASICźÉÕ"\BASICw32\Library\SORT2.LIB"¤è¤ê
! ix¤Ë¤Ïm¤È²¼¸Â¡¤¾å¸Â¤ò°ìÃפµ¤»¤¿¶õ¤ÎÇÛÎó¤ò»ØÄꤹ¤ë¡£
! m¤Ï»²¾È¤µ¤ì¤ë¤Î¤ß¡£
! ix¤Ëm¤Îź»ú¤òÂ礤µ¤Î½ç¤Ëʤ٤ÆÊÖ¤¹¡£
! ¤Ä¤Þ¤ê¡¤m(ix(1))¡åm(ix(2))¡åm(ix(3))¡åޥޥޥ¤È¤Ê¤ë¡£
EXTERNAL SUB sort(m(),ix())
FOR i=1 TO c
LET ix(i)=i
NEXT i
CALL q_sort(m,ix,1,c)
END SUB
EXTERNAL SUB q_sort(m(),a(),l,r)
IF r<=l THEN
EXIT SUB
ELSE
LET i=l-1
LET j=r
LET pv=m(a(r))
DO
DO
LET i=i+1
LOOP UNTIL pv<=m(a(i))
DO
LET j=j-1
LOOP UNTIL j<=i OR m(a(j))<=pv
IF j<=i THEN EXIT DO
LET t=a(i)
LET a(i)=a(j)
LET a(j)=t
LOOP
LET t=a(i)
LET a(i)=a(r)
LET a(r)=t
CALL q_sort(m,a,l,i-1)
CALL q_sort(m,a,i+1,r)
END IF
END SUB
!¥¢¥Ê¥í¥°»þ·×
SET WINDOW -1.2,1.2,-1.2,1.2 !ɽ¼¨Îΰè
SET TEXT JUSTIFY "center","half" !ʸ»úɽ¼¨¤Î½ñ¼°
DO
LET t$=TIME$ !»þ¹ï¤òhh:mm:ss·Á¼°¤ÇÆÀ¤ë
LET h=VAL(t$(1:2)) !¿ôÃͤØ
LET m=VAL(t$(4:5))
LET s=VAL(t$(7:8))
SET DRAW mode hidden !¤Á¤é¤Ä¤ßËɻߡʳ«»Ï¡Ë
CLEAR
FOR i=1 TO 12 !ʸ»úÈ×
LET th=PI/2-2*PI*i/12 !£Ù¼´¤«¤é»þ·×¤Þ¤ï¤ê
PLOT TEXT ,AT COS(th),SIN(th): STR$(i) !±ß¼þ¾å
NEXT i
LET th=PI/2-2*PI*(h + m/60)/12 !»þ¿Ë
PLOT LINES: 0,0; 0.6*COS(th),0.6*SIN(th)
LET th=PI/2-2*PI*m/60 !ʬ¿Ë
PLOT LINES: 0,0; 0.9*COS(th),0.9*SIN(th)
LET th=PI/2-2*PI*s/60 !ÉÿË
PLOT LINES: 0,0; 0.8*COS(th),0.8*SIN(th)
SET DRAW mode explicit !¤Á¤é¤Ä¤ËɻߡʽªÎ»¡Ë
LOOP
END
¾å½ñ¤¤»¤Æ¤¤¤¿¤À¤¤Þ¤·¤¿¡£
Ä´¤Ù¤¿¤é1ʬ´Ö¤ËÌó8200²ó¤ÎÉÁ²è¤ò¤·¤Æ¤¤¤¿¤Î¤Ç¡¢Éäι¹¿·¤¬¤¢¤Ã¤¿¤È¤¤ËÉÁ²è¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
ʸ»úÈ×Éôʬ¤âLOOP¤«¤é½Ð¤·¤ÆÉÁ²è»þ´Ö¤òÀáÌó¡£
Ĺ¿Ë¡¦Ã»¿Ë¤ò³¨ÄêµÁ¤Ë¤·¡¢PICTURE hand ¤ò½ñ¤´¹¤¨¤ë¤³¤È¤Ë¤è¤ê¿Ë¤Î¥Ç¥¶¥¤¥óÊѹ¹¤òÍÆ°×¤Ë¤Ç¤¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
!¥¢¥Ê¥í¥°»þ·×(²þ)
SET WINDOW -1.2,1.2,-1.2,1.2 !ɽ¼¨Îΰè
SET TEXT JUSTIFY "center","half" !ʸ»úɽ¼¨¤Î½ñ¼°
SET TEXT HEIGHT 1.2/10
SET AREA COLOR 5 ! ¿å¿§
SET POINT STYLE 4 ! ¡£
DRAW disk WITH SCALE(1.1)
FOR i=1 TO 12 !ʸ»úÈ×
LET th=PI/2-2*PI*i/12 !£Ù¼´¤«¤é»þ·×¤Þ¤ï¤ê
PLOT TEXT ,AT COS(th),SIN(th): STR$(i) !±ß¼þ¾å
FOR j=1 TO 4
LET th=PI/2-2*PI*(5*i+j)/60
PLOT POINTS : 0.94*COS(th),0.94*SIN(th)
NEXT j
NEXT i
SET LINE COLOR "RED"
LET t0=INT(TIME)
DRAW clock(t0)
DO
IF TIME-t0>=1 THEN ! Éäι¹¿·¤ÇÉÁ²è
LET t0=INT(TIME)
DRAW clock(t0)
END IF
LOOP
PICTURE clock(t0)
LET h=INT(t0/3600) !¿ôÃͤØ
LET m=INT((t0-3600*h)/60)
LET s=MOD(t0,60)
SET DRAW mode hidden !¤Á¤é¤Ä¤Ëɻߡʳ«»Ï¡Ë
SET AREA COLOR 0 ! Çò
DRAW disk WITH SCALE(0.9) !¿ËÉÁ²èÉôʬ¤Î¤ß¥¯¥ê¥¢
LET th=PI/2-2*PI*(h + m/60)/12 !»þ¿Ë
DRAW hand(3) WITH SCALE(0.6,1)*ROTATE(th)
LET th=PI/2-2*PI*m/60 !ʬ¿Ë
DRAW hand(2) WITH SCALE(0.86,1)*ROTATE(th)
LET th=PI/2-2*PI*s/60 !ÉÿË
PLOT LINES: 0,0; 0.8*COS(th),0.8*SIN(th)
SET DRAW mode explicit !¤Á¤é¤Ä¤ËɻߡʽªÎ»¡Ë
END PICTURE
PICTURE hand(col) !¿ËÉÁ²è
SET AREA COLOR col
PLOT AREA : -0.05,-0.03;1,-0.03;1,0.03;-0.05,0.03
END PICTURE
SET AREA COLOR 5
LET s00=SQR(3)/4
LET ¦Õ=0.001
LET stp=PI/180
DO
IF 2*PI<=ABS(¦Õ) THEN LET stp=-stp !¡¡(¡Ü)º¸²óž (¡Ý)±¦²óž
LET ¦Õ=REMAINDER(¦Õ, 2*PI) +stp
!-----
LET ¦È=¦Õ+SIN(¦Õ*51)*0.1+SIN(¦Õ*49)*0.05 !¡¡¿åÌÌÍɤì..ͤê
!LET ¦È=¦Õ !¡¡¿åÌÌÍɤì..̵¤·
!-----
LET r=0.19985-0.00355*COS(¦È*6) !¡¡±ÕÌÌÊäÀµ¡¢»Ä¸íº¹¡Þ3.85%
LET x00=0
LET y00=0
LET i=1
LET x(i)=x1(¦È)
LET y(i)=y1
IF 0<=x(i) AND x(i)<=1 AND 0<=y(i) AND y(i)<=SQR(3)/2 THEN LET i=i+1
LET x(i)=x2(¦È)
LET y(i)=y2(¦È)
IF 0<=x(i) AND x(i)<=1 AND 0<=y(i) AND y(i)<=SQR(3)/2 THEN LET i=i+1.01
IF i< 3 THEN
LET x(i)=x3(¦È)
LET y(i)=y3(¦È)
IF 2< i THEN
LET x00=1/2
LET y00=SQR(3)/2
ELSE
LET x00=1
LET y00=0
END IF
END IF
LET ss2=ABS((x(1)-x00)*(y(2)-y00)-(y(1)-y00)*(x(2)-x00))
SET DRAW mode hidden
CLEAR
DRAW D4(3) WITH SHIFT(-1/2,-1/SQR(3)/2)*ROTATE(¦Õ-PI/2)
DRAW center WITH SHIFT(-1/2,-1/SQR(3)/2)*ROTATE(-¦Õ-PI/2)*SCALE(-1/8,1/8)
PLOT TEXT,AT 0.13,0.23:"±¦¥¯¥ê¥Ã¥¯¤Ç½ªÎ»"
SET DRAW mode explicit
WAIT DELAY 0.05
MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb>=1
PICTURE center
SET LINE COLOR 2
SET LINE width 2
PLOT LINES:0,0;1,0;1/2,SQR(3)/2;0,0
SET LINE width 1
SET LINE COLOR 1
END PICTURE
!------
PICTURE D4(k)
IF 0< k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) !¡¡¾å
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) !¡¡Ãæ
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) !º¸
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) !¡¡±¦
ELSE
DRAW Set01
END IF
END PICTURE
!------ ¼ï¤Î»°³Ñ¿Þ
PICTURE Set01
IF s00< ss2 THEN
IF x00=0 THEN PLOT AREA:x(1),y(1);x(2),y(2);1/2,SQR(3)/2;1,0
IF x00=1 THEN PLOT AREA:x(1),y(1);x(2),y(2);1/2,SQR(3)/2;0,0
IF x00=1/2 THEN PLOT AREA:x(1),y(1);x(2),y(2);1,0;0,0
ELSE
PLOT AREA:x(1),y(1);x(2),y(2);x00,y00
END IF
PLOT LINES:x(1),y(1);x(2),y(2)
PLOT LINES:0,0;1,0;1/2,SQR(3)/2;0,0
END PICTURE
OPTION ARITHMETIC RATIONAL
LET t=fact(52)
LET s=0
FOR i=4 TO 52
LET b=perm(48,52-i) * 4 * fact(i-1) !»Ä¤ë¥«¡¼¥É¡¢£Ë¡¢¤á¤¯¤é¤ì¤Æ¤¤¤¯¥«¡¼¥É¡Ê£³Ëç¤Î£Ë¤ò´Þ¤à¡Ë
PRINT i;"Ëç¡¡³ÎΨ=";b/t
LET s=s+b/t
NEXT i
PRINT "³ÎΨ=";s !¸¡»»
END
¤³¤Î¥×¥í¥°¥é¥à¤Ï¡¤a^n mod k ¤ò·×»»¤·¤Þ¤¹¡£
k¤ÎÃͤ¬8·å¤òͤ¨¤ë¤È¤¤ÏÍÍý¿ô¥â¡¼¥É¤Ç¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£
100 INPUT k
110 INPUT a,n
120 LET p=1
130 LET b=MOD(a,k)
140 DO UNTIL n=0
150 IF MOD(n,2)=1 THEN LET p=MOD(p*b,k)
160 LET b=MOD(b*b,k)
170 LET n=INT(n/2)
180 LOOP
190 PRINT p
200 END
DECLARE EXTERNAL SUB prime_factor
PUBLIC NUMERIC prn(2000000),pf(100),f
DECLARE FUNCTION modn
LET x=9876543201
LET n=1234567890
LET a=6789012345
LET r=MOD(x,a)
CALL prime_factor(n) ! Áǰø¿ôʬ²ò
LET k=r
FOR i=1 TO f
LET k=modn(k,pf(i),a)
NEXT i
PRINT k
!
FUNCTION modn(r,n,a) ! mod(r^n,a)
LET kk=r
FOR ii=2 TO n
LET kk=MOD(kk*r,a)
NEXT ii
LET modn=kk
END FUNCTION
END
REM ** Áǰø¿ôʬ²ò **
EXTERNAL SUB prime_factor(n)
DECLARE EXTERNAL SUB prime
LET f=0 ! Áǰø¿ô¤Î¸Ä¿ô
LET q=n ! q¤Ï¡¢¾¦
LET m=1 ! ¸¡¾ÚÍÑÊÑ¿ô
FOR i=1 TO 10
READ prn(i)
NEXT i
DATA 2,3,5,7,11,13,17,19,23,29
LET i=1
DO WHILE MOD(q,prn(i))=0 ! °ø¿ôȽÄê¥ë¡¼¥Á¥ó
LET f=f+1
LET pf(f)=prn(i) ! pf(f)¤Ïn¤ÎfÈÖÌܤÎÁǰø¿ô
LET q=q/prn(i)
LET m=m*prn(i)
LOOP
LET i=2
DO WHILE prn(i)<=SQR(q)
DO WHILE MOD(q,prn(i))=0 ! °ø¿ôȽÄê¥ë¡¼¥Á¥ó
LET f=f+1
LET pf(f)=prn(i) ! pf(f)¤Ïn¤ÎfÈÖÌܤÎÁǰø¿ô
LET q=q/prn(i)
LET m=m*prn(i)
LOOP
IF q=1 THEN EXIT DO
LET i=i+1
IF i>10 THEN CALL prime(i) ! iÈÖÌܤÎÁÇ¿ô
LOOP
IF q<>1 THEN
LET f=f+1
LET pf(f)=q
LET m=m*q
END IF
IF m<>n THEN PRINT "error !!"
END SUB
!
REM ** ÁÇ¿ôÎóÀ¸À®(kÈÖÌܤÎÁÇ¿ô) **
EXTERNAL SUB prime(k)
LET m30=MOD(prn(k-1),30)
IF m30=1 OR m30=23 THEN LET a=prn(k-1)+6 ELSE LET a=prn(k-1)-2*MOD(m30,3)+6
DO
LET sqra=SQR(a)
FOR j=4 TO k-1
IF MOD(a,prn(j))=0 THEN EXIT FOR
IF prn(j)>=sqra THEN
LET prn(k)=a
EXIT SUB
END IF
NEXT j
LET m30=MOD(a,30)
IF m30=1 OR m30=23 THEN LET a=a+6 ELSE LET a=a-2*MOD(m30,3)+6
LOOP
END SUB
m²ó¥·¥ã¥Ã¥Õ¥ë¤ò·«¤êÊÖ¤¹¤È
f(f(f(¡Ä(f(k)))))=2*(2*(2*¡Ä(2*k mod n+1) mod n+1) mod n+1) mod n+1=2^m*k mod n+1
°ìÍ÷ɽ¤ò¤Ä¤¯¤ë¥×¥í¥°¥é¥à
!¥ê¥Õ¥ë¥·¥ã¥Ã¥Õ¥ë
!nËç¤Î¥«¡¼¥É¤ò1,2,3,¡Ä,n-1,n¤Ëʤ٤롣
!£±²ó¤Î¥·¥ã¥Ã¥Õ¥ë¤Ç¥«¡¼¥Ék¤¬¸½¤ì¤ë°ÌÃÖ¤òf(k)¤Èɽ¤¹¡£¡Ê¥«¡¼¥Ék¤Ïf(k)ÈÖÌܤˤ¢¤ë¡Ë
DEF f(k)=MOD(2*k,n+1)
FOR n=2 TO 100 STEP 2 !¶ö¿ô
PRINT USING "### Ëç¡§":n;
LET x=1 !¥«¡¼¥Éx¤ËÃåÌÜ
LET iter=1000
FOR m=1 TO iter !m²ó¤Î¥·¥ã¥Ã¥Õ¥ë¡¡¢¨
LET x=f(x) !2^m*k (mod n+1)
!!!PRINT m;x
IF x=n THEN PRINT USING "### ²óÌܤǵս硢":m; !µÕ½ç
IF x=1 THEN EXIT FOR !¤â¤È¤ËÌá¤ë
NEXT m
IF m>iter THEN
PRINT USING "### ²ó¤Ç¤Ï¸µ¤ËÌá¤ê¤Þ¤»¤ó¡£":m
ELSE
PRINT USING "### ²óÌܤ˸µ¤ËÌá¤ë":m
END IF
NEXT n
END
FOR n=2 TO 100 STEP 2 !¶ö¿ô
PRINT USING "### Ëç¡§":n;
LET iter=1000
FOR m=1 TO iter
LET x=modinv(2^m,n+1) !£±ËçÌܤΥ«¡¼¥É¤Î¸µ¤Î°ÌÃÖ¤òÆÀ¤ë
IF x=n THEN PRINT USING "### ²óÌܤǵս硢":m; !µÕ½ç
IF x=1 THEN EXIT FOR !¤â¤È¤ËÌá¤ë
NEXT m
IF m>iter THEN
PRINT USING "### ²ó¤Ç¤Ï¸µ¤ËÌá¤ê¤Þ¤»¤ó¡£":m
ELSE
PRINT USING "### ²óÌܤ˸µ¤ËÌá¤ë":m
END IF
NEXT n
END
EXTERNAL FUNCTION modpow(a,b,n) !a^b¢áx mod n ¤Îx¤òÊÖ¤¹
LET S=1
DO WHILE b>0
IF MOD(b,2)=1 THEN LET S=MOD(S*a,n) !¥Ó¥Ã¥È¤¬£±¤Ê¤é·×»»¤¹¤ë
LET b=INT(b/2) !¤Ù¤¾èb¤ò£²¿ÊŸ³«¤¹¤ë
LET a=MOD(a*a,n)
LOOP
LET modpow=S
END FUNCTION
!»³¤ò»È¤Ã¤¿¥·¥ã¥Ã¥Õ¥ë
LET p=3 !»³¤Î¿ô
FOR n=p TO 100 STEP p !p¤ÎÇÜ¿ô
PRINT USING "### Ëç¡§":n;
LET iter=1000
FOR m=1 TO iter
!!!LET x=modinv((n*p)^m,n+1) !£±ËçÌܤΥ«¡¼¥É¤Î¸µ¤Î°ÌÃÖ¡Ê¥«¡¼¥ÉÈÖ¹æ¡Ë¤òÆÀ¤ë
LET x=modpow(n*p,m,n+1) !£±È֤Υ«¡¼¥É¤Î°ÌÃÖ¤òÆÀ¤ë
IF x=n THEN PRINT USING "### ²óÌܤǵս硢":m; !µÕ½ç
IF x=1 THEN EXIT FOR !¤â¤È¤ËÌá¤ë
NEXT m
IF m>iter THEN
PRINT USING "##### ²ó¤Ç¤Ï¸µ¤ËÌá¤ê¤Þ¤»¤ó¡£":m
ELSE
PRINT USING "### ²óÌܤ˸µ¤ËÌá¤ë":m
END IF
NEXT n
END
!¡¡»þ·×¡¢»þ·×¡¢»þ·×
!-------------------
LET N=2
LET NN=2^N
SET TEXT font "Century",11
SET TEXT JUSTIFY "center","half"
SET TEXT BACKGROUND "OPAQUE"
SET WINDOW -250/NN,250/NN,250/NN,-250/NN
LET ¦Õ=0
LET stp=-PI/180*6
DO
LET t=INT(TIME)
IF t0<>t THEN
LET t0=t
IF 2*PI<=ABS(¦Õ) THEN LET stp=-stp
LET ¦Õ=REMAINDER(¦Õ, 2*PI) +stp
!-----
SET DRAW mode hidden
CLEAR
DRAW D4(N) WITH SHIFT(-300/2,-300/2/SQR(3))*ROTATE(¦Õ*(-1)^N)*SCALE(1,(-1)^N)
DRAW center WITH SHIFT(-300/2/NN,-300/2/NN/SQR(3))*ROTATE(¦Õ)
PLOT TEXT,AT 180/NN,-240/NN:"Right Click to Stop"
SET DRAW mode explicit
ELSE
WAIT DELAY 0.05 !¡¡¾ÊÅÅÎϸú²Ì
END IF
MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb>=1 !¡¡±¦¥¯¥ê¥Ã¥¯¤ÇÄä»ß
PICTURE center
SET LINE COLOR 2
SET LINE width 2
PLOT LINES:0,0;300/NN,0;300/2/NN,300/2/NN*SQR(3);0,0
SET LINE width 1
SET LINE COLOR 1
END PICTURE
!------
PICTURE D4(k)
IF 0< k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(300/4,SQR(3)*300/4) !¡¡Æâ¦¤Î¾å
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(300/4,SQR(3)*300/4) !¡¡Æâ¦¤ÎÃæ
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(300/4,SQR(3)*300/4) !Æâ¦¤Îº¸
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(300,0) !¡¡Æâ¦¤Î±¦
ELSE
DRAW »þ·×¿Þ WITH ROTATE(-¦Õ)*SHIFT(300/2,300/2/SQR(3))
PLOT LINES:0,0;300,0;300/2,SQR(3)*300/2;0,0 !¡¡³°Â¦¤Î´ð½à»°³Ñ·Á¡ÊľÀܤÎÉÁ²è¤Ï̵¤·¡£)
END IF
END PICTURE
!------
PICTURE »þ·×¿Þ
SET AREA COLOR 1
FOR i=1 TO 60
LET a=PI/30*(i-15)
IF MOD(i,5)=0 THEN
PLOT label,AT 60*COS(a)+1, 60*SIN(a) :STR$(i/5) !¿ô»ú
DRAW disk WITH SCALE(1)*SHIFT(72*COS(a),72*SIN(a)) !£µÊ¬ÌÜÀ¹¤ê
ELSE
DRAW disk WITH SCALE(.5)*SHIFT(72*COS(a),72*SIN(a)) !£±Ê¬ÌÜÀ¹¤ê
END IF
NEXT i
!---¡¡00:00 ¤«¤é£ôÉà ¤Î¿Ë²óž Gear
DRAW hand(1) WITH SCALE(2.5, 0.75)*ROTATE(t*PI/21600) !¡¡»þ¿Ë
DRAW hand(1) WITH ROTATE(t*PI/1800) !¡¡Ê¬¿Ë
DRAW hand(1) WITH SCALE(0, 1.1)*ROTATE(t*PI/30) !¡¡ÉÿË
!---¡¡Ãæ¿´¤Î¾þ¤ê
DRAW disk WITH SHIFT(0,0)*SCALE(4)
END PICTURE
PICTURE hand(c) !¡¡£³¿Ë¶¦ÍÑ
SET AREA COLOR c
PLOT AREA: -1,15; 1,15; 1,-60; -1,-60
END PICTURE
MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.40
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11, 0.11
!----------
FOR N=0 TO 4
FOR s=9 TO 1 STEP -1
SET DRAW mode hidden
CLEAR
SET WINDOW -0.4,1.6, -1.1,0.9
PLOT TEXT,AT 0.6,0.8:"¥ß¥é¡¼½Ì¾®£´Ê¬´ô"
PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
DRAW D4(N)
SET WINDOW -1.0,1.0, -0.05,1.95
PLOT TEXT,AT 0.6,0.8:"Ãæ¤òÈ´¤¤¤¿¤â¤Î"
PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
DRAW D42(N)
SET WINDOW 0.0,4.0, -0.1,3.9
PLOT TEXT,AT 0.1,1.8:"¥·¥ë¥Ô¥ó¥¹¥¡¼¤Î¥¬¥¹¥±¥Ã¥È"
PLOT TEXT,AT 1.2,1.6, USING "N= %%":N
DRAW D3(N)
SET DRAW mode explicit
WAIT DELAY 0.2
NEXT s
NEXT N
!------ ¥ß¥é¡¼½Ì¾®£´Ê¬´ô
PICTURE D4(k)
IF 0<k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) !¡¡¾å
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) !¡¡Ãæ
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) !¡¡º¸
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) !¡¡±¦
ELSE
DRAW Set01
END IF
END PICTURE
!------ ¥ß¥é¡¼½Ì¾®£´Ê¬´ô¡ÊÃæ¡Ë¤ò³°¤¹¤È¡¢¥·¥ë¥Ô¥ó¥¹¥¡¼¤Î¥¬¥¹¥±¥Ã¥È¤â¤É¤¤Ë¤Ê¤ë¡£
PICTURE D42(k)
IF 0<k THEN
DRAW D42(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) !¡¡¾å
! ¤³¤ì¤ò³°¤¹¡¡DRAW D42(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) !¡¡Ãæ
DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) !¡¡º¸
DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) !¡¡±¦
ELSE
DRAW Set01
END IF
END PICTURE
!------ ¥·¥ë¥Ô¥ó¥¹¥¡¼¤Î¥¬¥¹¥±¥Ã¥È
PICTURE D3(k)
IF 0<k THEN
!---¥ê¥ó¥¯¡¦BASIC¤ÇÉÁ¤¯¼«¸ÊÁê»÷¿Þ·Á¤«¤éÇÒ¼Ú
DRAW D3(k-1) WITH SCALE(1/2)
DRAW D3(k-1) WITH SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0)
DRAW D3(k-1) WITH SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3))
ELSE
DRAW Set01
END IF
END PICTURE
!------ ¿Æ½¸¹ç¤Î»°³Ñ¿Þ£±Ëç
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! ¾þ¤ê£±
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! ¾þ¤ê£²
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! ¾þ¤ê£³
END PICTURE
LET maxim=13 !¡¡ºÇÂçËç¿ô 2~1000
DIM buf(1000), bufw(1000)
SUB in_riffle_shuffle !¥¤¥ó¤Î¥ê¥Õ¥ë¡£´ñ¿ôËç¤Ï¡¢¸åȾ¤ò£±Ë翤á
MAT bufw=buf
FOR i=1 TO n
LET buf(i)= bufw(CEIL(i/2)+MOD(i,2)*INT(n/2)) !1234¢ª3142, 12345¢ª31425
NEXT i
END SUB
SUB out_riffle_shuffle !¥¢¥¦¥È¤Î¥ê¥Õ¥ë¡£´ñ¿ôËç¤Ï¡¢Á°È¾¤ò£±Ë翤á
MAT bufw=buf
FOR i=1 TO n
LET buf(i)= bufw(CEIL(i/2)+MOD(i+1,2)*CEIL(n/2)) !1234¢ª1324, 12345¢ª13243
NEXT i
END SUB
FOR n=2 TO maxim !STEP 2 !¡¡Step ¤ò³°¤»¤Ð´ñ¿ô¤â·×»»¡£
!-----
MAT buf=ZER(n) !¡¡ÇÛÎó¥µ¥¤¥ºÄ´À°¡¢ÄɲÃ
!-----
FOR i=1 TO n
LET buf(i)= i
NEXT i
LET cc=0
LET c=0
!-----
IF maxim<15 THEN MAT PRINT USING REPEAT$(" ###",n) :buf !¡¡É½¼¨¡¢ÄɲÃ
!-----
DO
LET c=c+1
CALL in_riffle_shuffle ! 1234¢ª3142, 12345¢ª31425
!CALL out_riffle_shuffle ! 1234¢ª1324, 12345¢ª13243
!-----
IF maxim<15 THEN MAT PRINT USING REPEAT$(" ###",n) :buf !¡¡É½¼¨¡¢ÄɲÃ
!-----
FOR i=1 TO n
IF buf(i)<> n+1-i THEN EXIT FOR
NEXT i
IF i>n AND cc=0 THEN LET cc=c
FOR i=1 TO n
IF buf(i)<>i THEN EXIT FOR
NEXT i
LOOP UNTIL i>n
PRINT USING "Ëç¿ô=###¡¡Æ±½ç=###¡¡µÕ½ç=###¡ÊÉü¸µ²ó¿ô¡Ë": n, c, cc
IF maxim<15 THEN PRINT !¡¡É½¼¨¡¢ÄɲÃ
NEXT n
!¿¿ÍýÃÍɽ
LET a=3 !0011¤Î¥Ñ¥¿¡¼¥ó
LET b=5 !0101¤Î¥Ñ¥¿¡¼¥ó
PRINT " b NOT" !ÈÝÄê
FOR i=0 TO 1
PRINT bit(i,b); 1-bit(i,b) !b'=1-b
NEXT i
PRINT " a b IMP" !ÏÀÍýÊñ´Þ
FOR i=0 TO 3
PRINT bit(i,a); bit(i,b); bit(i,bitor(bitreverse(i,a),b)) !a' or b
NEXT i
PRINT " a b EQV" !ƱÃÍ
FOR i=0 TO 3
PRINT bit(i,a); bit(i,b); 1-bit(i,bitxor(a,b)) !(a xor b)'
NEXT i
!£²¤ÎÊä¿ô¡§ÄêµÁ¤è¤ê
LET n=16 !£î¥Ó¥Ã¥ÈÉ乿ÉÕÀ°¿ô -2^(n-1)¡Á2^(n-1)-1
LET m=2^n
LET a=3
LET aa=m-a !a+a'=m
FOR i=N-1 TO 0 STEP -1 !¾å¤Î°Ì¤«¤é
PRINT bit(i,aa);
NEXT i
PRINT
!£²¤ÎÊä¿ô¡§È¿Å¾¤·¤Æ£±¤ò¤¿¤¹
LET a=3
FOR i=N-1 TO 0 STEP -1 !¾å¤Î°Ì¤«¤é
LET a=bitreverse(i,a)
NEXT i
LET a=a+1
PRINT a !£î¥Ó¥Ã¥ÈÉ乿¤Ê¤·À°¿ô 0¡Á2^n-1
!£²¤ÎÊä¿ô¡§È¿Å¾¤·¤Æ£±¤ò¤¿¤¹¡¡¢¨Ê̲ò
LET a=3
FOR i=0 TO N-1 !²¼¤Î°Ì¤«¤é
IF bit(i,a)=1 THEN EXIT FOR !£±¤¬¸«¤Ä¤«¤ë¤Þ¤Ç
LET a=bitreset(i,a) !£°¤Ë¤¹¤ë
NEXT i
FOR k=i+1 TO N-1 !³¤
LET a=bitreverse(k,a) !£°¤ò£±¤Ë¤¹¤ë
NEXT k
PRINT a
!²Ã»» a+b
LET a=123
LET b=45
DO WHILE bitand(a,b)>0
LET t=bitxor(a,b)
LET b=sft(bitand(a,b),1)
LET a=t
LOOP
PRINT bitxor(a,b)
END
!¥Ó¥Ã¥È±é»»´ØÏ¢¡¡¢¨UBASIC¤è¤ê
EXTERNAL FUNCTION bit(n,x) !nÈÖÌܤΥӥåÈÃÍ¡¡¢¨n,x¤ÏÀ°¿ô
IF n<>INT(n) OR x<>INT(x) THEN !À°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET bit=MOD(INT(x/2^n),2)
END IF
END FUNCTION
EXTERNAL FUNCTION bitset(n,x) !nÈÖÌܤΥӥåȤò£±¤Ë¤¹¤ë¡¡¢¨n,x¤ÏÈóÉéÀ°¿ô
IF n<0 OR n<>INT(n) OR x<0 OR x<>INT(x) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET d=2^n !n·å
LET bitset=(INT(x/d/2)*2+1)*d+MOD(x,d) !Â礤¤·å¡Ü£±¡Ü¾®¤µ¤¤·å
END IF
END FUNCTION
EXTERNAL FUNCTION bitreset(n,x) !nÈÖÌܤΥӥåȤò£°¤Ë¤¹¤ë¡¡¢¨n,x¤ÏÈóÉéÀ°¿ô
IF n<0 OR n<>INT(n) OR x<0 OR x<>INT(x) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET d=2^n !n·å
LET bitreset=INT(x/d/2)*2*d+MOD(x,d) !Â礤¤·å¡Ü£±¡Ü¾®¤µ¤¤·å
END IF
END FUNCTION
EXTERNAL FUNCTION bitreverse(n,x) !nÈÖÌܤΥӥåȤòȿž¤¹¤ë¡¡¢¨n,x¤ÏÈóÉéÀ°¿ô
IF n<0 OR n<>INT(n) OR x<0 OR x<>INT(x) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET d=2^n !n·å
LET a=INT(x/d)
LET bitreverse=(INT(a/2)*4-a+1)*d+MOD(x,d) !Â礤¤·å¡ÜNOT¡Ü¾®¤µ¤¤·å
END IF
END FUNCTION
EXTERNAL FUNCTION bitand(a,b) !¥Ó¥Ã¥È¤´¤È¤ÎÏÀÍýÀÑ¡¡¢¨a,b¤ÏÈóÉéÀ°¿ô
IF a<0 OR a<>INT(a) OR b<0 OR b<>INT(b) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET c=0 !ÃÍ
LET d=1
DO UNTIL a=0 OR b=0 !ºÇ²¼°Ì¤Î·å¤«¤é¡¢·å¿ô¤¬¾®¤µ¤¤Êý¤Þ¤Ç
LET aa=INT(a/2)
LET bb=INT(b/2)
LET c=c + MIN((a-aa*2),(b-bb*2)) * d !and(x,y)=MIN(x,y)
LET a=aa !¼¡¤Ø
LET b=bb
LET d=d*2
LOOP
LET bitand=c
END IF
END FUNCTION
EXTERNAL FUNCTION bitor(a,b) !¥Ó¥Ã¥È¤´¤È¤ÎÏÀÍýÏ¡¡¢¨a,b¤ÏÈóÉéÀ°¿ô
IF a<0 OR a<>INT(a) OR b<0 OR b<>INT(b) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET c=0
LET d=1
DO UNTIL a=0 AND b=0 !·å¿ô¤¬Â礤¤Êý
LET aa=INT(a/2)
LET bb=INT(b/2)
LET c=c+MAX((a-aa*2),(b-bb*2)) * d !or(x,y)=MAX(x,y)
LET a=aa !¼¡¤Ø
LET b=bb
LET d=d*2
LOOP
LET bitor=c
END IF
END FUNCTION
EXTERNAL FUNCTION bitxor(a,b) !¥Ó¥Ã¥È¤´¤È¤ÎÇÓ¾ŪÏÀÍýÏ¡¡¢¨a,b¤ÏÈóÉéÀ°¿ô
IF a<0 OR a<>INT(a) OR b<0 OR b<>INT(b) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET c=0
LET d=1
DO UNTIL a=0 AND b=0 !·å¿ô¤¬Â礤¤Êý
LET aa=INT(a/2)
LET bb=INT(b/2)
LET c=c + MOD((a-aa*2)+(b-bb*2),2) * d !xor(x,y)=MOD(x+y,2)
LET a=aa !¼¡¤Ø
LET b=bb
LET d=d*2
LOOP
LET bitxor=c
END IF
END FUNCTION
EXTERNAL FUNCTION bitcount(x) !£±¤Ç¤¢¤ë¥Ó¥Ã¥È¤Î¸Ä¿ô¡¡¢¨x¤ÏÈóÉéÀ°¿ô
IF x<0 OR x<>INT(x) THEN !ÈóÉéÀ°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
LET c=0 !ÃÍ
DO UNTIL x=0 !ºÇ²¼°Ì¤Î·å¤«¤é
LET xx=INT(x/2) !¾¦
LET c=c + (x-xx*2) !;¤ê
LET x=xx !¼¡¤Ø
LOOP
LET bitcount=c
END IF
END FUNCTION
EXTERNAL FUNCTION sft(x,n) !n¥Ó¥Ã¥È¤Î¥·¥Õ¥È¤¹¤ë¡¡¢¨n¤ÏÀ°¿ô
IF n<>INT(n) THEN !À°¿ô°Ê³°¤Ê¤é
PRINT "¥Ñ¥é¥á¡¼¥¿¤¬ÉÔŬÅö¤Ç¤¹¡£"
STOP
ELSE
IF n<0 THEN LET d=1/2 ELSE LET d=2
FOR i=1 TO ABS(n)
LET x=x*d
NEXT i
LET sft=x
END IF
END FUNCTION
OPTION BASE 0
PUBLIC NUMERIC MAXLEVEL
LET MAXLEVEL=10 !'¼¡¿ô
DIM X(1),Y(MAXLEVEL),L(MAXLEVEL)
LET DISPMODE=0 !' 0 or else
LET INTEGRAL=1 !' INTEGRAL >= 1
LET SWITCH=0 !' 0...ÊĤ¸¤¿¸ø¼° else...³«¤¤¤¿¸ø¼°
IF DISPMODE<>0 THEN
IF INTEGRAL > 1 THEN
PRINT "DIM A(";STR$(INTEGRAL);"),B(";STR$(INTEGRAL);"),N(";STR$(INTEGRAL);")"
PRINT "FOR I=1 TO";INTEGRAL
LET A$="(" & CHR$(34) & "
& STR$(I) & " & CHR$(34) & ")=" & CHR$(34) & ":"
LET B$="(I)"
ELSE
LET A$="=" & CHR$(34) & ":"
LET B$=""
END IF
LET C$="! INPUT PROMPT " & CHR$(34)
PRINT C$;"²¼¸Â ";A$;"A";B$
PRINT C$;"¾å¸Â ";A$;"B";B$
PRINT C$;"ʬ³ä¿ô";A$;"N";B$
PRINT "READ A";B$;",B";B$;",N";B$
IF INTEGRAL > 1 THEN PRINT "NEXT"
FOR I=1 TO INTEGRAL
PRINT "DATA 0,1,10"
NEXT I
FOR I=2 TO MAXLEVEL
PRINT "PRINT INTEGRAL";STR$(I);"(";
IF INTEGRAL=1 THEN
PRINT "A,B,N)"
ELSE
FOR J=1 TO INTEGRAL
PRINT "A(";STR$(J);"),B(";STR$(J);"),";
NEXT J
FOR J=1 TO INTEGRAL
PRINT "N(";STR$(J);")";
IF J < INTEGRAL THEN PRINT ",";
NEXT J
PRINT ")"
END IF
NEXT I
PRINT "END"
PRINT
PRINT "EXTERNAL FUNCTION FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X";STR$(I);
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")"
PRINT "LET S=1";
FOR I=1 TO INTEGRAL
PRINT "-X";STR$(I);"*X";STR$(I);
NEXT I
PRINT
PRINT "IF S > 0 THEN"
PRINT "LET FUNC=SQR(S)"
PRINT "ELSE"
PRINT "LET FUNC=0"
PRINT "END IF"
PRINT "END FUNCTION"
PRINT
END IF
LET X(1)=1
FOR N=1 TO MAXLEVEL-1
FOR I=0 TO N
CALL CLR(Y)
LET P=1
LET Y(0)=1
FOR J=0 TO N
IF I<>J THEN
LET X(0)=-J
CALL MUL(Y,X)
LET P=P*(I-J)
END IF
NEXT J
CALL INTEGRAL(Y)
IF SWITCH=0 THEN
LET L(I)=HORNER(Y,N)/P
ELSE
LET L(I)=(HORNER(Y,N+1)-HORNER(Y,-1))/P
END IF
NEXT I
IF DISPMODE<>0 THEN
PRINT "EXTERNAL FUNCTION INTEGRAL";STR$(N+1);"(";
IF INTEGRAL > 1 THEN
FOR J=1 TO INTEGRAL
PRINT "A";STR$(J);",B";STR$(J);",";
NEXT J
FOR J=1 TO INTEGRAL
PRINT "N";STR$(J);
IF J < INTEGRAL THEN PRINT ",";
NEXT J
ELSE
PRINT "A,B,N";
END IF
PRINT ")"
IF SWITCH=0 THEN LET A$=STR$(N) ELSE LET A$=STR$(N+2)
IF INTEGRAL=1 THEN
PRINT "LET H=(B-A)/N/";A$
PRINT "LET S=0"
PRINT "FOR K=0 TO N-1"
PRINT "LET S=S";
FOR I=0 TO N
IF SWITCH=0 THEN LET B$=STR$(I) ELSE LET B$=STR$(I+1)
IF L(I) < 0 THEN PRINT "-"; ELSE PRINT "+";
PRINT STR$(ABS(L(I)));"*H*FUNC(A+H*(";A$;"*K+";B$;"))";
NEXT I
PRINT
PRINT "NEXT"
ELSE
IF SWITCH=0 THEN
PRINT "DIM R(0 TO ";STR$(N);")"
ELSE
PRINT "DIM R(";STR$(N+1);")"
END IF
FOR I=0 TO N
IF SWITCH=0 THEN LET B$=STR$(I) ELSE LET B$=STR$(I+1)
PRINT "R(";B$;")=";
IF L(I) < 0 THEN PRINT "-";
PRINT STR$(ABS(L(I)))
NEXT I
FOR J=1 TO INTEGRAL
PRINT
"LET H";STR$(J);"=(B";STR$(J);"-A";STR$(J);")/N";STR$(J);"/";A$
NEXT J
PRINT "LET S=0"
FOR J=INTEGRAL TO 1 STEP -1
PRINT "FOR K";STR$(J);"=0 TO N";STR$(J);"-1"
NEXT J
FOR J=1 TO INTEGRAL
IF SWITCH=0 THEN
PRINT "FOR J";STR$(J);"=0 TO";N
ELSE
PRINT "FOR J";STR$(J);"=1 TO";N+1
END IF
NEXT J
PRINT "LET S=S+";
FOR J=1 TO INTEGRAL
PRINT "R(J";STR$(J);")*";
NEXT J
FOR I=1 TO INTEGRAL
PRINT "H";STR$(I);"*";
NEXT I
PRINT "FUNC(";
FOR I=1 TO INTEGRAL
PRINT
"A";STR$(I);"+H";STR$(I);"*(";A$;"*K";STR$(I);"+J";STR$(I);")";
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")"
FOR I=1 TO INTEGRAL*2
PRINT "NEXT"
NEXT I
END IF
PRINT "LET INTEGRAL";STR$(N+1);"=S"
PRINT "END FUNCTION"
ELSE
PRINT "¢é(x";STR$(N);",x0)f(x)dx=";
FOR I=0 TO N
IF L(I) < 0 THEN
PRINT "-";
ELSE
IF I > 0 THEN PRINT "+";
END IF
PRINT STR$(ABS(L(I)));"*h*f(x";STR$(I);")";
NEXT I
PRINT
END IF
PRINT
NEXT N
END
EXTERNAL SUB MUL(A(),B())
OPTION BASE 0
DIM C(MAXLEVEL)
FOR I=0 TO MAXLEVEL-1
FOR J=0 TO 1
LET C(I+J)=C(I+J)+A(I)*B(J)
NEXT J
NEXT I
CALL COPY(A,C)
END SUB
EXTERNAL FUNCTION HORNER(A(),XX)
FOR N=MAXLEVEL TO 0 STEP -1
IF A(N)<>0 THEN EXIT FOR
NEXT N
LET Y=A(N)
FOR I=N-1 TO 0 STEP -1
LET Y=Y*XX+A(I)
NEXT I
LET HORNER=Y
END FUNCTION
EXTERNAL SUB COPY(X(),Y())
FOR I=0 TO MAXLEVEL
LET X(I)=Y(I)
NEXT I
END SUB
EXTERNAL SUB CLR(X())
FOR I=0 TO MAXLEVEL
LET X(I)=0
NEXT I
END SUB
EXTERNAL SUB INTEGRAL(A())
OPTION BASE 0
DIM B(MAXLEVEL)
FOR I=MAXLEVEL-1 TO 0 STEP -1
LET B(I+1)=A(I)/(I+1)
NEXT I
CALL COPY(A,B)
END SUB
OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
PUBLIC NUMERIC MAXLEVEL,EPS
LET MAXLEVEL=10 !'¼¡¿ô
DIM X(MAXLEVEL),W(MAXLEVEL)
LET KETA=16 !'µá¤á¤ë·å¿ô
LET EPS=10^(-KETA)
LET DISPMODE=0 !' 0 or else
LET INTEGRAL=1 !' INTEGRAL >= 1
IF DISPMODE<>0 THEN
CALL LEGENDREPARA(MAXLEVEL,X,W)
PRINT "DIM X(";STR$(MAXLEVEL);"),W(";STR$(MAXLEVEL);")"
FOR I=1 TO INTEGRAL
PRINT "! INPUT PROMPT ";CHR$(34);"²¼¸Â ";STR$(I);"=";CHR$(34);":A";STR$(I)
PRINT "! INPUT PROMPT ";CHR$(34);"¾å¸Â ";STR$(I);"=";CHR$(34);":B";STR$(I)
NEXT I
FOR I=1 TO INTEGRAL
PRINT "LET A";STR$(I);"=0"
PRINT "LET B";STR$(I);"=1"
NEXT I
FOR J=1 TO INTEGRAL
PRINT "LET U";STR$(J);"=(B";STR$(J);"+A";STR$(J);")/2"
PRINT "LET V";STR$(J);"=(B";STR$(J);"-A";STR$(J);")/2"
NEXT J
PRINT "FOR I=1 TO";MAXLEVEL
PRINT "READ X(I),W(I)"
PRINT "NEXT"
PRINT "LET S=0"
FOR J=1 TO INTEGRAL
PRINT "FOR K";STR$(J);"=1 TO";MAXLEVEL
NEXT J
PRINT "LET S=S+";
FOR J=1 TO INTEGRAL
PRINT "W(K";STR$(J);")*";
NEXT J
PRINT "FUNC(";
FOR I=1 TO INTEGRAL
PRINT "U";STR$(I);"+V";STR$(I);"*X(K";STR$(I);")";
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")";
FOR J=1 TO INTEGRAL
PRINT "*V";STR$(J);
NEXT J
PRINT
FOR J=1 TO INTEGRAL
PRINT "NEXT"
NEXT J
PRINT "PRINT S"
FOR I=1 TO MAXLEVEL
PRINT "DATA ";
PRINT USING "#." & REPEAT$("#",KETA):X(I);
PRINT ",";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
PRINT "END"
PRINT
PRINT "EXTERNAL FUNCTION FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X";STR$(I);
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")"
PRINT "LET S=1";
FOR I=1 TO INTEGRAL
PRINT "-X";STR$(I);"*X";STR$(I);
NEXT I
PRINT
PRINT "IF S > 0 THEN"
PRINT "LET FUNC=SQR(S)"
PRINT "ELSE"
PRINT "LET FUNC=0"
PRINT "END IF"
PRINT "END FUNCTION"
ELSE
FOR N=2 TO MAXLEVEL
PRINT TAB(8+KETA/2);"ʬÅÀ";TAB(8+KETA*1.5);" ½Å¤ß"
CALL LEGENDREPARA(N,X,W)
FOR I=1 TO N
PRINT "No.";I;":";
PRINT USING "#." & REPEAT$("#",KETA):X(I);
PRINT " ";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
NEXT N
END IF
END
EXTERNAL SUB LEGENDREPOLY(KK,NEWP()) !'¥ë¥¸¥ã¥ó¥É¥ë¿¹à¼°(·¸¿ô)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM P(KK+1),OLDP(KK),PP(KK)
LET OLDP(0)=1
LET P(1)=1
FOR I=0 TO KK
LET NEWP(I)=0
NEXT I
FOR K=2 TO KK
FOR J=1 TO K
LET NEWP(J)=NEWP(J)+(2*K-1)/K*P(J-1)
LET NEWP(J-1)=NEWP(J-1)-(K-1)/K*OLDP(J-1)
NEXT J
IF K < KK THEN
FOR I=0 TO K
LET OLDP(I)=P(I)
LET P(I)=NEWP(I)
LET NEWP(I)=0
NEXT I
END IF
NEXT K
END SUB
EXTERNAL FUNCTION LEGENDRE(K,X) !'¥ë¥¸¥ã¥ó¥É¥ë¿¹à¼°(ÃÍ)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM PP(K+1)
LET PP(0)=1
LET PP(1)=X
FOR N=1 TO K-1
LET PP(N+1)=((2*N+1)*X*PP(N)-N*PP(N-1))/(N+1)
NEXT N
LET LEGENDRE=PP(K)
END FUNCTION
EXTERNAL FUNCTION WEIGHT(N,X) !'½Å¤ß
OPTION ARITHMETIC DECIMAL_HIGH
LET WEIGHT=2*(1-X^2)/(N*LEGENDRE(N-1,X))^2
END FUNCTION
EXTERNAL FUNCTION HORNER(N,A(),X)
OPTION ARITHMETIC DECIMAL_HIGH
LET Y=A(N)
FOR I=N-1 TO 0 STEP -1
LET Y=Y*X+A(I)
NEXT I
LET HORNER=Y
END FUNCTION
EXTERNAL SUB DERIVATIVE(A(),B()) !'Èùʬ
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=MAXLEVEL TO 1 STEP -1
LET B(I-1)=I*A(I)
NEXT I
LET B(MAXLEVEL)=0
END SUB
EXTERNAL SUB COPY(X(),Y())
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=0 TO MAXLEVEL
LET X(I)=Y(I)
NEXT I
END SUB
---------------------------------------------------
¥ë¥¸¥ã¥ó¥É¥ë¿¹à¼°É½¼¨
ÍÍý¿ô¥â¡¼¥É¤Ç¤ª»î¤·¤¯¤À¤µ¤¤
OPTION BASE 0
PUBLIC NUMERIC MAXLEVEL
LET MAXLEVEL=20 !'¼¡¿ô
DIM P(MAXLEVEL)
PRINT "P(0)=1"
PRINT "P(1)=X"
FOR K=2 TO MAXLEVEL
CALL LEGENDREPOLY(K,P) !'¾åµ»²¾È(OPTION ARITHMETIC DECIMAL_HIGH¤ò³°¤¹)
PRINT "P(";STR$(K);")=";
CALL DISPLAY(P)
NEXT K
END
EXTERNAL SUB DISPLAY(A())
FOR N=MAXLEVEL TO 0 STEP -1
IF A(N)<>0 THEN EXIT FOR
NEXT N
IF N > 1 THEN
IF A(N) < 0 THEN PRINT "-";
IF ABS(A(N))<>1 THEN
PRINT STR$(ABS(A(N)));"*X^";STR$(N);
ELSE
PRINT "X^";STR$(N);
END IF
END IF
FOR I=N-1 TO 2 STEP -1
IF A(I)<>0 THEN
IF A(I) < 0 THEN PRINT "-"; ELSE PRINT "+";
IF ABS(A(I))<>1 THEN
PRINT STR$(ABS(A(I)));"*X^";STR$(I);
ELSEIF ABS(A(I))=1 THEN
PRINT "X^";STR$(I);
END IF
END IF
NEXT I
IF A(1)<>0 THEN
IF N > 1 THEN
IF A(1) < 0 THEN PRINT "-"; ELSE PRINT "+";
END IF
IF ABS(A(1))<>1 THEN
PRINT STR$(ABS(A(1)));"*X";
ELSEIF ABS(A(1))=1 THEN
PRINT "X";
END IF
END IF
IF A(0)<>0 THEN
IF A(0) < 0 THEN PRINT "-"; ELSE PRINT "+";
PRINT STR$(ABS(A(0)));
END IF
PRINT
END SUB
OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
PUBLIC NUMERIC MAXLEVEL,EPS
LET MAXLEVEL=10
DIM X(MAXLEVEL),W(MAXLEVEL)
LET KETA=16
LET EPS=10^(-KETA)
LET DISPMODE=0 !' 0 or else
LET INTEGRAL=1 !' INTEGRAL >= 1
IF DISPMODE<>0 THEN
CALL LAGUERREPARA(MAXLEVEL,X,W)
PRINT "DIM X(";STR$(MAXLEVEL);"),W(";STR$(MAXLEVEL);")"
PRINT "FOR I=1 TO";MAXLEVEL
PRINT "READ X(I),W(I)"
PRINT "NEXT"
FOR I=1 TO INTEGRAL
PRINT "INPUT PROMPT ";CHR$(34);"GAMMA(";
FOR J=1 TO INTEGRAL
PRINT "X";STR$(J);
IF J < INTEGRAL THEN PRINT ",";
NEXT J
PRINT ") X";STR$(I);"=";CHR$(34);":U";STR$(I)
NEXT I
PRINT "LET S=0"
FOR I=1 TO INTEGRAL
PRINT "FOR I";STR$(I);"=1 TO";MAXLEVEL
NEXT I
PRINT "LET S=S+";
FOR I=1 TO INTEGRAL
PRINT "W(I";STR$(I);")*";
NEXT I
PRINT "FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X(I";STR$(I);"),";
NEXT I
FOR I=1 TO INTEGRAL
PRINT "U";STR$(I);
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")*EXP(";
FOR I=1 TO INTEGRAL
PRINT "X(I";STR$(I);")";
IF I < INTEGRAL THEN PRINT "+";
NEXT I
PRINT ")"
FOR I=1 TO INTEGRAL
PRINT "NEXT"
NEXT I
PRINT "PRINT S"
FOR I=1 TO MAXLEVEL
PRINT "DATA ";
PRINT USING "##." & REPEAT$("#",KETA):X(I);
PRINT ",";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
PRINT "END"
PRINT
PRINT "EXTERNAL FUNCTION FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X";STR$(I);",";
NEXT I
FOR I=1 TO INTEGRAL
PRINT "U";STR$(I);
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")"
PRINT "FUNC=";
FOR I=1 TO INTEGRAL
PRINT "EXP(-X";STR$(I);")*X";STR$(I);"^(U";STR$(I);"-1)";
IF I < INTEGRAL THEN PRINT "*";
NEXT I
PRINT
PRINT "END FUNCTION"
ELSE
FOR N=2 TO MAXLEVEL
CALL LAGUERREPARA(N,X,W)
PRINT TAB(8+KETA/2);"ʬÅÀ";TAB(8+KETA*1.5);" ½Å¤ß"
FOR I=1 TO N
PRINT "No.";I;":";
PRINT USING "##." & REPEAT$("#",KETA):X(I);
PRINT " ";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
NEXT N
END IF
END
EXTERNAL SUB LAGUERREPARA(N,A(),W())
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM LA(MAXLEVEL+1),D(MAXLEVEL)
CALL LAGUERREPOLY(N,LA)
FOR I=0 TO N
LET LA(I)=LA(I)/LA(N)
NEXT I
FOR I=1 TO N
CALL DERIVATIVE(LA,D)
LET XX=0
DO
LET X=XX
LET XX=X-HORNER(N,LA,X)/HORNER(N,D,X)
LOOP UNTIL ABS(HORNER(N,LA,XX)) < EPS AND ABS(X-XX) < EPS
LET A(I)=XX
LET W(I)=WEIGHT(N,XX)
CALL DIV(LA,XX)
NEXT I
END SUB
EXTERNAL SUB LAGUERREPOLY(N,NEWP()) !'¥é¥²¡¼¥ë¿¹à¼°(·¸¿ô)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM P(N+1),OLDP(N)
LET OLDP(0)=1
LET P(1)=-1
LET P(0)=1
FOR I=0 TO N
LET NEWP(I)=0
NEXT I
FOR K=2 TO N
FOR J=0 TO K
LET NEWP(J)=NEWP(J)+(2*K-1)*P(J)-(K-1)^2*OLDP(J)
LET NEWP(J+1)=NEWP(J+1)-P(J)
NEXT J
IF K < N THEN
FOR I=0 TO K
LET OLDP(I)=P(I)
LET P(I)=NEWP(I)
LET NEWP(I)=0
NEXT I
END IF
NEXT K
END SUB
EXTERNAL FUNCTION LAGUERRE(NN,X) !'¥é¥²¡¼¥ë¿¹à¼°(ÃÍ)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM L(NN+1)
LET L(0)=1
LET L(1)=1-X
FOR N=1 TO NN-1
LET L(N+1)=(2*N+1-X)*L(N)-N*N*L(N-1)
NEXT N
LET LAGUERRE=L(NN)
END FUNCTION
EXTERNAL FUNCTION WEIGHT(N,X)
OPTION ARITHMETIC DECIMAL_HIGH
LET WEIGHT=FAC(N)^2/(X*LAGUERREDIFF(N,X)^2)
END FUNCTION
EXTERNAL FUNCTION LAGUERREDIFF(N,X)
OPTION ARITHMETIC DECIMAL_HIGH
LET LAGUERREDIFF=(LAGUERRE(N+1,X)-(N+1-X)*LAGUERRE(N,X))/X
END FUNCTION
EXTERNAL FUNCTION FAC(X)
OPTION ARITHMETIC DECIMAL_HIGH
LET S=1
FOR I=2 TO X
LET S=S*I
NEXT I
LET FAC=S
END FUNCTION
EXTERNAL SUB DERIVATIVE(A(),B())
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=MAXLEVEL TO 1 STEP -1
LET B(I-1)=I*A(I)
NEXT I
LET B(MAXLEVEL)=0
END SUB
EXTERNAL FUNCTION HORNER(N,A(),X)
OPTION ARITHMETIC DECIMAL_HIGH
LET Y=A(N)
FOR I=N-1 TO 0 STEP -1
LET Y=Y*X+A(I)
NEXT I
LET HORNER=Y
END FUNCTION
EXTERNAL SUB DIV(A(),P)
OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
DIM C(MAXLEVEL)
FOR I=MAXLEVEL TO 1 STEP -1
LET C(I-1)=A(I)+C(I)*P
NEXT I
CALL COPY(A,C)
END SUB
EXTERNAL SUB COPY(X(),Y())
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=0 TO MAXLEVEL
LET X(I)=Y(I)
NEXT I
END SUB
OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
PUBLIC NUMERIC MAXLEVEL,EPS
LET MAXLEVEL=10
DIM X(MAXLEVEL),W(MAXLEVEL)
LET KETA=16
LET EPS=10^(-KETA)
LET DISPMODE=0 !' 0 or else
LET INTEGRAL=1 !' INTEGRAL >= 1
IF DISPMODE<>0 THEN
CALL HERMITEPARA(MAXLEVEL,X,W)
PRINT "DIM X(";STR$(MAXLEVEL);"),W(";STR$(MAXLEVEL);")"
PRINT "FOR I=1 TO";MAXLEVEL
PRINT "READ X(I),W(I)"
PRINT "NEXT"
PRINT "LET S=0"
FOR I=1 TO INTEGRAL
PRINT "FOR I";STR$(I);"=1 TO";MAXLEVEL
NEXT I
PRINT "LET S=S+";
FOR I=1 TO INTEGRAL
PRINT "W(I";STR$(I);")*";
NEXT I
PRINT "FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X(I";STR$(I);")";
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")*EXP(";
FOR I=1 TO INTEGRAL
PRINT "X(I";STR$(I);")^2";
IF I < INTEGRAL THEN PRINT "+";
NEXT I
PRINT ")"
FOR I=1 TO INTEGRAL
PRINT "NEXT"
NEXT I
PRINT "PRINT S,PI^";STR$(INTEGRAL/2)
FOR I=1 TO MAXLEVEL
PRINT "DATA ";
PRINT USING "##." & REPEAT$("#",KETA):X(I);
PRINT ",";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
PRINT "END"
PRINT
PRINT "EXTERNAL FUNCTION FUNC(";
FOR I=1 TO INTEGRAL
PRINT "X";STR$(I);
IF I < INTEGRAL THEN PRINT ",";
NEXT I
PRINT ")"
PRINT "LET FUNC=EXP(";
FOR I=1 TO INTEGRAL
PRINT "-X";STR$(I);"^2";
NEXT I
PRINT ")"
PRINT "END FUNCTION"
ELSE
FOR N=2 TO MAXLEVEL
CALL HERMITEPARA(N,X,W)
PRINT TAB(8+KETA/2);"ʬÅÀ";TAB(8+KETA*1.5);" ½Å¤ß"
FOR I=1 TO N
PRINT "No.";I;":";
PRINT USING "##." & REPEAT$("#",KETA):X(I);
PRINT " ";
PRINT USING "#." & REPEAT$("#",KETA) & "^^^^":W(I)
NEXT I
NEXT N
END IF
END
EXTERNAL SUB HERMITEPARA(N,A(),W())
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM H(MAXLEVEL),D(MAXLEVEL)
CALL HERMITEPOLY(N,H)
FOR I=0 TO N
LET H(I)=H(I)/H(N)
NEXT I
FOR I=1 TO N
CALL DERIVATIVE(H,D)
LET XX=-15
DO
LET X=XX
LET XX=X-HORNER(N,H,X)/HORNER(N,D,X)
LOOP UNTIL ABS(HORNER(N,H,XX)) < EPS AND ABS(X-XX) < EPS
LET A(I)=XX
LET W(I)=WEIGHT(N,XX)
CALL DIV(H,XX)
NEXT I
END SUB
EXTERNAL SUB HERMITEPOLY(N,NEWP()) !'¥¨¥ë¥ß¡¼¥È¿¹à¼°(·¸¿ô)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM P(N+1),OLDP(N)
LET OLDP(0)=1
LET P(1)=2
FOR I=0 TO N
LET NEWP(I)=0
NEXT I
FOR K=2 TO N
FOR J=1 TO K
LET NEWP(J)=NEWP(J)+2*P(J-1)
LET NEWP(J-1)=NEWP(J-1)-2*(K-1)*OLDP(J-1)
NEXT J
IF K < N THEN
FOR I=0 TO K
LET OLDP(I)=P(I)
LET P(I)=NEWP(I)
LET NEWP(I)=0
NEXT I
END IF
NEXT K
END SUB
EXTERNAL FUNCTION HERMITE(NN,X) !'¥¨¥ë¥ß¡¼¥È¿¹à¼°(ÃÍ)
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
DIM H(NN+1)
LET H(0)=1
LET H(1)=2*X
FOR N=1 TO NN-1
LET H(N+1)=2*X*H(N)-2*N*H(N-1)
NEXT N
LET HERMITE=H(NN)
END FUNCTION
EXTERNAL FUNCTION WEIGHT(N,X) !'½Å¤ß
OPTION ARITHMETIC DECIMAL_HIGH
LET WEIGHT=2^(N+1)*FAC(N)*SQR(PI)/HERMITE(N+1,X)^2
END FUNCTION
EXTERNAL FUNCTION FAC(X)
OPTION ARITHMETIC DECIMAL_HIGH
LET S=1
FOR I=2 TO X
LET S=S*I
NEXT I
LET FAC=S
END FUNCTION
EXTERNAL FUNCTION HORNER(N,A(),X)
OPTION ARITHMETIC DECIMAL_HIGH
LET Y=A(N)
FOR I=N-1 TO 0 STEP -1
LET Y=Y*X+A(I)
NEXT I
LET HORNER=Y
END FUNCTION
EXTERNAL SUB DERIVATIVE(A(),B())
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=MAXLEVEL TO 1 STEP -1
LET B(I-1)=I*A(I)
NEXT I
LET B(MAXLEVEL)=0
END SUB
EXTERNAL SUB DIV(A(),P)
OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
DIM C(MAXLEVEL)
FOR I=MAXLEVEL TO 1 STEP -1
LET C(I-1)=A(I)+C(I)*P
NEXT I
CALL COPY(A,C)
END SUB
EXTERNAL SUB COPY(X(),Y())
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=0 TO MAXLEVEL
LET X(I)=Y(I)
NEXT I
END SUB
PUBLIC NUMERIC MAXLEVEL
OPTION BASE 0
LET MAXLEVEL=10 !'ºÇÂ缡¿ô (MAXLEVEL > N)
LET N=5 !'¥Ç¡¼¥¿¿ô
DIM X(N),Y(N),A(MAXLEVEL),B(MAXLEVEL)
FOR I=1 TO N
READ X(I),Y(I) !'y=x^2
NEXT I
CALL LARGRANGE(N,X,Y,A) !'¥é¥°¥é¥ó¥¸¥å¿¹à¼°
CALL INTEGRAL(A,B) !'ÀÑʬ
PRINT HORNER(N,B,X(N))-HORNER(N,B,X(1));X(N)^3/3-X(1)^3/3
!'CALL DERIVATIVE(A,B) !'Èùʬ
!'INPUT PROMPT "f'(x) x=":XX
!'PRINT HORNER(N,B,XX);2*XX
DATA 0,0 !'Î¥»¶Ãͥǡ¼¥¿ XÃͤÏÅù´Ö³Ö¤Ç¤Ê¤¯¤Æ¤â¤¤¤¤
DATA 1,1
DATA 3,9
DATA 4,16
DATA 6,36
END
EXTERNAL SUB LARGRANGE(N,X(),Y(),A())
OPTION BASE 0
DIM U(MAXLEVEL),V(MAXLEVEL)
CALL CLR(A)
LET U(1)=1
FOR I = 1 TO N
LET R = Y(I)
CALL CLR(V)
LET V(0)=1
FOR J = 1 TO N
IF I <> J THEN
LET U(0)=-X(J)
CALL MUL(V,U)
LET R = R / (X(I)-X(J))
END IF
NEXT J
CALL SHORTMUL(V,R)
CALL ADD(A,V)
NEXT I
END SUB
EXTERNAL FUNCTION HORNER(N,A(),XX)
LET Y=A(N)
FOR I=N-1 TO 0 STEP -1
LET Y=Y*XX+A(I)
NEXT I
LET HORNER=Y
END FUNCTION
EXTERNAL SUB MUL(A(),B())
OPTION BASE 0
DIM C(MAXLEVEL)
FOR I=0 TO MAXLEVEL-1
FOR J=0 TO 1
LET C(I+J)=C(I+J)+A(I)*B(J)
NEXT J
NEXT I
CALL COPY(A,C)
END SUB
EXTERNAL SUB INTEGRAL(A(),B())
FOR I=MAXLEVEL-1 TO 0 STEP -1
LET B(I+1)=A(I)/(I+1)
NEXT I
LET B(0)=0
END SUB
EXTERNAL SUB ADD(A(),B())
FOR I=0 TO MAXLEVEL
LET A(I)=A(I)+B(I)
NEXT I
END SUB
EXTERNAL SUB COPY(X(),Y())
FOR I=0 TO MAXLEVEL
LET X(I)=Y(I)
NEXT I
END SUB
EXTERNAL SUB CLR(X())
FOR I=0 TO MAXLEVEL
LET X(I)=0
NEXT I
END SUB
EXTERNAL SUB SHORTMUL(A(),X)
FOR I=0 TO MAXLEVEL
LET A(I)=A(I)*X
NEXT I
END SUB
EXTERNAL SUB DERIVATIVE(A(),B())
FOR I=MAXLEVEL TO 1 STEP -1
LET B(I-1)=I*A(I)
NEXT I
LET B(MAXLEVEL)=0
END SUB
LET N=5 !'¥Ç¡¼¥¿¿ô ¾ò·ï...MOD(N-1,M-1)=0
LET M=3 !'¾®¶è´Ö ´Ö³Ö¿ô
DIM X(N),Y(N),XX(M),YY(M)
FOR I=1 TO N
READ X(I),Y(I) !'y=x^2
NEXT I
LET S=0
FOR I=1 TO N-M+1 STEP M-1 !'¾®¶è´Ö¤Ëʬ³ä¤¹¤ë X(1)¡ÁX(3),X(3)¡ÁX(5),X(5)¡ÁX(7),...
FOR K=0 TO M-1
LET XX(K+1)=X(I+K)
LET YY(K+1)=Y(I+K)
NEXT K
LET S=S+INTEGRAL(XX,YY,M) !'Á´¶è´Öʬ¤ò¤·¹ç¤ï¤»¤ë
!'LET SS=SS+INTEGRAL2(XX,YY,M) !'²¼µ»²¾È
NEXT I
PRINT S;(X(N)^3-X(1)^3)/3 !' ;SS
!'INPUT PROMPT "f'(x) x=":XX
!'PRINT DERIVATIVE(N,X,Y,XX);2*XX !'²¼µ»²¾È
DATA 0,0 !'Î¥»¶Ãͥǡ¼¥¿ XÃͤÏÅù´Ö³Ö¤Ç¤Ê¤¯¤Æ¤â¤¤¤¤
DATA 1,1
DATA 3,9
DATA 4,16
DATA 6,36
END
EXTERNAL FUNCTION INTEGRAL(X(),Y(),M)
DECLARE EXTERNAL FUNCTION COMB
DIM H(M),XX(M),TEMP(M)
FOR I=1 TO M
LET H(I)=1
LET K=0
FOR J=1 TO M
IF I<>J THEN
LET H(I)=H(I)/(X(I)-X(J))
LET K=K+1
LET XX(K)=X(J)
END IF
NEXT J
LET SIGN=1
FOR J=M TO 1 STEP -1
LET SM=SM+SIGN*X(M)^J/J*COMB(XX,M,M-J,TEMP,1)*H(I)*Y(I)
LET S1=S1+SIGN*X(1)^J/J*COMB(XX,M,M-J,TEMP,1)*H(I)*Y(I)
LET SIGN=-SIGN
NEXT J
NEXT I
LET INTEGRAL=SM-S1
END FUNCTION
EXTERNAL FUNCTION COMB(X(),N,R,A(),K)
IF R=0 THEN
LET S=1
FOR I=1 TO N
IF A(I)=1 THEN LET S=S*X(I)
NEXT I
LET COMB=S
ELSE
FOR I=K TO N-R+1
LET A(I)=1
LET SS=SS+COMB(X,N,R-1,A,I+1)
LET A(I)=0
NEXT I
LET COMB=SS
END IF
END FUNCTION
EXTERNAL FUNCTION INTEGRAL2(X(),Y(),N)
DIM A(N,N),B(N)
FOR I=1 TO N
FOR J=1 TO N
LET A(I,J)=X(J)^(I-1)
NEXT J
LET B(I)=(X(N)^I-X(1)^I)/I
NEXT I
MAT A=INV(A)
MAT B=A*B
FOR I=1 TO N
LET S=S+B(I)*Y(I)
NEXT I
LET INTEGRAL2=S
END FUNCTION
EXTERNAL FUNCTION DERIVATIVE(N,X(),Y(),XX)
DIM A(N,N),B(N)
FOR I=1 TO N
FOR J=1 TO N
LET A(I,J)=X(J)^I
NEXT J
LET B(I)=I*XX^(I-1)
!'LET B(I)=I*(I-1)*XX^(I-2) !'2³¬Èùʬ
NEXT I
MAT A=INV(A)
MAT B=A*B
FOR I=1 TO N
LET S=S+B(I)*Y(I)
NEXT I
LET DERIVATIVE=S
END FUNCTION
EXTERNAL FUNCTION DIFF(N,X(),Y(),XX)
DIM A(N)
FOR I=1 TO N
LET L=1
LET KK=0
FOR J=1 TO N
IF J<>I THEN
LET KK=KK+1
LET L=L*(X(I)-X(J))
LET A(KK)=X(J)
END IF
NEXT J
LET S1=0
FOR J=1 TO N-1
LET S=1
FOR K=1 TO N-1
IF K<>J THEN LET S=S*(XX-A(K))
NEXT K
LET S1=S1+S
NEXT J
LET SS=SS+S1*Y(I)/L
NEXT I
LET DIFF=SS
END FUNCTION
PUBLIC NUMERIC LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM A(LEVEL),B(LEVEL),N(LEVEL),AA(LEVEL)
FOR I=1 TO LEVEL
!'INPUT PROMPT "²¼¸Â =":A(I)
!'INPUT PROMPT "¾å¸Â =":B(I)
!'INPUT PROMPT "ʬ³ä¿ô=":N(I)
READ A(I),B(I),N(I)
NEXT I
DATA 0,1,10
DATA 0,1,10
DATA 0,1,10
DATA 0,1,10
PRINT SIMPSONRECURSIVE(LEVEL,AA,A,B,N)
END
EXTERNAL FUNCTION SIMPSONRECURSIVE(LEV,AA(),A(),B(),N())
IF LEV=0 THEN
LET SIMPSONRECURSIVE=FUNC(AA)
ELSE
LET H=(B(LEV)-A(LEV))/N(LEV)/2
FOR K=0 TO N(LEV)-1
LET AA(LEV)=A(LEV)+H*K*2
LET S=S+1/3*H*SIMPSONRECURSIVE(LEV-1,AA,A,B,N)
LET AA(LEV)=A(LEV)+H*(2*K+1)
LET S=S+4/3*H*SIMPSONRECURSIVE(LEV-1,AA,A,B,N)
LET AA(LEV)=A(LEV)+H*(2*K+2)
LET S=S+1/3*H*SIMPSONRECURSIVE(LEV-1,AA,A,B,N)
NEXT K
LET SIMPSONRECURSIVE=S
END IF
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
LET S=1
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
IF S > 0 THEN
LET FUNC=SQR(S)
ELSE
LET FUNC=0
END IF
END FUNCTION
PUBLIC NUMERIC W(10),X(10),LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM A(LEVEL),B(LEVEL),XX(LEVEL),WW(LEVEL)
FOR I=1 TO LEVEL
READ A(I),B(I)
NEXT I
DATA 0,1
DATA 0,1
DATA 0,1
DATA 0,1
RESTORE 10
FOR I=1 TO 10
READ X(I),W(I)
NEXT I
PRINT LEGENDRERECURSIVE(LEVEL,XX,WW,A,B,10)
10 DATA -.9739065285171717,6.6671344308688138E-02 !'10ÅÀ ¥ë¥¸¥ã¥ó¥É¥ë§
DATA -.8650633666889845,1.4945134915058059E-01
DATA -.6794095682990244,2.1908636251598204E-01
DATA -.4333953941292472,2.6926671930999636E-01
DATA -.1488743389816312,2.9552422471475287E-01
DATA .1488743389816312,2.9552422471475287E-01
DATA .4333953941292472,2.6926671930999636E-01
DATA .6794095682990244,2.1908636251598204E-01
DATA .8650633666889845,1.4945134915058059E-01
DATA .9739065285171717,6.6671344308688138E-02
END
EXTERNAL FUNCTION LEGENDRERECURSIVE(LEV,XX(),WW(),A(),B(),N)
IF LEV=0 THEN
LET LEGENDRERECURSIVE=FUNC(XX)
ELSE
FOR I=1 TO N
LET XX(LEV)=X(I)*(B(LEV)-A(LEV))/2+(A(LEV)+B(LEV))/2
LET WW(LEV)=W(I)*(B(LEV)-A(LEV))/2
LET S=S+LEGENDRERECURSIVE(LEV-1,XX,WW,A,B,N)*WW(LEV)
NEXT I
LET LEGENDRERECURSIVE=S
END IF
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
LET S=1
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
IF S > 0 THEN
LET FUNC=SQR(S)
ELSE
LET FUNC=0
END IF
END FUNCTION
PUBLIC NUMERIC LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM A(LEVEL),B(LEVEL),N(LEVEL),X(LEVEL),W(LEVEL)
FOR I=1 TO LEVEL
!'INPUT PROMPT "²¼¸Â =":A(I)
!'INPUT PROMPT "¾å¸Â =":B(I)
!'INPUT PROMPT "ʬ³ä¿ô=":N(I)
READ A(I),B(I),N(I)
NEXT I
DATA 0,1,10
DATA 0,1,10
DATA 0,1,10
DATA 0,1,10
PRINT TCHEBYCHEFFRECURSIVE(LEVEL,X,W,A,B,N)
END
EXTERNAL FUNCTION TCHEBYCHEFFRECURSIVE(LEV,XX(),WW(),A(),B(),N())
IF LEV=0 THEN
LET TCHEBYCHEFFRECURSIVE=FUNC(XX)
ELSE
FOR I=0 TO N(LEV)-1
LET XX(LEV)=COS((2*I+1)/2/N(LEV)*PI)*(B(LEV)-A(LEV))/2+(A(LEV)+B(LEV))/2
LET WW(LEV)=SQR((B(LEV)-XX(LEV))*(XX(LEV)-A(LEV)))
LET S=S+TCHEBYCHEFFRECURSIVE(LEV-1,XX,WW,A,B,N)*WW(LEV)
NEXT I
LET TCHEBYCHEFFRECURSIVE=S*PI/N(LEV)
END IF
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
LET S=1
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
IF S > 0 THEN
LET FUNC=SQR(S)
ELSE
LET FUNC=0
END IF
END FUNCTION
PUBLIC NUMERIC LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM X(LEVEL)
PRINT DE(LEVEL,X,1/16);PI^(LEVEL/2)
END
EXTERNAL FUNCTION DE(LEV,X(),H)
IF LEV=0 THEN
LET DE=FUNC(X)
ELSE
FOR K=-4 TO 4 STEP H !'(Í×)Ä´À° K=-6¡Á6,H=1/1000 ÄøÅÙ
LET X(LEV)=Q(K)
LET S=S+H*DE(LEV-1,X,H)*QQ(K)
NEXT K
LET DE=S
END IF
END FUNCTION
EXTERNAL FUNCTION Q(X)
LET Q=SINH(PI/2*SINH(X))
END FUNCTION
EXTERNAL FUNCTION QQ(X)
LET QQ=PI/2*COSH(X)*COSH(PI/2*SINH(X))
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
LET S=0
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
LET FUNC=EXP(S)
END FUNCTION
RANDOMIZE
PUBLIC NUMERIC LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM A(LEVEL),B(LEVEL),N(LEVEL),AA(LEVEL)
FOR I=1 TO LEVEL
!'INPUT PROMPT "²¼¸Â =":A(I)
!'INPUT PROMPT "¾å¸Â =":B(I)
!'INPUT PROMPT "ʬ³ä¿ô=":N(I)
READ A(I),B(I),N(I)
NEXT I
PRINT MONTE(LEVEL,A,B,10000)
!'PRINT MONTE2(LEVEL,A,B,10000,2000)
!'PRINT MONTESIMPSON(LEVEL,A,B,10000)
!'PRINT MONTERECURSIVE(LEVEL,AA,A,B,N)
DATA 0,1,50
DATA 0,1,50
DATA 0,1,50
DATA 0,1,50
END
EXTERNAL FUNCTION MONTE(LEV,A(),B(),N)
RANDOMIZE
DIM AA(LEV)
LET H=1
FOR I=1 TO LEV
LET H=H*(B(I)-A(I))
NEXT I
FOR K=1 TO N
FOR I=1 TO LEV
LET AA(I)=A(I)+(B(I)-A(I))*RND
NEXT I
LET S=S+FUNC(AA)
NEXT K
LET MONTE=H*S/N
END FUNCTION
EXTERNAL FUNCTION MONTE2(LEV,A(),B(),N,NN)
RANDOMIZE
DIM AA(LEV)
LET HMAX=-MAXNUM
LET HMIN=MAXNUM
LET HH=1
FOR I=1 TO LEV
LET HH=HH*(B(I)-A(I))
NEXT I
FOR K=1 TO NN
FOR J=1 TO LEV
LET AA(J)=A(J)+(B(J)-A(J))*RND
NEXT J
LET H=FUNC(AA)
LET HMIN=MIN(HMIN,MIN(H,0))
LET HMAX=MAX(H,HMAX)
NEXT K
LET H=HMAX-HMIN
FOR K=1 TO N
FOR J=1 TO LEV
LET AA(J)=A(J)+(B(J)-A(J))*RND
NEXT J
LET Z=H*RND+HMIN
IF FUNC(AA) > 0 THEN
IF Z > 0 AND Z < FUNC(AA) THEN LET M1=M1+1
ELSE
IF Z < 0 AND Z > FUNC(AA) THEN LET M2=M2+1
END IF
NEXT K
LET MONTE2=HH*(M1-M2)/N*H
END FUNCTION
EXTERNAL FUNCTION MONTERECURSIVE(LEV,AA(),A(),B(),N()) !'ºÆµ¢¼°¥â¥ó¥Æ¥«¥ë¥í
IF LEV=0 THEN
LET MONTERECURSIVE=FUNC(AA)
ELSE
LET H=B(LEV)-A(LEV)
FOR K=1 TO N(LEV)
LET AA(LEV)=A(LEV)+H*RND
LET S=S+MONTERECURSIVE(LEV-1,AA,A,B,N)
NEXT K
LET MONTERECURSIVE=H*S/N(LEV)
END IF
END FUNCTION
EXTERNAL FUNCTION MONTESIMPSON(LEV,A(),B(),N) !'¥â¥ó¥Æ¥«¥ë¥í¡Ü¥·¥ó¥×¥½¥ó§
RANDOMIZE
DIM AA(LEV),T(LEV),HH(LEV)
LET H=1
FOR I=1 TO LEV
LET H=H*(B(I)-A(I))
LET HH(I)=(B(I)-A(I))/N/2
NEXT I
FOR K=1 TO N
FOR I=1 TO LEV
LET T(I)=(B(I)-A(I))*RND+A(I)
LET AA(I)=A(I)+T(I)
NEXT I
LET S=S+1/3*H*FUNC(AA)
FOR I=1 TO LEVEL
LET AA(I)=A(I)+HH(I)+T(I)
NEXT I
LET S=S+4/3*H*FUNC(AA)
FOR I=1 TO LEVEL
LET AA(I)=A(I)+2*HH(I)+T(I)
NEXT I
LET S=S+1/3*H*FUNC(AA)
NEXT K
LET MONTESIMPSON=S/N/2
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
LET S=1
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
IF S > 0 THEN
LET FUNC=SQR(S)
ELSE
LET FUNC=0
END IF
END FUNCTION
PUBLIC NUMERIC LEVEL
INPUT PROMPT "¿½ÅÀÑʬ LEVEL=":LEVEL
DIM X(LEVEL)
PRINT MONTEDE(LEVEL,X,10000);PI^(LEVEL/2)
END
EXTERNAL FUNCTION MONTEDE(LEV,X(),N) !'¥â¥ó¥Æ¥«¥ë¥í + DEË¡
RANDOMIZE
LET M=4 !'(Í×) Ä´À°
LET H=2*M/N
FOR J=1 TO N
LET V=1
FOR I=1 TO LEV
LET K=RND*M*2-M
LET X(I)=Q(K)
LET V=V*QQ(K)
NEXT I
LET S=S+H^LEV*FUNC(X)*V
NEXT J
LET MONTEDE=S*N^(LEV-1)
END FUNCTION
EXTERNAL FUNCTION FUNC(X())
FOR I=1 TO LEVEL
LET S=S-X(I)*X(I)
NEXT I
LET FUNC=EXP(S)
END FUNCTION
EXTERNAL FUNCTION Q(X)
LET Q=SINH(PI/2*SINH(X))
END FUNCTION
EXTERNAL FUNCTION QQ(X)
LET QQ=PI/2*COSH(X)*COSH(PI/2*SINH(X))
END FUNCTION
!' S(n+2)=V(n)*2*¦Ð*r S(n)...n¼¡¸µµå¤ÎɽÌÌÀÑ
!' V(n)=S(n)*r/n V(n)...n¼¡¸µµå¤ÎÂÎÀÑ
!' V(n)=¦Ð^(n/2)/GAMMA(n/2+1)*r^n
LET MAXLEVEL=20
DIM S(MAXLEVEL+2),V(MAXLEVEL+2)
INPUT PROMPT "Ⱦ·Â=":R !' ¸¡¾Ú»þ R=.5
LET S(2)=2*PI*R
LET V(2)=PI*R^2
LET S(3)=4*PI*R^2
LET V(3)=4/3*PI*R^3
FOR N=2 TO MAXLEVEL
LET S(N+2)=V(N)*2*PI*R
LET V(N+2)=S(N+2)*R/(N+2)
PRINT N;"¼¡¸µµå¤ÎÂÎÀÑ";V(N) !';TAB(40);"ɽÌÌÀÑ";S(N)
NEXT N
END
--- ¤ª¤Þ¤± ---
ÍÍý¿ô¥â¡¼¥É¤Ç¤ª»î¤·¤¯¤À¤µ¤¤
LET MAXLEVEL=20
DIM S(MAXLEVEL+2,3),V(MAXLEVEL+2,3)
LET S(2,1)=2
LET S(2,2)=1
LET S(2,3)=1
LET S(3,1)=4
LET S(3,2)=1
LET S(3,3)=2
LET V(2,1)=1
LET V(2,2)=1
LET V(2,3)=2
LET V(3,1)=4/3
LET V(3,2)=1
LET V(3,3)=3
FOR N=2 TO MAXLEVEL
LET S(N+2,1)=V(N,1)*2
LET S(N+2,2)=V(N,2)+1
LET S(N+2,3)=V(N,3)+1
LET V(N+2,1)=S(N+2,1)/(N+2)
LET V(N+2,2)=S(N+2,2)
LET V(N+2,3)=S(N+2,3)+1
PRINT STR$(N);"¼¡¸µµå¤ÎÂÎÀÑ ";
IF V(N,1)<>1 THEN LET A$=STR$(V(N,1)) & "*" ELSE LET A$=""
IF V(N,2)=1 THEN LET P$="¦Ð" ELSE LET P$="¦Ð^" & STR$(V(N,2))
IF V(N,3)=1 THEN LET R$="*r" ELSE LET R$="*r^" & STR$(V(N,3))
PRINT A$;P$;R$
PRINT STR$(N);"¼¡¸µµå¤ÎɽÌÌÀÑ ";
IF S(N,1)<>1 THEN LET A$=STR$(S(N,1)) & "*" ELSE LET A$=""
IF S(N,2)=1 THEN LET P$="¦Ð" ELSE LET P$="¦Ð^" & STR$(S(N,2))
IF S(N,3)=1 THEN LET R$="*r" ELSE LET R$="*r^" & STR$(S(N,3))
PRINT A$;P$;R$
PRINT
NEXT N
END
--- ¤ª¤Þ¤± 2---
!'£î¼¡¸µµå¤ÎÂÎÀÑ
!'V(n)=1/(1*3*5*7*..*N)*2^((N+1)/2)*¦Ð^((N-1)/2)*R^N ...MOD(N,2)=1
!'V(n)=1/(2*4*6*8*..*N)*2^(N/2) *¦Ð^(N/2) *R^N ...MOD(N,2)=0
LET MAXLEVEL=20
FOR N=2 TO MAXLEVEL
LET S=1
FOR I=N TO 2 STEP -2
LET S=S/I
NEXT I
PRINT N;"¼¡¸µµå¤ÎÂÎÀÑ ";STR$(S*2^((N+MOD(N,2))/2));"*¦Ð^";STR$((N-MOD(N,2))/2);"*r^";STR$(N)
PRINT N;"¼¡¸µµå¤ÎɽÌÌÀÑ ";STR$(N*S*2^((N+MOD(N,2))/2));"*¦Ð^";STR$((N-MOD(N,2))/2);"*r^";STR$(N-1)
PRINT
NEXT N
END
!£·¥»¥°¥á¥ó¥È¿ô»úɽ¼¨¤Î¥Ç¥¸¥¿¥ë»þ·×¡ÊClock¡Ë
LET w=400 !²èÌ̤ÎÂ礤µ
LET h=120
SET bitmap SIZE w+1,h+1 !¥É¥Ã¥Èñ°Ì¤Ë¤¹¤ë
SET WINDOW 0,w,h,0 !¥¯¥é¥¤¥¢¥ó¥ÈºÂɸ¡Êº¸¾å¤¬¸¶ÅÀ¡Ë
LET S0=-1
DO
LET t$=TIME$ !»þ¹ï¤òhh:mm:ss·Á¼°¤ÇÆÀ¤ë
LET S=VAL(t$(7:8)) !ÉÃ
IF S<>S0 THEN !¹¹¿·¤µ¤ì¤¿¤é
LET S0=S
LET H=VAL(t$(1:2)) !»þ
LET M=VAL(t$(4:5)) !ʬ
CALL clock_display(INT(H/10),MOD(H,10),INT(M/10),MOD(M,10),INT(S/10),MOD(S,10))
END IF
LOOP
!ÅÅ»ÒÉôÉÊ¡ÊÇÛÃÖ¤ÈÇÛÀþ¡Ë
! ¢BCD(h10,h1,m10,m1,s10,s1)
! ¨£¨¡ ¥Ç¡¼¥¿¥é¥Ã¥Á
! ¨¢ ¢BCD
! ¨¢ ¥Ç¥³¡¼¥À
! ¨¢ ¢abcdefg
! ¨¦¢ª 88:88:88
! ¨¢
! GND
SUB clock_display(h10,h1,m10,m1,s10,s1) !ɽ¼¨Éô
SET DRAW mode hidden !¤Á¤é¤Ä¤ËÉ»ß(³«»Ï)
CLEAR
DRAW LED(1,GND) WITH SCALE(20)*SHIFT(155,40) !¥³¥í¥ó
DRAW LED(1,GND) WITH SCALE(20)*SHIFT(155,80)
!¥À¥¤¥Ê¥ß¥Ã¥¯ÅÀÅôɽ¼¨
DRAW DRIVER7segment(h10) WITH SCALE(20)*SHIFT(50,60) !»þ
DRAW DRIVER7segment(h1) WITH SCALE(20)*SHIFT(110,60)
DRAW DRIVER7segment(m10) WITH SCALE(20)*SHIFT(200,60) !ʬ
DRAW DRIVER7segment(m1) WITH SCALE(20)*SHIFT(260,60)
DRAW DRIVER7segment(s10) WITH SCALE(15)*SHIFT(320,70) !ÉÃ
DRAW DRIVER7segment(s1) WITH SCALE(15)*SHIFT(370,70)
SET DRAW mode explicit !¤Á¤é¤Ä¤ËÉ»ß(½ªÎ»)
END SUB
PICTURE DRIVER7segment(BCD) !£·¥»¥°¥á¥ó¥È¿ô»úɽ¼¨¤Ë¤¹¤ë
CALL DECODE7segment(BCD, Za,Zb,Zc,Zd,Ze,Zf,Zg)
DRAW LED7segmentKwithoutDP(Za,Zb,Zc,Zd,Ze,Zf,Zg)
END PICTURE
!ÅÅ»ÒÉôÉʡʾå°Ì¡Ë
SUB DECODE7segment(n, Za,Zb,Zc,Zd,Ze,Zf,Zg) !£·¥»¥°¥á¥ó¥È¿ô»úɽ¼¨¥Ç¥³¡¼¥À
IF n=0 THEN
LET ptn$="1111110" !abcdedfg¤Î¥ª¥ó¡¦¥ª¥Õ¾õÂÖ
ELSEIF n=1 THEN
LET ptn$="0110000"
ELSEIF n=2 THEN
LET ptn$="1101101"
ELSEIF n=3 THEN
LET ptn$="1111001"
ELSEIF n=4 THEN
LET ptn$="0110011"
ELSEIF n=5 THEN
LET ptn$="1011011"
ELSEIF n=6 THEN
LET ptn$="1011111"
ELSEIF n=7 THEN
LET ptn$="1110000"
ELSEIF n=8 THEN
LET ptn$="1111111"
ELSEIF n=9 THEN
LET ptn$="1111011"
ELSE
PRINT "ÉÔÀµ¤ÊÃͤǤ¹¡£"; n
END IF
LET Za=VAL(ptn$(1:1))
LET Zb=VAL(ptn$(2:2))
LET Zc=VAL(ptn$(3:3))
LET Zd=VAL(ptn$(4:4))
LET Ze=VAL(ptn$(5:5))
LET Zf=VAL(ptn$(6:6))
LET Zg=VAL(ptn$(7:7))
END SUB
! --a- ÇÛÃÖ°ÌÃÖ
! f| |b
! --g-
! e| |c
! --d-
PICTURE LED7segmentKwithoutDP(a,b,c,d,e,f,g) !£·¥»¥°¥á¥ó¥È¿ô»úɽ¼¨´ï ¢¨¥«¥½¡¼¥É¡¦¥³¥â¥ó
DRAW bar(a,GND) WITH SHIFT(0,-2) !¢¨º¸¾å¤¬¸¶ÅÀ
DRAW bar(b,GND) WITH ROTATE(PI/2)*SHIFT(1,-1)
DRAW bar(c,GND) WITH ROTATE(PI/2)*SHIFT(1,1)
DRAW bar(d,GND) WITH SHIFT(0,2)
DRAW bar(e,GND) WITH ROTATE(PI/2)*SHIFT(-1,1)
DRAW bar(f,GND) WITH ROTATE(PI/2)*SHIFT(-1,-1)
DRAW bar(g,GND) WITH SHIFT(0,0)
END PICTURE
!ÅÅ»ÒÉôÉʡʲ¼°Ì¡Ë
PICTURE bar(a,k) !ȯ¸÷¥À¥¤¥ª¡¼¥É¤òɽ¼¨¤¹¤ë
IF a=1 AND k=0 THEN
PLOT AREA: -1,-0.3; 1,-0.3; 1,0.3; -1,0.3 !ÅÀÅô¡¡¢¨ÅɤêÄÙ¤·
ELSE
PLOT LINES: -1,-0.2; 1,-0.2; 1,0.2; -1,0.2; -1,-0.2 !¾ÃÅô¡¡¢¨ÏÈ
END IF
END PICTURE
PICTURE LED(a,k) !ȯ¸÷¥À¥¤¥ª¡¼¥É¤òɽ¼¨¤¹¤ë
IF a=1 AND k=0 THEN
DRAW disk WITH SCALE(0.4) !ÅÀÅô
ELSE
DRAW circle WITH SCALE(0.4) !¾ÃÅô
END IF
END PICTURE
END
!¡¡»³Ã椵¤ó¤Î£·¥»¥°¿ô»ú¤Ç¡¢µ¤¤¬ÉÕ¤¤¤¿¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£
!¡¡plot_lines ¤Î¡¢vector_font¤Ç¡¢PLOT TEXT ¤ò¡¢¥«¥Ð¡¼¤Ç¤¤¿¡£
!¡¡¤ä¤äĹʸ¤È¡¢¤ä¤»¤¿»ú·Á¤ÏÆñÅÀ¤Ê¤¬¤é¡¢»þ·×¤Î¿ô»ú¤â¡¢¶ÀÁü¤Ë¤Ê¤Ã¤¿¡£
!
!-------------------
LET N=2
LET NN=2^N
SET WINDOW -250/NN,250/NN,250/NN,-250/NN
SET TEXT COLOR 4
SET TEXT BACKGROUND "OPAQUE"
LET ¦Õ=0
LET stp=-PI/180*6
DO
LET t=INT(TIME)
IF t0<>t THEN
LET t0=t
IF 2*PI<=ABS(¦Õ) THEN LET stp=-stp
LET ¦Õ=REMAINDER(¦Õ, 2*PI) +stp
!-----
SET DRAW mode hidden
CLEAR
DRAW D4(N) WITH SHIFT(-300/2,-300/2/SQR(3))*ROTATE(¦Õ*(-1)^N)*SCALE(1,(-1)^N)
DRAW center WITH SHIFT(-300/2/NN,-300/2/NN/SQR(3))*ROTATE(¦Õ)
PLOT TEXT,AT 137/NN,-234/NN:"±¦¥¯¥ê¥Ã¥¯¤ÇÄä»ß"
SET DRAW mode explicit
ELSE
WAIT DELAY 0.05 !¡¡¾ÊÅÅÎϸú²Ì
END IF
MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb>=1 !¡¡±¦¥¯¥ê¥Ã¥¯¤ÇÄä»ß
PICTURE center
SET LINE COLOR 2
SET LINE width 2
PLOT LINES:0,0;300/NN,0;300/2/NN,300/2/NN*SQR(3);0,0
SET LINE width 1
SET LINE COLOR 1
END PICTURE
!------
PICTURE D4(k)
IF 0< k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(300/4,SQR(3)*300/4) !¡¡Æâ¦¤Î¾å
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(300/4,SQR(3)*300/4) !¡¡Æâ¦¤ÎÃæ
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(300/4,SQR(3)*300/4) !Æâ¦¤Îº¸
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(300,0) !¡¡Æâ¦¤Î±¦
ELSE
DRAW »þ·×¿Þ WITH ROTATE(-¦Õ)*SHIFT(300/2,300/2/SQR(3))
PLOT LINES:0,0;300,0;300/2,SQR(3)*300/2;0,0 !¡¡³°Â¦¤Î´ð½à»°³Ñ·Á¡ÊľÀܤÎÉÁ²è¤Ï̵¤·¡£)
END IF
END PICTURE
!------
PICTURE »þ·×¿Þ
SET AREA COLOR 1
FOR i=1 TO 60
LET a=PI/30*(i-15)
IF MOD(i,5)=0 THEN
CALL linefont(i/5, 60*COS(a), 60*SIN(a)) !¿ô»ú
DRAW disk WITH SCALE(1)*SHIFT(72*COS(a),72*SIN(a)) !£µÊ¬ÌÜÀ¹¤ê
ELSE
DRAW disk WITH SCALE(.5)*SHIFT(72*COS(a),72*SIN(a)) !£±Ê¬ÌÜÀ¹¤ê
END IF
NEXT i
!---¡¡00:00 ¤«¤é£ôÉà ¤Î¿Ë²óž Gear
DRAW hand(1) WITH SCALE(2.5, 0.75)*ROTATE(t*PI/21600) !¡¡»þ¿Ë
DRAW hand(1) WITH ROTATE(t*PI/1800) !¡¡Ê¬¿Ë
DRAW hand(2) WITH SCALE(0, 1.1)*ROTATE(t*PI/30) !¡¡ÉÿË
!---¡¡Ãæ¿´¤Î¾þ¤ê
DRAW disk WITH SHIFT(0,0)*SCALE(4)
END PICTURE
PICTURE hand(c) !¡¡£³¿Ë¶¦ÍÑ
SET AREA COLOR c
PLOT AREA: -1,15; 1,15; 1,-60; -1,-60
END PICTURE
!-------------------------------------
SUB linefont(i,x,y) !¡¡plot text ¤ÎÂåÂØ
SELECT CASE i
CASE 1
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
CASE 2
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y;x-2.6,y;x-2.6,y+5;x+2.6,y+5 ! 2
CASE 3
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 3a
PLOT LINES:x-2.6,y;x+2.6,y ! 3b
CASE 4
PLOT LINES:x-2.6,y-5;x-2.6,y;x+2.6,y ! 4a
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 4b
CASE 5
PLOT LINES:x+2.6,y-5;x-2.6,y-5;x-2.6,y;x+2.6,y;x+2.6,y+5;x-2.6,y+5 ! 5
CASE 6
PLOT LINES:x+2.6,y-5;x-2.6,y-5;x-2.6,y+5;x+2.6,y+5;x+2.6,y;x-2.6,y ! 6
CASE 7
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y+5 ! 7
CASE 8
PLOT LINES:x-2.6,y;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5;x-2.6,y;x+2.6,y ! 8
CASE 9
PLOT LINES:x+2.6,y;x-2.6,y;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 9
CASE 10
LET x=x-7
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+11
PLOT LINES:x-2.6,y+5;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 0
CASE 11
LET x=x-5
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+9
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
CASE 12
LET x=x-7
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+11
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y;x-2.6,y;x-2.6,y+5;x+2.6,y+5 ! 2
CASE ELSE
END SELECT
END SUB
SECOND¤µ¤ó¤Î¥×¥í¥°¥é¥à¤Î£³¹ÔÌܤÎSET WINDOWʸ¤Î¸å¤í¤Ë¤Ä¤®¤Î¥×¥í¥°¥í¥à¤òÁÞÆþ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£´û¸¤ÎSUB linefont¤ÏÇѤ·¤Æ¤¯¤À¤µ¤¤¡£
CenturyÂÎ¤ÏÆüËܸì¤ËÂбþ¤·¤Æ¤Ê¤¤¤Î¤Ç"±¦¥¯¥ê¥Ã¥¯¤ÇÄä»ß"¤ò"Right Click to Stop"¤Ë¤â¤É¤·¤Æ¤¯¤À¤µ¤¤¡£
MAT PLOTʸ¤Ï3¼¡¸µ¤ÎÇÛÎó¤Ë¤ÏŬ±þ¤·¤Æ¤Ê¤¤¤Î¤Ç¡¢¤¢¤Þ¤ê¥¹¥Þ¡¼¥È¤Ç¤Ï¤Ê¤¤¤Ç¤¹¤¬¤Ê¤ó¤È¤«1ÉÃ°ÊÆâ¤ËÉÁ²è¤Ç¤¤ë¤È»×¤¤¤Þ¤¹¡£ÃÙ¤ì¤ë¾ì¹ç¤Ïʸ»ú¥µ¥¤¥º(th=13)¤ò¾®¤µ¤¯¤·¤Æ¤ß¤Æ²¼¤µ¤¤¡£
!
ASK TEXT HEIGHT ath
ASK TEXT JUSTIFY atjx$,atjy$
SET POINT STYLE 1
SET TEXT JUSTIFY "CENTER","HALF"
LET th=13
SET TEXT HEIGHT th
SET TEXT FONT "Century" ,0
ASK TEXT WIDTH("WW") tw
ASK PIXEL SIZE (0,0;1.2*th,1.2*tw) px,py
LET p=ABS(px*py)
DIM f0(p,2),f1(p,2),f2(p,2),f3(p,2),f4(p,2),f5(p,2),f6(p,2),f7(p,2),f8(p,2),f9(p,2),f10(p,2),f11(p,2),f12(p,2)
LET pitchx=WORLDX(PIXELX(0)+1)
LET pitchy=WORLDY(PIXELY(0)+1)
FOR i=1 TO 12
PLOT TEXT ,AT 0,0 : STR$(i)
MAT f0=ZER
LET k=0
FOR x=-0.6*tw TO 0.6*tw STEP pitchx
FOR y=0.6*th TO -0.6*th STEP pitchy
ASK PIXEL VALUE (x,y) pc
IF pc=1 THEN ! Ãæ´Ö¿§(³¥¿§)¤òÆÉ¤ß¹þ¤à¤Ê¤é¾ò·ï¤ò pc<>0
LET k=k+1
LET f0(k,1)=x
LET f0(k,2)=y
END IF
NEXT y
NEXT x
CALL font_read
CLEAR
NEXT i
SET TEXT HEIGHT ath
SET TEXT JUSTIFY atjx$,atjy$
!
SUB font_read
MAT f12=ZER(k,2)
FOR j=1 TO k
LET f12(j,1)=f0(j,1)
LET f12(j,2)=f0(j,2)
NEXT j
SELECT CASE i
CASE 1
MAT f1=f12
CASE 2
MAT f2=f12
CASE 3
MAT f3=f12
CASE 4
MAT f4=f12
CASE 5
MAT f5=f12
CASE 6
MAT f6=f12
CASE 7
MAT f7=f12
CASE 8
MAT f8=f12
CASE 9
MAT f9=f12
CASE 10
MAT f10=f12
CASE 11
MAT f11=f12
CASE ELSE
END SELECT
END SUB
SUB linefont(fi,x,y)
SELECT CASE fi
CASE 1
DRAW numplot(f1) WITH SHIFT(x,y)
CASE 2
DRAW numplot(f2) WITH SHIFT(x,y)
CASE 3
DRAW numplot(f3) WITH SHIFT(x,y)
CASE 4
DRAW numplot(f4) WITH SHIFT(x,y)
CASE 5
DRAW numplot(f5) WITH SHIFT(x,y)
CASE 6
DRAW numplot(f6) WITH SHIFT(x,y)
CASE 7
DRAW numplot(f7) WITH SHIFT(x,y)
CASE 8
DRAW numplot(f8) WITH SHIFT(x,y)
CASE 9
DRAW numplot(f9) WITH SHIFT(x,y)
CASE 10
DRAW numplot(f10) WITH SHIFT(x,y)
CASE 11
DRAW numplot(f11) WITH SHIFT(x,y)
CASE 12
DRAW numplot(f12) WITH SHIFT(x,y)
END SELECT
END SUB
PICTURE numplot(fm(,))
MAT PLOT POINTS : fm
END PICTURE
!
Á´³Ñʸ»ú22ʸ»ú¤«¤é¤Ê¤ëÊÑ¿ô̾¤Ç¤¹¡£(Ãí°Õ;´Ä¶°Í¸ʸ»ú¤â¤¢¤ê¤Þ¤¹)
10 LET ¤«¤££±£Â£ä¥µ¦²¦Â§¥§ñ¨ª±·ÊÖàßäåêó°¡=3
20 PRINT ¤«¤££±£Â£ä¥µ¦²¦Â§¥§ñ¨ª±·ÊÖàßäåêó°¡+5
30 END
FUNCTION fnCHECK(x,y) !¡¡Í½¸«¸¡ºº¡£
LET c=0
IF sp< Xw*Yw-1 THEN
LET fnCHECK=1 !¡¡µ¢¤ê¤Î°ú¿ô¡á£±
IF ABS(I_(1)-I_(0))=4 THEN EXIT FUNCTION !return(1)
FOR i=0 TO 7
IF E_(y+DY_(i),x+DX_(i))< 2 THEN
IF E_(y+DY_(i),x+DX_(i))=0 THEN EXIT FUNCTION !return(1)
LET c=c-1
END IF
NEXT i
IF c< -1 THEN
IF sp<>1 THEN EXIT FUNCTION !return(1)
END IF
FOR y=0 TO Yw-1
FOR x=0 TO Xw-1
IF E_(y,x)< 2 THEN
IF E_(y,x)=0 THEN EXIT FUNCTION !return(1)
LET c=c+1
IF c>1 THEN EXIT FUNCTION !return(1)
END IF
NEXT x
NEXT y
END IF
LET fnCHECK=0 !¡¡µ¢¤ê¤Î°ú¿ô¡á£°
END FUNCTION !return(0)
SUB PUTL(x,y,dx,dy,c)
SET LINE COLOR c
PLOT LINES: x,y; x+dx,y+dy
PLOT POINTS: x+dx,y+dy
END SUB
SUB DISP_E
PRINT
MAT PRINT USING REPEAT$(" ##",Xw+4) :E_
IF DF=1 THEN pause !¡¡//debug
END SUB
SUB FIN
!-----disp_A
SET AREA COLOR 0
PLOT AREA :0,0; Xw-1,0; Xw-1,Yw-1; 0,Yw-1
LET x=0
LET y=0
CALL PUTL(x,y,0,0,2)
FOR s=0 TO Xw*Yw-1
CALL PUTL(x,y,DX_(I_(s)),DY_(I_(s)),2)
LET x=x+DX_(I_(s))
LET y=y+DY_(I_(s))
NEXT s
!-----disp cout--time
LET Count=Count+1
LET t1=INT(TIME-t0)
IF t1< 0 THEN LET t1=t1+86400
PLOT TEXT,AT Xct,Yct :"count= "& STR$(Count)& " ----- "&
&& USING$("%%",MOD(INT(t1/3600),24))& ":"&
&& USING$("%%",MOD(INT(t1/60),60))& ":"& USING$("%%",MOD(t1,60))
IF DF=2 THEN pause !¡¡//debug
END SUB
DIM A(100),B(100),C(100)
LET m=3
LET n=8
MAT A=ZER(m)
MAT B=ZER(m*n)
MAT C=ZER(m TO n)
¤È¤³¤í¤¬MATʸ¤Ç¤Ïź»ú¤Î²¼¸Â¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¤¿¤á¡¢C¤Î²¼¸Â¤Ï1,¾å¸Â¤Ï6(=n-m+1)¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Ø¥ë¥×¤Ç¤Ï¡ØÅº»ú¤Î²¼¸Â¤òÊѤ¨¤¿¤¤¤È¤¤Ï¡¤MAT READʸ¤«¡¤³ÈÄ¥µ¡Ç½¤ÎMAT REDIMʸ¤òÍѤ¤¤ë¡£¡Ù¤È¤¢¤ê¤Þ¤¹¡£
MAT READ C(m TO n) ¤È¤¹¤ì¤Ð¤è¤¤¤ï¤±¤Ç¤¹¤¬¡¢DATAʸ¤òÆÉ¤Þ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
MAT REDIM C(m TO n) ¤Ê¤é¤ÐÇÛÎóÍ×ÁǤϤ½¤Î¤Þ¤Þ¤Çź»ú¤Î²¼¸Â¤òÊѹ¹¤Ç¤¤Þ¤¹¤¬JISµ¬³Ê³°¤Ç¤¹¡£
DECLARE EXTERNAL SUB redim
DIM A(100)
LET m=3
LET n=8
CALL redim(A,m,n) ! MAT REDIM A(m TO n)¤ÈƱµÁ
PRINT LBOUND(A),UBOUND(A)
END
!
EXTERNAL SUB redim(p(),m,n) !ÇÛÎó¤Îź»ú¤Î¾å²¼¸Â¤òºÆÄêµÁ
WHEN EXCEPTION IN
DIM q(10000)
MAT q=p
MAT READ p(m TO n)
DATA 0
USE
END WHEN
FOR i=m TO n
LET p(i)=q(LBOUND(q)+i-m)
NEXT i
END SUB
!-----
LET g= 9.8 ! m/s^2¡¡½ÅÎϲîÅÙ
LET m1=.188 ! kg¡¡¤ª¤â¤ê
LET m2=.188 ! kg
LET L1= 5 !¡¡m¡¡ÄߤêËÀ
LET L2= 5 !¡¡m
LET r1=.75*SQR(m1) !¡¡¤ª¤â¤ê¤ÎÉÁ²è·Â
LET r2=.75*SQR(m2)
!
LET dt=0.05 !sec. ±é»»¥Ô¥Ã¥Á¡£¹â®µ¡ ¤Û¤É¡¢¾®¤µ¤¯¡£(0.05¤Ï¡¢Pentium3 500MHz)
!
!¢¨0.01¤¯¤é¤¤¤¬Ë¾¤Þ¤·¤¤¤¬¡¢ÉÁ²è¥Ô¥Ã¥Á(²èÌ̤Ëɽ¼¨)¤¬¡¢¤Ä¤¤¤ÆÍè¤ì¤Ê¤¯¤Ê¤Ã¤¿¤éÌ᤹¡£
!¡¡£²¤Ä¤Î¥Ô¥Ã¥Á¤¬¡¢¥º¥ì¤Æ¤¤¤ë¤ÈʪÍýŪ¤Ê®Å٤ǤϤʤ¯¤Ê¤ë¡£
!
!------------ £²½Å¿¶¤ê»Ò¤ÎÊýÄø¼°
! d(d¦È1)/dt^2=
! [ g*{sin¦È2*cos¦¤-¦Ì*sin¦È1}-{L2*(¦È2/dt)^2+L1*(¦È1/dt)^2*cos¦¤}*sin¦¤]
!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/[ L1*{¦Ì-cos¦¤^2}]
! d(d¦È2)/dt^2=
! [ g*¦Ì*{sin¦È1*cos¦¤-sin¦È2}+{¦Ì*L1*(¦È1/dt)^2+L2*(¦È2/dt)^2*cos¦¤}*sin¦¤]
!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/[ L2*{¦Ì-cos¦¤^2}]
!
! g= ½ÅÎϲîÅÙ¡¡¦Ì=(m1+m2)/m2¡¡¦¤=¦È1-¦È2
!
!---------- ¼°¤ÎÀ°Íý¡Ê¦È1¦È2 ¶¦¤Ë¡¢½ÅÎÏÊý¸þ£°¤«¤é¤Îº¸²ó¤ê³Ñ¡Ë
LET ¦Ì2=m2/(m1+m2)
LET L21=L2/L1
!
!ss1=-g/L1*sin¦È1 -¦Ì2*L21*¦Ø2^2*sin¦¤
!ss2=-g/L2*sin¦È2 +¡¡¡¡¡¡¡¡¦Ø1^2*sin¦¤/L21
!D=1-¦Ì2*COS¦¤^2
!d(¦È1)/dt=¦Ø1
!d(¦È2)/dt=¦Ø2
!d(¦Ø1)/dt=[¡¡¡¡¡¡¡¡¡¡¡¡ss1 - L21*¦Ì2*cos¦¤*ss2 ] /D
!d(¦Ø2)/dt=[ -cos¦¤/L21*ss1 + ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ss2 ] /D
!
!---------- ÈùʬÊýÄø¼°¤Î¤Þ¤Þ¡¢¥ë¥ó¥²¡¦¥¯¥Ã¥¿Ë¡¤ÇÉÁ²è¡£
LET ¦È1=PI*0.8 ! ½é´ü³ÑÅÙ
LET ¦È2=PI*0.8
LET w1=0 !¡¡½é´ü³Ñ®ÅÙ
LET w2=0
!
DEF ss1(w2,¦È1,¦È2)=-g/L1*SIN(¦È1) -¦Ì2*L21*w2^2*SIN(¦È1-¦È2)
DEF ss2(w1,¦È1,¦È2)=-g/L2*SIN(¦È2) + w1^2*SIN(¦È1-¦È2)/L21
DEF D(¦È1,¦È2)=1-¦Ì2*COS(¦È1-¦È2)^2
!
DEF ¦Á1(w1,w2,¦È1,¦È2)=( ss1(w2,¦È1,¦È2) -L21*¦Ì2*COS(¦È1-¦È2)*ss2(w1,¦È1,¦È2) )/D(¦È1,¦È2)
DEF ¦Á2(w1,w2,¦È1,¦È2)=(-ss1(w2,¦È1,¦È2)*COS(¦È1-¦È2)/L21 +ss2(w1,¦È1,¦È2) )/D(¦È1,¦È2)
SUB RungeKutta
LET w11=w1
LET w12=w2
LET ¦Á11=¦Á1(w1,w2,¦È1,¦È2)
LET ¦Á12=¦Á2(w1,w2,¦È1,¦È2)
!
LET w21=w1+¦Á11*dt/2
LET w22=w2+¦Á12*dt/2
LET ¦Á21=¦Á1(w21,w22,¦È1+w11*dt/2,¦È2+w12*dt/2)
LET ¦Á22=¦Á2(w21,w22,¦È1+w11*dt/2,¦È2+w12*dt/2)
!
LET w31=w1+¦Á21*dt/2
LET w32=w2+¦Á22*dt/2
LET ¦Á31=¦Á1(w31,w32,¦È1+w21*dt/2,¦È2+w22*dt/2)
LET ¦Á32=¦Á2(w31,w32,¦È1+w21*dt/2,¦È2+w22*dt/2)
!
LET w41=w1+¦Á31*dt
LET w42=w2+¦Á32*dt
LET ¦Á41=¦Á1(w41,w42,¦È1+w31*dt,¦È2+w32*dt)
LET ¦Á42=¦Á2(w41,w42,¦È1+w31*dt,¦È2+w32*dt)
!
LET ¦È1=¦È1+(w11+2*w21+2*w31+w41)*dt/6
LET ¦È2=¦È2+(w12+2*w22+2*w32+w42)*dt/6
LET w1=w1+(¦Á11+2*¦Á21+2*¦Á31+¦Á41)*dt/6
LET w2=w2+(¦Á12+2*¦Á22+2*¦Á32+¦Á42)*dt/6
END SUB
!----¥¨¥Í¥ë¥®¡¼¡¦¥á¡¼¥¿¡¼
DEF ep1=m1*g*(L1-L1*COS(¦È1)) !°ÌÃÖ£±
DEF em1=(L1*w1)^2*m1/2 !±¿Æ°£±
DEF ep2=m2*g*( (L1-L1*COS(¦È1)+L2)-L2*COS(¦È2) ) !°ÌÃÖ£²
DEF em2=( (L1*w1)^2+(L2*w2)^2-2*L1*w1*L2*w2*COS(PI+¦È1-¦È2) )*m2/2 !±¿Æ°£²
!
!----run
LET w=13
SET WINDOW -w,w,-w,w
SET COLOR MIX(15) .5,.5,.5
SET TEXT background "OPAQUE"
LET t0=TIME
DO
LET t=TIME
IF dt=<ABS(t-t0) THEN
SET DRAW mode hidden
CLEAR
DRAW grid(5,5)
PLOT TEXT,AT -w*0.92,w*0.9:"¤ª¤â¤ê¤Î¥¨¥Í¥ë¥®¡¼[J]"
PLOT TEXT,AT -w*0.92,w*0.83:"°ÌÃÖ£±¡¡±¿Æ°£±¡¡ °ÌÃÖ£²¡¡±¿Æ°£²"
PLOT TEXT,AT -w*0.96,w*0.76,USING"##.#### ##.####¡¡##.#### ##.####":ep1,em1,ep2,em2
PLOT TEXT,AT -w*0.86,w*0.69,USING"##.####¡¡¡¡¡¡¡¡¡¡##.####":ep1+em1,ep2+em2
PLOT TEXT,AT -w*0.62,w*0.62,USING"##.####":ep1+em1+ep2+em2
PLOT TEXT,AT w*0.25,w*0.9:"¥Þ¥¦¥¹ ±¦¥Ü¥¿¥ó¤Ç¡¢½ªÎ»¡£"
PLOT TEXT,AT w*0.4,w*0.76,USING"±é»»¥Ô¥Ã¥Á=#.### ÉÃ":dt
PLOT TEXT,AT w*0.4,w*0.69,USING"ÉÁ²è¥Ô¥Ã¥Á=#.### ÉÃ":t-t0
LET t0=t
DRAW Pendulum0 WITH ROTATE(¦È1)
CALL RungeKutta !¡¡¼¡¤Î¦È1,¦È2 ¤Ø¹¹¿·
SET DRAW mode explicit
!stop
END IF
WAIT DELAY 0 !¡¡¾ÊÅÅÎϸú²Ì
MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb=1
PICTURE Pendulum0
DRAW circle WITH SCALE(0.2)
DRAW Pendulum1(L1,r1,"1")
DRAW Pendulum1(L2,r2,"2") WITH ROTATE(¦È2-¦È1)*SHIFT(0,-L1)
END PICTURE
PICTURE Pendulum1(L,r,w$)
PLOT LINES: 0,0;0,-L
DRAW disk WITH SCALE(r)*SHIFT(0,-L)
PLOT TEXT,AT r, r-L:w$
END PICTURE
RANDOMIZE
LET N=6 !¥³¥¤¥ó¤òÅꤲ¤ë²ó¿ô
DIM s(-N TO N) !ÅÀx¤ËÌá¤ë²ó¿ô
MAT s=ZER
LET iter=50000 !»î¹Ô²ó¿ô
FOR i=1 TO iter
LET x=0 !¸¶ÅÀ
FOR k=1 TO N !¥³¥¤¥ó¤òÅꤲ¤ë
IF RND<0.5 THEN LET x=x+1 ELSE LET x=x-1 !ɽ¤Ê¤é¡Ü£±¡¢Î¢¤Ê¤é¡Ý£±
NEXT k
LET s(x)=s(x)+1 !·ë²Ì
NEXT i
FOR i=-N TO N !ÅÀx¤ËÌá¤ë³ÎΨ
PRINT i;s(i)/iter
NEXT i
PRINT
FOR i=-N TO N !¾ì¹ç¤Î¿ô
PRINT USING "###: ###.##": i,s(i)/s(N) !x=N¤ò£±¤È¤¹¤ë
NEXT i
END
!¥Ñ¥¹¥«¥ë¤Î»°³Ñ·Á
LET N=10 !¥³¥¤¥ó¤òÅꤲ¤ë²ó¿ô
LET a=1 !¥Ñ¥¹¥«¥ë¤Î»°³Ñ·Á
LET b=0
LET c=1
DIM P(-N TO N) !¿ôľÀþ¾å¤Î³ÆÅÀ
MAT P=ZER
LET P(0)=1 !¸¶ÅÀ¤Ë°ÌÃÖÉÕ¤±¤ë
FOR i=-N TO N !ÌÜÀ¹¤ê
PRINT USING " ####": i;
NEXT i
PRINT
FOR i=-N TO N !¿ôľÀþ
PRINT "----+";
NEXT i
PRINT
FOR i=0 TO N !»ØÄê²ó¿ô
MAT PRINT USING(REPEAT$(" ####",2*N+1)): P; !¸½¾õ
PRINT USING " ### ²ó¤Î¾ì¹ç": i
LET T1=0 !º¸¡¡¢¨º¸Ã¼
LET T2=P(-N) !Ãæ±û
FOR x=-N TO N !º¸¤«¤é±¦¤ØÁöºº¤¹¤ë
IF x+1>N THEN LET T3=0 ELSE LET T3=P(x+1) !±¦
LET P(x)=a*T1+b*T2+c*T3
LET T1=T2 !¼¡¤Ø
LET T2=T3
NEXT x
NEXT i
END
!
! °ì¸Ä¤Î¿À·ÐºÙ˦(neuro)
! ¤½¤Î ¥«¥ª¥¹(chaos)¤ò¡¢Ãµ¤·¡¢¸«¤ë¡¢¥Ä¡¼¥ë
!
!----------------------------
!¡¡"Neuro12"
!
!¡¡2009.1.18
!----------------------------
OPTION ARITHMETIC NATIVE
OPTION BASE 0
SET TEXT background "OPAQUE"
SET POINT STYLE 1
SET AREA COLOR 0
LET DLY=50
DIM St(1,DLY) ,Sy(2000), B4(0,500)
!
LET Kr=0.5
LET Af=1
LET Ei=-70
LET Ss=0.31 !¡¡Ss=(Kr-1)(theta-s(t))¡¡¡Äs(t)=0
LET theta=Ss/(Kr-1)
DEF Ri(Yi,Ss)=Kr*Yi-Af/(1+EXP(Ei*Yi))+Ss
PLOT TEXT,AT .04,.96:"*** Neuro Cell"
PLOT TEXT,AT .04,.92:"Right Click to Stop"
PLOT TEXT,AT .04,.89:"Left Click & Drag '|' Line"
!
!-----
LET Y0=Af/100
LET Af2=Af
DO
LET Af=Af2
CALL ma200_
! ma100_
!----- clear
SET WINDOW -Af*2.07-Af*1.06,Af*2.07-Af*1.06,-Af*2.07-Af*1.05,Af*2.07-Af*1.05
PLOT AREA: -Af,-Af;Af,-Af;Af,Af;-Af,Af
!----- box outline
SET LINE COLOR "blue"
PLOT LINES: -Af,-Af; Af,-Af; Af,Af; -Af,Af; -Af,-Af
!-----
PLOT TEXT,AT Af*.03,Af*.85: "+Af Y(t+1)"
PLOT TEXT,AT -Af*.97,Af*0.13: "Y(t)"
PLOT TEXT,AT -Af*.97, 0: "-Af"
PLOT TEXT,AT Af*.8, 0: "+Af"
PLOT TEXT,AT Af*.03,-Af*.98: "-Af"
!----- Sy(w)=Y(t)
LET imax=pixelx(Af)-pixelx(-Af)
LET dA1=(Af+Af)/imax
FOR i=0 TO imax
LET Sy(i)=Ri(-Af+i*dA1, Ss)
NEXT i
!-----
DO
LET Y1=Ri(Y0,Ss)
!----- erase old signal
LET W0=St(0,t)
LET W1=St(1,t)
FOR i=0 TO DLY-1
IF W0=St(0,i) AND W1=St(1,i) AND t<>i THEN EXIT FOR
NEXT i
IF DLY=i THEN
SET LINE COLOR 0
PLOT LINES: W0,W0; W0,W1;
PLOT LINES: W1,W1
END IF
!----- axis
SET LINE COLOR "cyan" ! axis_Y(t)¡Ä ¡½
PLOT LINES: -Af,0; Af,0
SET LINE COLOR "magenta" ! axis_Y(t+1)¡Ä¡Ã
PLOT LINES: 0,-Af; 0,Af
!----- draw curve Y(t)
SET LINE COLOR 1
FOR i=0 TO imax
PLOT LINES: -Af+i*dA1, Sy(i);
NEXT i
PLOT LINES
!----- signal
SET LINE COLOR "cyan" ! input_Y(t)¡Ä¡Ã
PLOT LINES: Y0,Y0; Y0,Y1;
SET LINE COLOR "magenta" ! output_Y(t+1)¡Ä ¡½
PLOT LINES: Y1,Y1
!-----
LET St(0,t)=Y0
LET St(1,t)=Y1
LET t=MOD(t+1,DLY)
LET Y0=Y1
!-----
WAIT DELAY .02
MOUSE POLL x,y,mlb,mrb
LOOP UNTIL mlb=1 OR mrb=1
!
!----- cursor input
IF mlb=1 THEN
SET WINDOW -0.1*Af,Af, -Af*2.1+Af*1.08,Af*2.1+Af*1.08
DO
MOUSE POLL x,y,mlb,mrb
IF 0<=x AND x<=Af THEN
IF y< Af THEN
IF bx4<>pixelx(x) THEN
LET Ss=x
LET theta=Ss/(Kr-1)
CALL
cursor4( bx4,B4)
END IF
ELSEIF x< Af*.43 THEN
IF y< Af*1.4 THEN
ELSEIF y< Af*1.7 THEN
IF
bx3<>pixelx(x) THEN
LET Ei=x*120/(Af*.43)-120
CALL cursor13( bx3, 1.7, 1.4)
END IF
ELSEIF y< Af*2.1 THEN
IF
bx2<>pixelx(x) THEN
LET Kr=x*1/(Af*.43)
LET theta=Ss/(Kr-1)
CALL cursor13( bx2, 2.1, 1.8)
END IF
ELSEIF y< Af*2.5 THEN
IF
bx1<>pixelx(x) THEN
LET Af2=x*2/(Af*.43)+0.5
MAT St=ZER
LET Y0=Af/100
CALL cursor13( bx1, 2.5, 2.2)
END IF
END IF
END IF
END IF
WAIT DELAY .05
LOOP UNTIL mlb=0
END IF
LOOP UNTIL mrb=1
SUB cursor4( bx,B(,))
MAT PLOT CELLS, IN worldx(bx),Af; worldx(bx),-Af: B
LET bx=pixelx(x)
ASK PIXEL ARRAY (x,Af) B
SET LINE COLOR "red"
PLOT LINES: x,-Af; x,Af
PLOT TEXT,AT 0,Af,USING "Kr=#.### :Af=#.### :Ei=####.# :Ss=#.### :theta=####.###": Kr, Af, Ei, Ss, theta
END SUB
SUB cursor13( bx, uy,ly)
SET LINE COLOR 0
PLOT LINES: worldx(bx),Af*uy-dAy; worldx(bx),Af*ly+dAy
LET bx=pixelx(x)
SET LINE COLOR "red"
PLOT LINES: x,Af*uy-dAy; x,Af*ly+dAy
PLOT TEXT,AT 0,Af,USING "Kr=#.### :Af=#.### :Ei=####.# :Ss=#.### :theta=####.###": Kr, Af2, Ei, Ss, theta
END SUB
SUB ma200_
!----- clear
SET WINDOW -0.1*Af,Af, -Af*2.1+Af*1.08,Af*2.1+Af*1.08
PLOT AREA: 0,-Af;Af,-Af;Af,Af;0,Af
!----- box outline
SET LINE COLOR "blue"
PLOT LINES: 0,-Af; Af,-Af; Af,Af; 0,Af; 0,-Af
PLOT LINES: 0,0; Af,0
!-----
PLOT TEXT,AT -.06*Af,.9*Af : "+Af"
PLOT TEXT,AT -.07*Af,-.05*Af : "Y(t)"
PLOT TEXT,AT -.06*Af,-Af : "-Af"
PLOT TEXT,AT Af*.5,-Af*.98: "0 <--- Ss ---> +Af"
!-----
LET dA2=Af/(pixelx(Af)-pixelx(0))
LET dAy=Af/(pixely(Af)-pixely(0))
LET Yt=0 ! Y(t)
FOR j=0 TO Af STEP dA2 ! j= Ss= (Kr-1)*theta
FOR i=0 TO 99
LET Yt=Ri(Yt,j)
PLOT POINTS: j,Yt
NEXT i
NEXT j
!----- setup cursor Ss
LET x=Ss
ASK PIXEL SIZE (x,Af;x,-Af) i,j
MAT B4=ZER(0,j-1)
ASK PIXEL ARRAY (x,Af) B4
LET bx4=pixelx(x)
CALL cursor4( bx4, B4)
!-----
LET x=(Ei+120)*Af*.43/120 !// Ei=x*120/(Af*.43)-120
LET bx3=pixelx(x)
CALL cursor130( bx3, 1.7, 1.4, "Ei")
LET x=Kr*Af*.43 !// Kr=x*1/(Af*.43)
LET bx2=pixelx(x)
CALL cursor130( bx2, 2.1, 1.8, "Kr")
LET x=(Af-0.5)*Af*.43/2 !// Af2=x*2/(Af*.43)+0.5
LET bx1=pixelx(x)
CALL cursor130( bx1, 2.5, 2.2, "Af")
END SUB
SUB cursor130( bx, uy, ly, w$)
PLOT TEXT,AT -.06*Af,Af*(uy-0.2): w$
SET LINE COLOR "blue"
PLOT LINES: 0,Af*uy; Af*.43,Af*uy; Af*.43,Af*ly; 0,Af*ly; 0,Af*uy
CALL cursor13( bx, uy, ly)
END SUB
!
!¡¡ÉºÎ®¤¹¤ë¥Ë¥å¡¼¥é¥ë¡¦¥Í¥Ã¥È¡Ê¹¹¿·¡ËºÆÅê¹Æ
!
!----
OPTION ARITHMETIC NATIVE
OPTION BASE 0
SET WINDOW -10,10, 20,0
SET TEXT background "OPAQUE"
!
DIM E(99),R(99),theta(99),F(99)
DIM Y(99),X(99),NetWork(99,99)
DIM P_(1 TO 5, 99),Px(99)
DIM Sum(1 TO 5)
MAT READ P_
! 1)
DATA 1,1,0,0,0,0,0,0,1,1
DATA 1,1,1,0,0,0,0,1,1,1
DATA 0,1,1,1,0,0,1,1,1,0
DATA 0,0,1,1,1,1,1,1,0,0
DATA 0,0,0,1,1,1,0,0,0,0
DATA 0,0,0,0,1,1,1,0,0,0
DATA 0,0,1,1,1,1,1,1,0,0
DATA 0,1,1,1,0,0,1,1,1,0
DATA 1,1,1,0,0,0,0,1,1,1
DATA 1,1,0,0,0,0,0,0,1,1
! 2)
DATA 0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,1,1,0,0,0
DATA 0,0,0,0,1,1,1,0,0,0
DATA 0,0,0,1,1,1,1,1,0,0
DATA 0,0,0,1,1,0,1,1,0,0
DATA 0,0,1,1,1,0,1,1,1,0
DATA 0,0,1,1,0,0,0,1,1,0
DATA 0,1,1,1,0,0,0,1,1,1
DATA 0,1,1,1,1,1,1,1,1,1
DATA 0,1,1,1,1,1,1,1,1,1
! 3)
DATA 0,0,1,1,1,0,0,0,1,1
DATA 0,1,1,1,1,1,1,1,1,1
DATA 1,1,1,0,1,1,1,1,0,0
DATA 1,1,0,0,0,1,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,1,0,0,0,1,1
DATA 0,0,1,1,1,1,0,1,1,1
DATA 1,1,1,1,1,1,1,1,1,0
DATA 1,1,0,0,0,1,1,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0
! 4)
DATA 0,0,1,0,0,0,0,1,0,0
DATA 0,0,1,1,0,0,1,1,0,0
DATA 0,0,1,1,1,1,1,1,0,0
DATA 0,0,1,1,1,1,1,1,0,0
DATA 0,0,1,1,1,1,1,1,0,0
DATA 0,1,1,1,1,1,1,1,1,0
DATA 1,1,1,1,1,1,1,1,1,1
DATA 0,0,0,1,1,1,1,0,0,0
DATA 0,0,0,0,1,1,1,0,0,0
DATA 0,0,0,0,0,1,0,0,0,0
! 5)
DATA 0,0,0,0,1,1,0,0,0,0
DATA 0,1,1,0,1,1,0,1,1,0
DATA 0,1,0,0,1,1,0,0,1,0
DATA 0,0,0,0,1,1,0,0,0,0
DATA 1,1,1,1,1,1,1,1,1,1
DATA 1,1,1,1,1,1,1,1,1,1
DATA 0,0,0,0,1,1,0,0,0,0
DATA 0,1,1,0,1,1,0,1,1,0
DATA 0,1,1,0,1,1,0,1,1,0
DATA 0,0,0,0,1,1,0,0,0,0
!----- ³Æ¥Ë¥å¡¼¥í¥ó0~99 ¤Î¶îư
SUB Xi00
FOR i=0 TO 99
LET w=0
FOR j=0 TO 99
LET w=w+NetWork(i,j)*X(j)
NEXT j
LET F(i)=Kf*F(i)+w
LET R(i)=Kr*(R(i)+theta(i))-Af*X(i)-theta(i)
LET Y(i)=R(i)+F(i)
NEXT i
FOR i=0 TO 99
IF Ei*Y(i)< 709 THEN !¡¡·å¤¢¤Õ¤ìËÉ»ß
LET X(i)=1/(1+EXP(Ei*Y(i)))
ELSE
LET X(i)=1/(1+EXP(709))
END IF
NEXT i
END SUB
!----- ³Æ¥Ë¥å¡¼¥í¥ó¤Î½ÐÎÏ X(0~99) ȯ²Ð¤Î¡¢²èÌÌɽ¼¨¡£
SUB DispX
SET DRAW mode hidden
SET AREA COLOR 0
PLOT AREA:-10,10; 0,10; 0,0; 10,0; 10,20;-10,20
SET AREA COLOR 2 !¡¡//fire
FOR V=0 TO 9
FOR H=0 TO 9
LET i=V*10+H
IF 0.5=< X(i) THEN
PLOT AREA: H,V; H+1,V; H+1,V+1; H,V+1
LET Px(i)=1
SET COLOR MIX(0) 0,1,1 ! B.G.color cyan( text)
ELSE
PLOT LINES: H,V; H,V+1; H+1,V+1
LET Px(i)=0
SET COLOR MIX(0) 1,1,1 ! B.G.color 0
END IF
!----- ¥Ë¥å¡¼¥í¥ó¤ÎÆâÉô(-~0~+) 0=< ¤Ïȯ²Ð
PLOT TEXT,AT H*2-10, V*0.8+12, USING"###.###":Y(i)
NEXT H
NEXT V
SET COLOR MIX(0) 1,1,1 ! B.G.color 0
SET DRAW mode explicit
END SUB
!----- À¸À®¥Ñ¥¿¡¼¥ó¤ÎʬÊÌ ·×¿ô¤Î¡¢²èÌÌɽ¼¨¡£
SUB Compare
FOR n_=1 TO 5
FOR i=0 TO 99
IF P_(n_,i)<>Px(i) THEN EXIT FOR
NEXT i
IF 99< i THEN
!¡¡----- °ìÃ×
LET PC_=10 !¡¡//timer ON 1st.to 2nd.Cursor
IF PB_=n_ THEN EXIT SUB
IF PN_>0 THEN PLOT
TEXT,AT -8, PN_+1.5: ":"& STR$(Sum(PN_))& " " !¡¡//old
1st.2nd.Cursor OFF
LET PB_=n_ !¡¡//flag 2nd.Cursor
LET PN_=n_ !¡¡//flag 1st.Cursor
LET Sum(n_)=Sum(n_)+1 !¡¡·×¿ô
SET COLOR MIX(0) 0,1,1 !¡¡//new 1st.Cursor ON (B.G.color)
PLOT label,AT -8, n_+1.5: ":"& STR$(Sum(n_))& " "
SET COLOR MIX(0) 1,1,1
beep
EXIT SUB
!-----
END IF
NEXT n_
!¡¡----- ÉÔ°ìÃ×
IF PB_=0 THEN EXIT SUB
IF PC_>1 THEN
LET PC_=PC_-1
EXIT SUB
END IF
SET COLOR MIX(0) .75,.75,.75 !¡¡//new 2nd.Cursor ON (B.G.color)
PLOT TEXT,AT -8, PB_+1.5: ":"& STR$(Sum(PB_))& " "
SET COLOR MIX(0) 1,1,1
LET PB_=0
END SUB
100 INPUT PROMPT "p=": P
110 INPUT PROMPT "q=": Q
120 INPUT PROMPT "d=": D
130 LET U=0
140 FOR K=1 TO D !d°Ê²¼¤Î¼«Á³¿ôk¤Î¤¦¤Á¤Ç
150 IF K-INT(K/P)*P=0 THEN GOTO 210 !k¤¬p¤ÎÇÜ¿ô¤Î¾ì¹ç¡Êk=m*p+0¡Ë¡¡¢¨MOD(K,P)=0
160 FOR M=0 TO INT(K/P) !£°¤«¤éP¤Ç³ä¤Ã¤¿¾¦¤Þ¤Ç¡¡¢èk=m*p+r
170 LET R=K-M*P !k-m*p=n*q
180 IF R-INT(R/Q)*Q=0 THEN GOTO 210 !r¤¬q¤ÎÇÜ¿ô¤Î¾ì¹ç¡¡¢¨MOD(R,Q)=0
190 NEXT M
200 GOTO 230 !³ºÅö¤Ê¤·¡£¼¡¤Ø
210 PRINT K !¾ò·ï¤òËþ¤¿¤¹
220 LET U=U+1
230 NEXT K
240 PRINT "Áí¿ô="; U
250 END
100 INPUT PROMPT "p=": P
110 INPUT PROMPT "q=": Q
120 INPUT PROMPT "d=": D
130 LET U=0
140 FOR K=1 TO D !d°Ê²¼¤Î¼«Á³¿ôk¤Î¤¦¤Á¤Ç
150 !
160 FOR M=0 TO INT(K/P) !£°¤«¤éK¤òP¤Ç³ä¤Ã¤¿¾¦¤Þ¤Ç
170 LET R=K-M*P !k-m*p=n*q
180 IF R-INT(R/Q)*Q=0 THEN GOTO 210 !r¤¬q¤ÎÇÜ¿ô¤Î¾ì¹ç¡¡¢¨MOD(R,Q)=0
190 NEXT M
200 GOTO 230 !³ºÅö¤Ê¤·¡£¼¡¤Ø
210 PRINT K; M;INT(R/Q) !¾ò·ï¤òËþ¤¿¤¹M,N¡¡¢¨
220 LET U=U+1
230 NEXT K
240 PRINT "Áí¿ô="; U
250 END
¡ö¥¢¥ë¥´¥ê¥º¥à¤Î¿ô³ØÅªÇØ·Ê
ÉÔÄêÊýÄø¼° k=m*p+n*q ¤Ï¡¢k-m*p=n*q ¤ÈÊÑ·Á¤µ¤ì¤ë¡£
¹çƱ¼°¤Çɽ¤¹¤È¡¢k-m*p¢á0 mod q ¤È¤Ê¤ë¡£
m ¤Ï£°°Ê¾å¤ÎÀ°¿ô¡¢p ¤Ï¼«Á³¿ô¤è¤ê¡¢m*p¡æ0 ¤È¤Ê¤ë¡£¡¡Æ±Íͤˡ¢n*q¡æ0¡£
¤Þ¤¿¡¢n*q=k-m*p¡æ0 ¤è¤ê¡¢k¡æm*p ¤È¤Ê¤ë¡£
¤·¤¿¤¬¤Ã¤Æ²ò¤¬¤¢¤ì¤Ð¡¢m¤Ï0¡ÁINT(K/P)¤Ç¸«¤Ä¤«¤ë¡£
100 INPUT PROMPT "p=": P
110 INPUT PROMPT "q=": Q
120 INPUT PROMPT "d=": D
130 LET U=0
140 FOR K=1 TO D !d°Ê²¼¤Î¼«Á³¿ôk¤Î¤¦¤Á¤Ç
150 !
160 FOR M=0 TO INT(K/P) !£°¤«¤éK¤òP¤Ç³ä¤Ã¤¿¾¦¤Þ¤Ç
170 LET R=K-M*P !k-m*p=n*q
180 IF R-INT(R/Q)*Q=0 THEN !r¤¬q¤ÎÇÜ¿ô¤Î¾ì¹ç¡¡¢¨MOD(R,Q)=0
PRINT K; M;INT(R/Q) !¾ò·ï¤òËþ¤¿¤¹M,N
LET U=U+1
END IF
190 NEXT M
200 !
210 !
220 !
230 NEXT K
240 PRINT "Áí¿ô="; U !¢¨°ÕÌ£¤¬ÊѤï¤ë
250 END
º£Æü¤Ï
full basic ¤Ç¡¡¡¡Í¸ÂÍ×ÁÇË¡¤Î¡¡¹½Â¤²òÀÏ¥½¥Õ¥È¤ò¡¡¡¡³«È¯¤·¤Æ¤¤¤Þ¤¹
C++¡¡¤Ç¤â¡¡¤·¤Æ¤¤¤Þ¤¹¤¬
full basic ¤Ï¡¡¡¡¥°¥é¥Ò¥Ã¥¯¤¬¡¡¡¡´Êñ¤Ç¡¡¡¡£ã++¡¡¤è¤ê¡¡¡¡ÊØÍø¤Ç¤¹
¤·¤«¤·
»þ´Ö¤¬¡¡¡¡¤«¤«¤ê¤Þ¤¹
²òÀϲÄǽÍ×ÁÇ¿ô¤Ï
£³GRAM¡¡¡¡¤Ç
full basic £¶£°£°£°¡¡Í×ÁÇ
C++¡¡¡¡¡¡¡¡¡¡£±£²£°£°£°¡¡Í×ÁǤǤ¹
Full BASIC¤Î¾ì¹ç¡¢¹ÔÎ󤬷׻»¤Ç¤¤ë¤Î¤Ç¡¢Â¾¤Î¸À¸ì¤è¤ê¤Ï´Êñ¤Ë·×»»¤Ç¤¤ë¤È»×¤¤¤Þ¤¹¡£
¤¿¤À¡¢£²¹à±é»»¤Þ¤Ç¤Ç¤¹¤«¤é¡¢Å¸³«¤·¤Ê¤¬¤é¤³¤Ä¤³¤Ä·×»»¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
REM ***¡¡µÕ¹ÔÎó¤Ç¹â®¥Þ¥¯¥í¡¼¥ê¥óŸ³«
DIM a(3,3),b(3,1),c(3,1),d(3,3)
DEF f(x)=EXP(x)
LET x=0.0001
LET a(1,1)=x
LET a(1,2)=x^2
LET a(1,3)=x^3
LET a(2,1)=2*x
LET a(2,2)=4*x^2
LET a(2,3)=8*x^3
LET a(3,1)=3*x
LET a(3,2)=9*x^2
LET a(3,3)=27*x^3
MAT d=INV(a)
LET e=f(0)
LET c(1,1)=f(x)-e
LET c(2,1)=f(2*x)-e
LET c(3,1)=f(3*x)-e
MAT b=d*c
PRINT b(1,1)
PRINT b(2,1)
PRINT b(3,1)
END
2710 IF Na>0 THEN !¥¢¥ó¥×¤¬¤¢¤ì¤Ð
2720 FOR iter=1 TO 1 !°ÂÄꤵ¤»¤ë¡¡¢¨Í×Ä´À°¡¡¡¡<---------- ¤³¤³
2730 FOR i=1 TO Na
2740 LET b(AmpOut(i))=AmpK(i)*x(AmpPlus(i)) !Vo=K*V+¡¡¢¨ÆþÎϤò½ÐÎϤËÈ¿±Ç¤µ¤»¤ë
2750 NEXT i
2760 MAT x=Ai*b
2770 NEXT iter
2780 END IF
10 OPTION ARITHMETIC COMPLEX
LET j=SQR(-1)
OPTION BASE 1
OPTION ANGLE DEGREES
DIM FREQ(100,5)
LET FREQ(1,1)=10
LET FREQ(2,1)=12.25
LET FREQ(3,1)=15
LET FREQ(4,1)=17.32
LET FREQ(5,1)=20
LET FREQ(6,1)=24.5
LET FREQ(7,1)=30
LET FREQ(8,1)=34.6
LET FREQ(9,1)=40
LET FREQ(10,1)=50
LET FREQ(11,1)=60
LET FREQ(12,1)=70
LET FREQ(13,1)=80
LET FREQ(14,1)=90
FOR I=1 TO 14
LET P=I
LET FREQ(I,1)=FREQ(P,1)
NEXT I
FOR I=15 TO 28
LET P=I-14
LET FREQ(I,1)=FREQ(P,1)*10
NEXT I
FOR I=29 TO 42
LET P=I-28
LET FREQ(I,1)=FREQ(P,1)*100
NEXT I
FOR I=43 TO 56
LET P=I-42
LET FREQ(I,1)=FREQ(P,1)*1000
NEXT I
LET FREQ(57,1)=100000
! FOR I=1 TO 57
! PRINT "FREQ(";I;",1)=";FREQ(I,1)
! NEXT I
FOR K=0.9875 TO 1.0125 STEP 0.0125 !K¤ÏAMP¤Î¥²¥¤¥ó¡£
FOR P=1 TO 57
LET FF=FREQ(P,1)
LET ¦Ø=(2*PI*FF)
LET
A(1,1)=(1/Rs)+(1/R1)
!¡¡Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET
A(1,2)=-(1/R1)
!¡¢Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î -1
LET A(1,3)=0
LET A(1,4)=0
LET A(2,1)=-(1/R1)
LET A(2,2)=(1/R1)+(1/R2)+¦Ø*C1*j !¢¢Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET A(2,3)=-(1/R2)
LET A(2,4)=0
LET A(3,1)=0
LET A(3,2)=-(1/R2)
LET A(3,3)=(1/R2)+(1/R3)+¦Ø*C2*j !££Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET A(3,4)=-(1/R3)-K*¦Ø*C2*j !¤³¤³¤ËK¤ÎÃͤòÆþ¤ì V5=K*V4 ¤òÈ¿±Ç¡£
!¥ß¥ë¥Þ¥ó¤ÎÄêÍý¤òŬÍÑ¡£
LET A(4,1)=0
LET A(4,2)=0
LET
A(4,3)=-(1/R3) !A(3,4)¤È¤ÏÃͤ¬°Û¤Ê¤ë¡£
LET
A(4,4)=(1/R3)+¦Ø*C3*j
!¤¤Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET B(1,1)=10 ! ÅÅή¸»¤«¤é10A¤òή¤·¤Æ¤¤¤ë¡£¡Ã¼»Ò¤Ï1V¤Ë¤Ê¤ë¡£
LET B(2,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
LET B(3,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
LET B(4,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
MAT T=INV(A)
MAT EOUT=T*B
! PRINT "FF=";FF
! MAT PRINT EOUT
LET EE1=EOUT(1,1)
LET EE2=EOUT(2,1)
LET EE3=EOUT(3,1)
LET EE4=EOUT(4,1)
LET EE5=K*EOUT(4,1)
PRINT
LET FREQ(P,2)=20*LOG10(ABS(EE5))
! LET FREQ(P,3)=20*LOG10(ABS(EE3))
LET G5=(ATN(IM(EE5)/RE(EE5)))
IF FF>750 THEN LET G5=G5-180
IF G5>0 THEN LET G5=G5-180
LET FREQ(P,4)=G5
! LET G3=(ATN(IM(EE3)/RE(EE3)))
! IF FF>750 THEN LET G3=G3-180
! LET FREQ(P,5)=G3
NEXT P
PRINT "K=";K
PRINT "ÈÖ¹æ
¼þÇÈ
¿ô E5
E3
¦È5 ¦È3"
FOR I=1 TO 57
PRINT USING "###": I;
PRINT USING " ###,###.#" : FREQ(I,1);
PRINT USING " ####.### dB": FREQ(I,2);
PRINT USING " ####.### dB": FREQ(I,3);
PRINT USING " ####.### ÅÙ": FREQ(I,4);
PRINT USING " ####.### ÅÙ": FREQ(I,5)
NEXT I
!¤³¤³¤«¤é¤Ï¡¢»³ÃæÍͤΥ°¥é¥Õ¥×¥í¥°¥é¥à¤ò»²¾È¡£
SET WINDOW 0.5,5.5, -55,5 !ɽ¼¨Îΰè
DRAW
grid(1,5) !
º¸Ã¼¤ÎÌÜÀ¹¤ê
FOR f=1 TO 6 !£ø¼´¤¬ÂпôÌÜÀ¹ f=1 TO 5 ¤Ç100k ¤Þ¤ÇÌÜÀ¹¤ë¡£
SET COLOR 1 !£±¤Ï¹õ¿§
PLOT TEXT ,AT f-0.1,+0.15: mid$("10 100 1k 10k 100k ",4*(f-1)+1,4)
NEXT f
FOR f=1 TO 6 !y¼´¤¬Ä¾ÀþÌÜÀ¹¤ê
SET COLOR 1 !£±¤Ï¹õ¿§
PLOT TEXT ,AT 0.8,-10*(f-1)-2: mid$(" 0 -25 -50 -75 -100-125 ",4*(f-1)+1,4)
NEXT f
FOR I=1 TO 57 STEP 1 !¼þÇÈ¿ô[Hz]
SET COLOR 1
PLOT LINES:LOG10(FREQ(I,1)) ,FREQ(I,2)/2.5; !ÍøÆÀ[dB]
NEXT I
PLOT LINES
! FOR I=1 TO 57 STEP 1 !¼þÇÈ¿ô[Hz]
! SET COLOR 5 !5¤Ï¿å¿§
! PLOT LINES: LOG10(FREQ(I,1)) ,FREQ(I,3)/2; !ÍøÆÀ[dB]
! NEXT I
! PLOT LINES
FOR I=1 TO 57 STEP 1 !°ÌÁê³ÑÅÙ[ÅÙ]
SET COLOR 4 !4¤ÏÀÖ¿§
PLOT LINES:LOG10(FREQ(I,1)) ,0.125*FREQ(I,4); !³ÑÅÙ[ÅÙ]
NEXT I
PLOT LINES
! FOR I=1 TO 57 STEP 1 !°ÌÁê³ÑÅÙ[ÅÙ]
! SET COLOR 3 !3¤ÏÎп§
! PLOT LINES:LOG10(FREQ(I,1)) ,0.25*FREQ(I,5); !³ÑÅÙ[ÅÙ]
! NEXT I
! PLOT LINES
FOR f=1 TO 6 !y¼´¤¬Ä¾ÀþÌÜÀ¹¤ê
SET COLOR 4
PLOT TEXT ,AT 5.1,-10*(f-1)-2: mid$(" 0 -80 -160-240-320-400 ",4*(f-1)+1,4)
NEXT f
PRINT
NEXT K ! ¤³¤³¤Ç,ÍøÆÀ K¤òÊѲ½¤µ¤»¤ë¡£
!*******************************************************************
!100 LET FF=1000
! PRINT 1/R1
! PRINT 1/R2
! PRINT 1/R3
! PRINT Y1
! PRINT Y2
! PRINT Y3
! FOR I=1 TO NP ! ÇòÀÐÍͤθæ½õ¸À¤ò»²¾È¡£¥Þ¥È¥ê¥¯¥¹¤Î¥Á¥§¥Ã¥¯¤ò¤·¤¿¡£
! FOR J=1 TO NP
! LET Z=A(I,J)
! PRINT USING "(##.######### ":RE(Z);
! PRINT USING "##.#########) ":IM(Z);
! NEXT J
! PRINT
! NEXT I
!**********************************************************************
10 OPTION ARITHMETIC COMPLEX
LET j=SQR(-1)
OPTION BASE 1
OPTION ANGLE DEGREES
DIM FREQ(100,5)
LET FREQ(1,1)=10
LET FREQ(2,1)=12.25
LET FREQ(3,1)=15
LET FREQ(4,1)=17.32
LET FREQ(5,1)=20
LET FREQ(6,1)=24.5
LET FREQ(7,1)=30
LET FREQ(8,1)=34.6
LET FREQ(9,1)=40
LET FREQ(10,1)=50
LET FREQ(11,1)=60
LET FREQ(12,1)=70
LET FREQ(13,1)=80
LET FREQ(14,1)=90
FOR I=1 TO 14
LET P=I
LET FREQ(I,1)=FREQ(P,1)
NEXT I
FOR I=15 TO 28
LET P=I-14
LET FREQ(I,1)=FREQ(P,1)*10
NEXT I
FOR I=29 TO 42
LET P=I-28
LET FREQ(I,1)=FREQ(P,1)*100
NEXT I
FOR I=43 TO 56
LET P=I-42
LET FREQ(I,1)=FREQ(P,1)*1000
NEXT I
LET FREQ(57,1)=100000
! FOR I=1 TO 57
! PRINT "FREQ(";I;",1)=";FREQ(I,1)
! NEXT I
FOR K=0.9875 TO 1.0125 STEP 0.0125 !K¤ÏAMP¤Î¥²¥¤¥ó¡£
FOR P=1 TO 57
LET FF=FREQ(P,1)
LET ¦Ø=(2*PI*FF)
LET A(1,1)=(1/Rs)+(1/R1) !¡¡Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET
A(1,2)=-(1/R1)
!¡¢Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î -1
LET A(1,3)=0
LET A(1,4)=0
LET A(1,5)=0
LET A(2,1)=-(1/R1)
LET A(2,2)=(1/R1)+(1/R2)+¦Ø*C1*j !¢¢Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET A(2,3)=-(1/R2)
LET A(2,4)=0
LET A(2,5)=0
LET A(3,1)=0
LET A(3,2)=-(1/R2)
LET A(3,3)=(1/R2)+(1/R3)+¦Ø*C2*j!££Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET A(3,4)=-(1/R3) !A(4,3)¤ÈÃͤ¬Æ±¤¸¤¯¤·ÂоιÔÎó¤Ë¤¹¤ë¡£
LET A(3,5)=-¦Ø*C2*j
LET A(4,1)=0
LET A(4,2)=0
LET A(4,3)=-(1/R3) !A(3,4)¤ÈÃͤ¬Æ±¤¸¤¯¤·ÂоιÔÎó¤Ë¤¹¤ë¡£
LET A(4,4)=(1/R3)+¦Ø*C3*j !¤¤Ã¼»Ò¤Î¥¢¥É¥ß¥¿¥ó¥¹¤Î¹ç·×
LET A(4,5)=0
LET A(5,1)=0
LET A(5,2)=0
LET A(5,3)=0
LET A(5,4)=-K ! ¤³¤³¤ËK¤ÎÃͤòÆþ¤ì V5=K*V4 ¤òÈ¿±Ç¡£
LET A(5,5)=1 ! ¤³¤³¤Ë1¤ÎÃͤòÆþ¤ì V5=K*V4 ¤òÈ¿±Ç¡£
LET B(1,1)=10 ! ÅÅή¸»¤«¤é10A¤òή¤¹¡£¡Ã¼»Ò¤Ï1V¡£
LET B(2,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
LET B(3,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
LET B(4,1)=0 ! ¥¥ë¥Ò¥Û¥Ã¥Õ¤Îˡ§¤«¤é ¥¼¥í¤Ç¤¢¤ë¡£
LET B(5,1)=0 ! ¤³¤³¤Ë0¤ÎÃͤòÆþ¤ì V5=K*V4 ¤òÈ¿±Ç¡£
MAT T=INV(A)
MAT EOUT=T*B
! PRINT "FF=";FF
! MAT PRINT EOUT
LET EE1=EOUT(1,1)
LET EE2=EOUT(2,1)
LET EE3=EOUT(3,1)
LET EE4=EOUT(4,1)
LET EE5=EOUT(5,1)
PRINT
LET FREQ(P,2)=20*LOG10(ABS(EE5))
! LET FREQ(P,3)=20*LOG10(ABS(EE3))
LET G5=(ATN(IM(EE5)/RE(EE5)))
IF FF>750 THEN LET G5=G5-180
IF G5>0 THEN LET G5=G5-180
LET FREQ(P,4)=G5
! LET G3=(ATN(IM(EE3)/RE(EE3)))
! IF FF>750 THEN LET G3=G3-180
! LET FREQ(P,5)=G3
NEXT P
PRINT "K=";K
PRINT "ÈÖ¹æ
¼þÇÈ
¿ô E5
E3
¦È5 ¦È3"
FOR I=1 TO 57
PRINT USING "###": I;
PRINT USING " ###,###.#" : FREQ(I,1);
PRINT USING " ####.### dB": FREQ(I,2);
PRINT USING " ####.### dB": FREQ(I,3);
PRINT USING " ####.### ÅÙ": FREQ(I,4);
PRINT USING " ####.### ÅÙ": FREQ(I,5)
NEXT I
!¤³¤³¤«¤é¤Ï¡¢»³ÃæÍͤΥ°¥é¥Õ¥×¥í¥°¥é¥à¤ò»²¾È¡£
SET WINDOW 0.5,5.5, -55,5 !ɽ¼¨Îΰè
DRAW
grid(1,5) !
º¸Ã¼¤ÎÌÜÀ¹¤ê
FOR f=1 TO 6 !£ø¼´¤¬ÂпôÌÜÀ¹ f=1 TO 5 ¤Ç100k ¤Þ¤ÇÌÜÀ¹¤ë¡£
SET COLOR 1 !£±¤Ï¹õ¿§
PLOT TEXT ,AT f-0.1,+0.15: mid$("10 100 1k 10k 100k ",4*(f-1)+1,4)
NEXT f
FOR f=1 TO 6 !y¼´¤¬Ä¾ÀþÌÜÀ¹¤ê
SET COLOR 1 !£±¤Ï¹õ¿§
PLOT TEXT ,AT 0.8,-10*(f-1)-2: mid$(" 0 -25 -50 -75 -100-125 ",4*(f-1)+1,4)
NEXT f
FOR I=1 TO 57 STEP 1 !¼þÇÈ¿ô[Hz]
SET COLOR 1
PLOT LINES:LOG10(FREQ(I,1)) ,FREQ(I,2)/2.5; !ÍøÆÀ[dB]
NEXT I
PLOT LINES
! FOR I=1 TO 57 STEP 1 !¼þÇÈ¿ô[Hz]
! SET COLOR 5 !5¤Ï¿å¿§
! PLOT LINES: LOG10(FREQ(I,1)) ,FREQ(I,3)/2; !ÍøÆÀ[dB]
! NEXT I
! PLOT LINES
FOR I=1 TO 57 STEP 1 !°ÌÁê³ÑÅÙ[ÅÙ]
SET COLOR 4 !4¤ÏÀÖ¿§
PLOT LINES:LOG10(FREQ(I,1)) ,0.125*FREQ(I,4); !³ÑÅÙ[ÅÙ]
NEXT I
PLOT LINES
! FOR I=1 TO 57 STEP 1 !°ÌÁê³ÑÅÙ[ÅÙ]
! SET COLOR 3 !3¤ÏÎп§
! PLOT LINES:LOG10(FREQ(I,1)) ,0.25*FREQ(I,5); !³ÑÅÙ[ÅÙ]
! NEXT I
! PLOT LINES
FOR f=1 TO 6 !y¼´¤¬Ä¾ÀþÌÜÀ¹¤ê
SET COLOR 4
PLOT TEXT ,AT 5.1,-10*(f-1)-2: mid$(" 0 -80 -160-240-320-400 ",4*(f-1)+1,4)
NEXT f
PRINT
NEXT K ! ¤³¤³¤Ç,ÍøÆÀ K¤òÊѲ½¤µ¤»¤ë¡£
½½¿ÊBASIC¤Ï¡¤
LET N=1000
DIM A(N)
¤Î¤è¤¦¤Ê³ÈÄ¥¹½Ê¸¤òµöÍÆ¤¹¤ë¤¿¤á¡¤ÇÛÎóÍ×ÁǤμÂÎΰè¤ò¥Ò¡¼¥×¾å¤Ë³ÎÊݤ·¤Þ¤¹¡£
DIM B(1000)
¤Î¤è¤¦¤ËFull BASICµ¬³Ê¤ÎÈϰϤÇÀë¸À¤µ¤ì¤¿ÇÛÎó¤Ï¥¹¥¿¥Ã¥¯¥á¥â¥ê¾å¤Ë³ÎÊݤǤ¤Þ¤¹¤¬¡¤
ÆâÉô¹½Â¤¤ÎÊ£»¨¤µ¤òÈò¤±¤ë¤¿¤á¤Ë¤É¤Á¤é¤Î·Á¼°¤ÎÇÛÎó¤âÇÛÎóÍ×ÁǤϥҡ¼¥×¾å¤ËÃÖ¤¤¤Æ¤¤¤Þ¤¹¡£
REM ½½¿ÊBASICźÉÕ"\BASICw32\SAMPLE\INTERPRE.bas"¤Ë²ÃÉ®
REM ¹ÔÈÖ¹æ¤Î¤Ê¤¤¹Ô¤¬²ÃÉ®Éôʬ¡£¹ÔÈÖ¹æ¤Ïºï½ü²Ä¡£
1000 REM Full BASIC¤Î¥â¥¸¥å¡¼¥ë¤Î»È¤¤Êý¤ò¼¨¤¹¥µ¥ó¥×¥ë
1010 REM
1020 REM ¿ôÃͼ°¤Îɾ²Á¤ò¹Ô¤¦
1030 REM Áȹþ¤ß´Ø¿ô¤Ï¡¤SIN¡¤COS¡¤TAN, LOG, EXP, SQR, INT¡¤ABS¤ÈPI¤Î¤ß
1040 REM Âçʸ»ú¤È¾®Ê¸»ú¤Î¶èÊ̤Ϥ·¤Ê¤¤
1050 REM ¿ôÃͼ°¤Îʸˡ¤Ï¤Û¤ÜFull BASIC¤Ë½à¤º¤ë¤¬¡¤´Ø¿ô̾¤Ë³¤¯³ç¸Ì¤Ï¶õÇò¤òÆþ¤ì¤º¤Ë½ñ¤¯¡£
1060 REM ¿ôÃͤϡ¤¿ô»ú¤Ç»Ï¤Þ¤ê¡¤¥³¥ó¥Þ¤ò1¸Ä°Ê²¼´Þ¤à¿ô»ú¤ÎÎó¤È¤·¤Æ¤Î¤ß½ñ¤±¤ë¡£
1070 REM Îí½ü»»¥¨¥é¡¼¤Ê¤É¤Ï¹Íθ¤·¤Æ¤¤¤Ê¤¤¡£
1080 DECLARE EXTERNAL FUNCTION interpreter.expression ! ¿ôÃͼ°¤òɾ²Á¤¹¤ë´Ø¿ô
1090 DECLARE EXTERNAL STRING interpreter.s$ ! ÆþÎϹÔ
1100 DECLARE EXTERNAL NUMERIC interpreter.i ! ÆþÎϹԤÎʸ»ú°ÌÃÖ
1110 DECLARE EXTERNAL SUB interpreter.skip ! ¶õÇòʸ»ú¤òÆÉ¤ßÈô¤Ð¤¹Éû¥×¥í¥°¥é¥à
DECLARE EXTERNAL FUNCTION interpreter.str_expression$ !ʸ»úÎó¼°¤òɾ²Á¤¹¤ë´Ø¿ô
DECLARE EXTERNAL NUMERIC interpreter.vc,interpreter.sc !ÊÑ¿ô¤Î¸Ä¿ô(vc=¿ôÃÍ,sc=ʸ»úÎó)
DECLARE EXTERNAL SUB interpreter.error !¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
1120 LINE INPUT s$
1130 ! LET s$=UCASE$(s$) !ʸ»úÎó¤Î¾®Ê¸»úÊÝ»ý¤Î¤¿¤á̵¸ú¤Ë¤·¤¿
DO
LET vc,sc=0
1140 LET i=1
1150 CALL skip
IF s$(i:i)="$" THEN
LET i=i+1
CALL skip
IF s$(i:i)="=" THEN
LET i=i+1
CALL skip
PRINT str_expression$ ! ʸ»úÎó¼°É¾²Á
ELSE
CALL error("$=")
END IF
ELSE
1160 PRINT expression ! ¿ôÃͼ°É¾²Á
END IF
1170 IF i<>LEN(s$)+1 THEN PRINT "Syntax error" ! Èæ³Ó¼°¤òi<LEN(s$)¤«¤éÊѹ¹
LOOP UNTIL vc+sc=0 OR i<>LEN(s$)+1 ! Ãæ»ß¤Ï[Ãæ»ß]¥Ü¥¿¥ó¤Ç
1180 END
1190 !
1200 MODULE interpreter
! MODULE OPTION ARITHMETIC NATIVE ! DECIMAL_HIGH,COMPLEX,RATIONAL ¿ôÃÍ¥ª¥×¥·¥ç¥ó
1210 PUBLIC STRING s$
1220 PUBLIC NUMERIC i
1230 PUBLIC FUNCTION expression
1240 PUBLIC SUB skip
1250 SHARE FUNCTION term,factor,primary,numeric
PUBLIC FUNCTION str_expression$
PUBLIC NUMERIC vc,sc
PUBLIC SUB error
SHARE FUNCTION check,argument,rounding,position,bitval,v_chr,variable
SHARE FUNCTION str_primary$,str_constant$,str_naming$,sub_string$,str_input$,bitstr$
SHARE NUMERIC vari_val(20),inputv ! 20=ÊÑ¿ô¤Î¸Ä¿ô
SHARE STRING sn$,vari_name$(20),string$(20),str_name$(20)
SHARE FUNCTION F1,F2,F3,FS$ !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
! MODULE OPTION ANGLE DEGREES ! ³Ñ¤ÎÂ礤µ¤Îñ°Ì
! MODULE OPTION CHARACTER BYTE ! ʸ»úÎó½èÍý¤Îñ°Ì
LET inputv=0
1260 !
EXTERNAL FUNCTION F1(a) !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
let F1=a
END FUNCTION
EXTERNAL FUNCTION F2(a,b) !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
let F2=a+b
END FUNCTION
EXTERNAL FUNCTION F3(a,b,c) !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
let F3=a+b+c
END FUNCTION
EXTERNAL FUNCTION FS$(a$,b,c) !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
let FS$=a$&str$(b)&str$(c)
END FUNCTION
!
1270 EXTERNAL SUB skip
1280 DO WHILE s$(i:i)=" "
1290 LET i=i+1
1300 LOOP
1310 END SUB
1320 !
1330 EXTERNAL FUNCTION expression
1340 DECLARE NUMERIC n
1350 DECLARE STRING op$
1360 SELECT CASE s$(i:i)
1370 CASE "-"
1380 LET i=i+1
1390 CALL skip
1400 LET n=-term
1410 CASE "+"
1420 LET i=i+1
1430 CALL skip
1440 LET n=term
1450 CASE ELSE
1460 LET n=term
1470 END SELECT
1480 DO WHILE s$(i:i)="+" OR s$(i:i)="-"
1490 LET op$=s$(i:i)
1500 LET i=i+1
1510 CALL skip
1520 IF op$="+" THEN LET n=n+term ELSE LET n=n-term
1530 LOOP
1540 LET expression =n
1550 CALL skip
1560 END FUNCTION
1570 !
1580 EXTERNAL FUNCTION term
1590 DECLARE NUMERIC n
1600 DECLARE STRING op$
1610 LET n=factor
1620 DO WHILE s$(i:i)="*" OR s$(i:i)="/"
1630 LET op$=s$(i:i)
1640 LET i=i+1
1650 CALL skip
1660 IF op$="*" THEN LET n=n*factor ELSE LET n=n/factor
1670 LOOP
1680 LET term=n
1690 END FUNCTION
1700 !
1710 EXTERNAL FUNCTION factor
1720 DECLARE NUMERIC n
1730 LET n=primary
1740 DO WHILE s$(i:i)="^"
1750 LET i=i+1
1760 CALL skip
1770 LET n=n^primary
1780 LOOP
1790 LET factor=n
1800 END FUNCTION
1810 !
1820 EXTERNAL FUNCTION primary
1830 IF s$(i:i)>="0" AND s$(i:i)<="9" THEN
1840 LET primary=numeric
ELSEIF s$(i:i)="." THEN
LET primary=numeric
1850 ELSEIF UCASE$(s$(i:i+1))="PI" AND check(s$(i+2:i+2))=1 THEN ! ´Ø¿ôcheck²ÃÉ®
1860 LET i=i+2
1870 CALL skip
1880 LET primary=PI ! ÍÍý¿ô¥â¡¼¥ÉÃí°Õ
ELSEIF UCASE$(s$(i:i+2))="RND" AND check(s$(i+3:i+3))=1 THEN
LET i=i+3
CALL skip
LET primary=RND ! ÊÑ¿ôÆþÎϤ¬¤¢¤ë¿ôÃͼ°¤Ç¤ÏÅÔÅÙ¹¹¿·
ELSEIF UCASE$(s$(i:i+3))="TIME" AND check(s$(i+4:i+4))=1 THEN
LET i=i+4
CALL skip
LET primary=TIME ! ÊÑ¿ôÆþÎϤ¬¤¢¤ë¿ôÃͼ°¤Ç¤ÏÅÔÅÙ¹¹¿·
ELSEIF UCASE$(s$(i:i+3))="DATE" AND check(s$(i+4:i+4))=1 THEN
LET i=i+4
CALL skip
LET primary=DATE ! ÊÑ¿ôÆþÎϤ¬¤¢¤ë¿ôÃͼ°¤Ç¤ÏÅÔÅÙ¹¹¿·
!ELSEIF UCASE$(s$(i:i+5))="MAXNUM" AND check(s$(i+6:i+6))=1 THEN
! LET i=i+6
! CALL skip
! LET primary=MAXNUM ! ÍÍý¿ô¥â¡¼¥ÉÉÔ²Ä
1890 ELSE
1900 IF s$(i:i)="(" THEN
1910 LET i=i+1
1920 CALL skip
1930 LET primary=expression
ELSEIF UCASE$(s$(i:i+2))="F1(" THEN !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
LET i=i+3
CALL skip
LET Primary=F1(expression)
ELSEIF UCASE$(s$(i:i+2))="F2(" THEN !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
LET i=i+3
CALL skip
LET primary=F2(expression,argument)
ELSEIF UCASE$(s$(i:i+2))="F3(" THEN !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
LET i=i+3
CALL skip
LET primary=F3(expression,argument,argument)
1940 ELSEIF UCASE$(s$(i:i+3))="SIN(" THEN ! Ķ±Û´Ø¿ô
1950 LET i=i+4
1960 CALL skip
1970 LET Primary=SIN(expression)
1980 ELSEIF UCASE$(s$(i:i+3))="COS(" THEN ! Ķ±Û´Ø¿ô
1990 LET i=i+4
2000 CALL skip
2010 LET Primary=COS(expression)
2020 ELSEIF UCASE$(s$(i:i+3))="TAN(" THEN ! Ķ±Û´Ø¿ô
2030 LET i=i+4
2040 CALL skip
2050 LET Primary=TAN(expression)
2060 ELSEIF UCASE$(s$(i:i+3))="LOG(" THEN ! Ķ±Û´Ø¿ô
2070 LET i=i+4
2080 CALL skip
2090 LET Primary=LOG(expression)
2100 ELSEIF UCASE$(s$(i:i+3))="EXP(" THEN ! Ķ±Û´Ø¿ô
2110 LET i=i+4
2120 CALL skip
2130 LET Primary=EXP(expression)
2140 ELSEIF UCASE$(s$(i:i+3))="SQR(" THEN ! ÍÍý¿ô¥â¡¼¥ÉÃí°Õ
2150 LET i=i+4
2160 CALL skip
2170 LET Primary=SQR(expression)
2180 ELSEIF UCASE$(s$(i:i+3))="INT(" THEN
2190 LET i=i+4
2200 CALL skip
2210 LET Primary=INT(expression)
2220 ELSEIF UCASE$(s$(i:i+3))="ABS(" THEN
2230 LET i=i+4
2240 CALL skip
2250 LET Primary=ABS(expression)
ELSEIF UCASE$(s$(i:i+3))="MOD(" THEN
LET i=i+4
CALL skip
LET primary=MOD(expression,argument)
ELSEIF UCASE$(s$(i:i+5))="ROUND(" THEN
LET i=i+6
CALL skip
LET primary=rounding
ELSEIF UCASE$(s$(i:i+4))="CEIL(" THEN
LET i=i+5
CALL skip
LET Primary=CEIL(expression)
ELSEIF UCASE$(s$(i:i+3))="SGN(" THEN
LET i=i+4
CALL skip
LET Primary=SGN(expression)
ELSEIF UCASE$(s$(i:i+2))="IP(" THEN
LET i=i+3
CALL skip
LET Primary=IP(expression)
ELSEIF UCASE$(s$(i:i+2))="FP(" THEN
LET i=i+3
CALL skip
LET Primary=FP(expression)
ELSEIF UCASE$(s$(i:i+9))="REMAINDER(" THEN
LET i=i+10
CALL skip
LET primary=REMAINDER(expression,argument)
ELSEIF UCASE$(s$(i:i+8))="TRUNCATE(" THEN
LET i=i+9
CALL skip
LET primary=TRUNCATE(expression,argument)
ELSEIF UCASE$(s$(i:i+4))="LOG2(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=LOG2(expression)
ELSEIF UCASE$(s$(i:i+5))="LOG10(" THEN ! Ķ±Û´Ø¿ô
LET i=i+6
CALL skip
LET Primary=LOG10(expression)
ELSEIF UCASE$(s$(i:i+3))="CSC(" THEN ! Ķ±Û´Ø¿ô
LET i=i+4
CALL skip
LET Primary=CSC(expression)
ELSEIF UCASE$(s$(i:i+3))="SEC(" THEN ! Ķ±Û´Ø¿ô
LET i=i+4
CALL skip
LET Primary=SEC(expression)
ELSEIF UCASE$(s$(i:i+3))="COT(" THEN ! Ķ±Û´Ø¿ô
LET i=i+4
CALL skip
LET Primary=COT(expression)
ELSEIF UCASE$(s$(i:i+4))="ASIN(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=ASIN(expression)
ELSEIF UCASE$(s$(i:i+4))="ACOS(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=ACOS(expression)
ELSEIF UCASE$(s$(i:i+3))="ATN(" THEN ! Ķ±Û´Ø¿ô
LET i=i+4
CALL skip
LET Primary=ATN(expression)
ELSEIF UCASE$(s$(i:i+5))="ANGLE(" THEN ! Ķ±Û´Ø¿ô
LET i=i+6
CALL skip
LET primary=ANGLE(expression,argument)
ELSEIF UCASE$(s$(i:i+4))="SINH(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=SINH(expression)
ELSEIF UCASE$(s$(i:i+4))="COSH(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=COSH(expression)
ELSEIF UCASE$(s$(i:i+4))="TANH(" THEN ! Ķ±Û´Ø¿ô
LET i=i+5
CALL skip
LET Primary=TANH(expression)
!ELSEIF UCASE$(s$(i:i+3))="EPS(" THEN ! ÍÍý¿ô¥â¡¼¥ÉÉÔ²Ä
! LET i=i+4
! CALL skip
! LET Primary=EPS(expression)
ELSEIF UCASE$(s$(i:i+3))="DEG(" THEN
LET i=i+4
CALL skip
LET Primary=DEG(expression)
ELSEIF UCASE$(s$(i:i+3))="RAD(" THEN
LET i=i+4
CALL skip
LET Primary=RAD(expression)
ELSEIF UCASE$(s$(i:i+3))="MAX(" THEN
LET i=i+4
CALL skip
LET primary=MAX(expression,argument)
ELSEIF UCASE$(s$(i:i+3))="MIN(" THEN
LET i=i+4
CALL skip
LET primary=MIN(expression,argument)
ELSEIF UCASE$(s$(i:i+4))="FACT(" THEN !½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+5
CALL skip
LET Primary=FACT(expression)
ELSEIF UCASE$(s$(i:i+4))="PERM(" THEN !½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+5
CALL skip
LET primary=PERM(expression,argument)
ELSEIF UCASE$(s$(i:i+4))="COMB(" THEN !½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+5
CALL skip
LET primary=COMB(expression,argument)
ELSEIF UCASE$(s$(i:i+10))="COLORINDEX(" THEN !½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+11
CALL skip
LET primary=COLORINDEX(expression,argument,argument)
!ELSEIF UCASE$(s$(i:i+7))="COMPLEX(" THEN !Ê£ÁÇ´Ø¿ô
! LET i=i+8
! CALL skip
! LET primary=COMPLEX(expression,argument)
!ELSEIF UCASE$(s$(i:i+2))="RE(" THEN !Ê£ÁÇ´Ø¿ô
! LET i=i+3
! CALL skip
! LET Primary=RE(expression)
!ELSEIF UCASE$(s$(i:i+2))="IM(" THEN !Ê£ÁÇ´Ø¿ô
! LET i=i+3
! CALL skip
! LET Primary=IM(expression)
!ELSEIF UCASE$(s$(i:i+4))="CONJ(" THEN !Ê£ÁÇ´Ø¿ô
! LET i=i+5
! CALL skip
! LET Primary=CONJ(expression)
!ELSEIF UCASE$(s$(i:i+3))="ARG(" THEN !Ê£ÁÇ´Ø¿ô
! LET i=i+4
! CALL skip
! LET Primary=ARG(expression)
!ELSEIF UCASE$(s$(i:i+5))="NUMER(" THEN !ÍÍý¿ô¥â¡¼¥ÉÀìÍÑ
! LET i=i+6
! CALL skip
! LET Primary=NUMER(expression)
!ELSEIF UCASE$(s$(i:i+5))="DENOM(" THEN !ÍÍý¿ô¥â¡¼¥ÉÀìÍÑ
! LET i=i+6
! CALL skip
! LET Primary=DENOM(expression)
!ELSEIF UCASE$(s$(i:i+3))="GCD(" THEN !ÍÍý¿ô¥â¡¼¥ÉÀìÍÑ
! LET i=i+4
! CALL skip
! LET primary=GCD(expression,argument)
!ELSEIF UCASE$(s$(i:i+6))="INTSQR(" THEN !ÍÍý¿ô¥â¡¼¥ÉÀìÍÑ
! LET i=i+7
! CALL skip
! LET Primary=INTSQR(expression)
!ELSEIF UCASE$(s$(i:i+7))="INTLOG2(" THEN !ÍÍý¿ô¥â¡¼¥ÉÀìÍÑ
! LET i=i+8
! CALL skip
! LET Primary=INTLOG2(expression)
ELSEIF UCASE$(s$(i:i+3))="LEN(" THEN
LET i=i+4
CALL skip
LET primary=LEN(str_expression$)
ELSEIF UCASE$(s$(i:i+3))="POS(" THEN
LET i=i+4
CALL skip
LET primary=position
ELSEIF UCASE$(s$(i:i+3))="VAL(" THEN
LET i=i+4
CALL skip
LET primary=VAL(str_expression$)
ELSEIF UCASE$(s$(i:i+3))="ORD(" THEN
LET i=i+4
CALL skip
LET primary=ORD(str_expression$)
ELSEIF UCASE$(s$(i:i+4))="BVAL(" THEN
LET i=i+5
CALL skip
LET primary=bitval
ELSEIF UCASE$(s$(i:i+4))="BLEN(" THEN !½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+5
CALL skip
LET primary=BLEN(str_expression$)
ELSEIF v_chr(s$(i:i))=1 THEN
LET primary=variable ! ÊÑ¿ô
CALL skip
EXIT FUNCTION
2260 ELSE
CALL error("FUNCTION primary")
2270 PRINT "Syntax error"
2280 STOP
2290 END IF
2300 IF s$(i:i)=")" THEN
2310 LET i=i+1
2320 CALL skip
2330 ELSE
CALL error("FUNCTION primary")
2340 PRINT "Syntax error"
2350 STOP
2360 END IF
2370 END IF
2380 END FUNCTION
2390 !
2400 EXTERNAL FUNCTION numeric
2410 DECLARE NUMERIC i0
2420 CALL skip
2430 LET i0=i
IF s$(i:i)="." THEN ! ¾®¿ôÅÀ¤Ç»Ï¤Þ¤ë
LET i=i+1
ELSE
2440 DO WHILE s$(i:i)>="0" AND s$(i:i)<="9"
2450 LET i=i+1
2460 LOOP
2470 IF s$(i:i)="." THEN LET i=i+1
END IF
2480 DO WHILE s$(i:i)>="0" AND s$(i:i)<="9"
2490 LET i=i+1
2500 LOOP
IF LEN(s$)>=i AND UCASE$(s$(i:i))="E" THEN ! »Ø¿ôÉô
LET i=i+1
IF s$(i:i)="+" OR s$(i:i)="-" THEN LET i=i+1
DO WHILE s$(i:i)>="0" AND s$(i:i)<="9"
LET i=i+1
LOOP
END IF
2510 LET numeric=VAL(s$(i0:i-1))
2520 CALL skip
2530 END FUNCTION
2540 !
![¤½¤Î£²]¤ØÂ³¤¯
! [¤½¤Î£²]
! *°Ê²¼¤¹¤Ù¤Æ²ÃÉ®Éôʬ*
EXTERNAL FUNCTION check(c$) !! ͽÌó¸ì¤Î¸å³»ú
DECLARE STRING p$
LET check=-1
DO
READ IF MISSING THEN EXIT DO : p$
IF c$=p$ THEN LET check=1
LOOP
DATA " " , "+" , "-" , "*" , "/" , "^" , "," , ")" , ""
END FUNCTION
!
EXTERNAL FUNCTION argument !! °ú¿ô
CALL skip
IF s$(i:i)="," THEN
LET i=i+1
CALL skip
ELSE
CALL error("FUNCTION argument,°ú¿ô")
END IF
LET argument=expression
END FUNCTION
!
EXTERNAL FUNCTION rounding !! ´Ø¿ôROUND¤Î¼±ÊÌ
DECLARE NUMERIC a
LET a=expression
IF s$(i:i)="," THEN
LET i=i+1
CALL skip
LET rounding=ROUND(a,expression)
ELSEIF s$(i:i)=")" THEN
LET rounding=ROUND(a) ! ½½¿ÊBASICÆÈ¼«³ÈÄ¥
ELSE
CALL error("FUNCTION rounding,´Ø¿ôROUND")
END IF
END FUNCTION
!
EXTERNAL FUNCTION position !! ´Ø¿ôPOS¤Î¼±ÊÌ
DECLARE STRING aa$,bb$
LET aa$=str_expression$
IF s$(i:i)="," THEN
LET i=i+1
CALL skip
LET bb$=str_expression$
IF s$(i:i)=")" THEN
LET position=POS(aa$,bb$)
ELSEIF s$(i:i)="," THEN
LET i=i+1
CALL skip
LET position=POS(aa$,bb$,expression)
ELSE
CALL error("FUNCTION position,´Ø¿ôPOS")
END IF
ELSE
CALL error("FUNCTION position,´Ø¿ôPOS")
END IF
END FUNCTION
!
EXTERNAL FUNCTION bitval !! ´Ø¿ôBVAL¤Î¼±ÊÌ
DECLARE STRING aa$
LET aa$=str_primary$
IF s$(i:i)="," THEN
LET i=i+1
CALL skip
IF s$(i:i)="2" THEN
LET i=i+1
CALL skip
LET bitval=BVAL(aa$,2)
ELSEIF s$(i:i+1)="16" THEN
LET i=i+2
CALL skip
LET bitval=BVAL(aa$,16)
ELSE
CALL error("FUNCTION bitval,´Ø¿ôBVAL")
END IF
ELSE
CALL error("FUNCTION bitval,´Ø¿ôBVAL")
END IF
END FUNCTION
!
EXTERNAL FUNCTION v_chr(c$) !! ÊÑ¿ô̾ʸ»ú
IF c$>="A" AND c$<="Z" OR c$>="a" AND c$<="z" OR c$>="¤¡" THEN !ÀèÆ¬Ê¸»úµÚ¤Ó¤½¤ì°Ê¹ß
LET v_chr=1
ELSEIF c$>="0" AND c$<="9" OR c$="_" OR c$>="£°" THEN ! 2ʸ»úÌܰʹß
LET v_chr=2
ELSE
LET v_chr=-1
END IF
END FUNCTION
!
EXTERNAL FUNCTION variable !! ÊÑ¿ô
DECLARE NUMERIC j,vi
DECLARE STRING vn$,aa$,vs$
LET vn$=""
DO WHILE v_chr(s$(i:i))>=1
LET vn$=vn$&s$(i:i)
LET i=i+1
LOOP
FOR j=1 TO vc
IF UCASE$(vn$)=UCASE$(vari_name$(j)) THEN
LET variable=vari_val(j) ! ´û½Ð¤ÎÊÑ¿ô
EXIT FUNCTION
END IF
NEXT j
LET vc=vc+1
LET vari_name$(vc)=vn$
IF inputv=0 THEN
DO
LINE INPUT PROMPT vn$&"=" : aa$ ! ÊÑ¿ô¤Ø¤ÎÆþÎÏ
LOOP UNTIL aa$<>""
ELSE
CALL error("FUNCTION variable,ÊÑ¿ôÆþÎÏ")
END IF
LET vs$=s$
LET vi=i
LET s$=LTRIM$(aa$)
LET i=1
LET inputv=1
LET vari_val(vc)=expression ! ÊÑ¿ô¤ËÆþÎϤ·¤¿¿ôÃͼ°¤Î½èÍý
LET inputv=0
LET s$=vs$
LET i=vi
LET variable=vari_val(vc)
END FUNCTION
!
!
EXTERNAL FUNCTION str_expression$ !! ʸ»úÎó¼°
DECLARE STRING str_n$
LET str_n$=str_primary$
DO WHILE s$(i:i)="&"
LET i=i+1
CALL skip
LET str_n$=str_n$&str_primary$
LOOP
LET str_expression$ =str_n$
CALL skip
END FUNCTION
!
EXTERNAL FUNCTION str_primary$ !! ʸ»úÎó°ì¼¡»Ò
DECLARE NUMERIC j
IF s$(i:i)="""" THEN
LET i=i+1
LET str_primary$=str_constant$
ELSEIF UCASE$(s$(i:i+4))="DATE$" THEN
LET i=i+5
CALL skip
LET str_primary$=DATE$ !ÊÑ¿ôÆþÎϤ¬¤¢¤ë¿ôÃͼ°¤Ç¤ÏÅÔÅÙ¹¹¿·
ELSEIF UCASE$(s$(i:i+4))="TIME$" THEN
LET i=i+5
CALL skip
LET str_primary$=TIME$ !ÊÑ¿ôÆþÎϤ¬¤¢¤ë¿ôÃͼ°¤Ç¤ÏÅÔÅÙ¹¹¿·
ELSE
IF v_chr(s$(i:i))=1 THEN
LET sn$=str_naming$ ! ʸ»úÎó´Ø¿ô/ÊÑ¿ô̾
FOR j=1 TO sc
IF UCASE$(sn$)=UCASE$(str_name$(j)) THEN
CALL skip
IF s$(i:i)="(" THEN
LET i=i+1
CALL skip
LET str_primary$=sub_string$(string$(j)) !Éôʬʸ»úÎó
ELSE
LET str_primary$=string$(j) ! ´û½Ð¤Îʸ»úÎóÊÑ¿ô
END IF
EXIT FUNCTION
END IF
NEXT j
ELSE
CALL error("FUNCTION str_primary$,ʸ»úÎó°ì¼¡»Ò")
END IF
SELECT CASE UCASE$(sn$)&s$(i:i)
CASE "FS$(" !!! ¥æ¡¼¥¶¡¼ÄêµÁ´Ø¿ô
LET i=i+1
CALL skip
LET str_primary$=FS$(str_expression$,argument,argument)
CASE "REPEAT$("
LET i=i+1
CALL skip
LET str_primary$=REPEAT$(str_expression$,argument)
CASE "STR$("
LET i=i+1
CALL skip
LET str_primary$=STR$(expression)
CASE "USING$("
LET i=i+1
CALL skip
LET str_primary$=USING$(str_expression$,argument)
CASE "CHR$("
LET i=i+1
CALL skip
LET str_primary$=CHR$(expression)
CASE "LCASE$("
LET i=i+1
CALL skip
LET str_primary$=LCASE$(str_expression$)
CASE "UCASE$("
LET i=i+1
CALL skip
LET str_primary$=UCASE$(str_expression$)
CASE "LTRIM$("
LET i=i+1
CALL skip
LET str_primary$=LTRIM$(str_expression$)
CASE "RTRIM$("
LET i=i+1
CALL skip
LET str_primary$=RTRIM$(str_expression$)
CASE "BSTR$("
LET i=i+1
CALL skip
LET str_primary$=bitstr$
CASE "SUBSTR$(" ! ½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+1
CALL skip
LET str_primary$=SUBSTR$(str_expression$,argument,argument)
CASE "MID$(" ! ½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+1
CALL skip
LET str_primary$=MID$(str_expression$,argument,argument)
CASE "LEFT$(" ! ½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+1
CALL skip
LET str_primary$=LEFT$(str_expression$,argument)
CASE "RIGHT$(" ! ½½¿ÊBASICÆÈ¼«³ÈÄ¥
LET i=i+1
CALL skip
LET str_primary$=RIGHT$(str_expression$,argument)
CASE ELSE
LET str_primary$=str_input$ ! ʸ»úÎóÆþÎÏ
CALL skip
EXIT FUNCTION
END SELECT
IF s$(i:i)=")" THEN
LET i=i+1
CALL skip
ELSE
CALL error("FUNCTION str_primary$")
END IF
END IF
END FUNCTION
!
EXTERNAL FUNCTION str_constant$ !! ʸ»úÎóÄê¿ô
DECLARE STRING cc$
LET cc$=""
DO
IF s$(i:i)="""" THEN
IF s$(i+1:i+1)="""" THEN ! [""]¤Î¼±ÊÌ
LET cc$=cc$&s$(i:i)
LET i=i+2
ELSE
LET i=i+1
EXIT DO
END IF
ELSE
LET cc$=cc$&s$(i:i)
LET i=i+1
IF i>LEN(s$)+1 THEN
CALL error("FUNCTION str_constant$,ʸ»úÎóÄê¿ô")
EXIT DO
END IF
END IF
LOOP
CALL skip
LET str_constant$=cc$
END FUNCTION
!
EXTERNAL FUNCTION str_naming$ !! ʸ»úÎó´Ø¿ô/ÊÑ¿ô̾
LET sn$=""
DO WHILE v_chr(s$(i:i))>=1
LET sn$=sn$&s$(i:i)
LET i=i+1
LOOP
IF s$(i:i)="$" THEN
LET str_naming$=sn$&s$(i:i)
LET i=i+1
ELSE
CALL error("FUNCTION str_naming$,ʸ»úÎó´Ø¿ô/ÊÑ¿ô̾")
END IF
END FUNCTION
!
EXTERNAL FUNCTION sub_string$(ss$) !! Éôʬʸ»úÎó
DECLARE NUMERIC a
LET a=expression
IF s$(i:i)=":" THEN
LET i=i+1
CALL skip
LET sub_string$=ss$(a:expression)
IF s$(i:i)=")" THEN
LET i=i+1
CALL skip
ELSE
CALL error("FUNCTION sub_string$,Éôʬʸ»úÎó")
END IF
ELSE
CALL error("FUNCTION sub_string$,Éôʬʸ»úÎó")
END IF
END FUNCTION
!
EXTERNAL FUNCTION str_input$ !! ʸ»úÎóÆþÎÏ
DECLARE NUMERIC j,vi
DECLARE STRING vs$
LET sc=sc+1
LET str_name$(sc)=sn$
IF inputv=0 THEN
LINE INPUT PROMPT sn$&"=" : string$(sc)
ELSE
CALL error("FUNCTION str_input$,ʸ»úÎóÆþÎÏ")
END IF
LET j=1
DO WHILE string$(sc)(j:j)=" "
LET j=j+1
LOOP
IF string$(sc)(j:j)="$" THEN
LET j=j+1
DO WHILE string$(sc)(j:j)=" "
LET j=j+1
LOOP
IF string$(sc)(j:j)="=" THEN
LET vs$=s$
LET vi=i
LET s$=string$(sc)(j+1:LEN(string$(sc)))
LET s$=LTRIM$(s$)
LET i=1
LET inputv=1
LET string$(sc)=str_expression$ ! ʸ»úÎóÊÑ¿ô¤ËÆþÎϤ·¤¿Ê¸»úÎ󼰤νèÍý
LET inputv=0
LET s$=vs$
LET i=vi
END IF
END IF
LET str_input$=string$(sc)
END FUNCTION
!
EXTERNAL FUNCTION bitstr$ !! ´Ø¿ôBSTR$¤Î¼±ÊÌ
DECLARE NUMERIC a
LET a=expression
IF s$(i:i)="," THEN
LET i=i+1
CALL skip
IF s$(i:i)="2" THEN
LET i=i+1
CALL skip
LET bitstr$=BSTR$(a,2)
ELSEIF s$(i:i+1)="16" THEN
LET i=i+2
CALL skip
LET bitstr$=BSTR$(a,16)
ELSE
CALL error("FUNCTION bitstr$,´Ø¿ôBSTR$")
END IF
ELSE
CALL error("FUNCTION bitstr$,´Ø¿ôBSTR$")
END IF
END FUNCTION
!
EXTERNAL SUB error(e$) !! ¥¨¥é¡¼É½¼¨
PRINT "Error (";e$;")"
!STOP
END SUB
!
2550 END MODULE
L ¤ÎÅ۵¹ß²¼¡á¡¡ L * dI'(t)/dt¡¡=L*s*I'(t)¡¡¡¡¡¡¡¡¡¡=¡¡sL * I'(t)
C ¤ÎÅ۵¹ß²¼¡á(1/C)* ¢é I'(t)dt¡¡=(1/C)*(1/s )*I'(t) =(1/sC) * I'(t)
R ¤ÎÅ۵¹ß²¼¡á¡¡ R * I'(t)
L ¤ÎÅ۵¹ß²¼¡á¡¡ L * dI(t)/dt¡¡=L*j¦Ø*I(t)¡¡¡¡¡¡¡¡ =¡¡j¦ØL * I(t)
C ¤ÎÅ۵¹ß²¼¡á(1/C)* ¢é I(t)dt¡¡=(1/C)*(1/j¦Ø)*I(t) =(1/j¦ØC) * I(t)
R ¤ÎÅ۵¹ß²¼¡á¡¡ R * I(t)
¿··Ç¼¨Èij«Àß
Åê¹Æ¼Ô¡§ÇòÀС¡ÏÂÉ× Åê¹ÆÆü¡§2008ǯ 7·î21Æü(·î)09»þ38ʬ46Éåᥤ¥ó¤Î·Ç¼¨ÈĤ¬ÉÔÄ´¤Î¤È¤¡¤¤³¤Á¤é¤ò¤´ÍøÍѤ¯¤À¤µ¤¤¡£
¤Ê¤ª¡¤ºÇÂç500¹Ô¤Þ¤Ç½ñ¤¹þ¤á¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¤
¼Â¸³Åª¤Ë¤Ï251¹Ô¤Þ¤Ç¤·¤«½ñ¤¹þ¤á¤Ê¤¤¤è¤¦¤Ç¤¹¡£
Internet Explorer¤Ç¤â¥¤¥ó¥Ç¥ó¥È¤òÊÝ»ý¤·¤¿¤Þ¤Þɽ¼¨¤µ¤ì¤ë¤³¤È¡¤
Ʊ°ì¿Í¤Ë¤è¤ëϢ³½ñ¤¹þ¤ß¤Ëµ¬À©¤¬¤«¤«¤ë¤³¤È¡Ê¥¹¥Ñ¥àÂкö¡Ë
¤Ê¤É¡¤ÍøÅÀ¤â¿¤¤¤Î¤Ç¡¤¾ÍèŪ¤Ë¤ÏËܳÊŪ¤Ê°Üž¤â¤¢¤ê¤¨¤Þ¤¹¡£