【 リスト1:n!の値 】
10 input n 15 kotae=1 20 for i=n to 1 step -1 30 kotae=kotae*i 40 next i 50 print n;" ! の値=";kotae 60 ENDどんな値(真の値)なのかを知りたいという要望に対してそれをかなえるプログラム、それが今回のレポートにつながったのです。
【 リスト2:n!の実用計算 】
100 defint a-z 110 dim mx(100) 120 dim lx(100),kx(100) 130 dim moji(100,4) 131 for i=1 to 100 132 for j=1 to 4 133 moji(i,j)=0 134 next j 135 next i 140 input nn 150 for n=2 to nn 160 print 180 print n;"! の値は次の通りである。" 190 print 200 no=1 210 kx(1)=1 220 for i=2 to n 230 noo=no+1 240 if noo>100 then goto 890 250 for l=1 to noo 260 mx(l)=0 270 lx(l)=0 280 next l 290 kx(noo)=0 300 nl=0 310 nl=nl+1 320 ind=0 330 if nl>no then 420 340 for j=1 to i 350 lx(nl)=lx(nl)+kx(nl) 360 if lx(nl)>9999 then gosub 900 370 next j 380 lx(nl)=lx(nl)+mx(nl) 390 if lx(nl)>9999 then gosub 900 400 no=no+ind 410 go to 310 420 for j=1 to no 430 kx(j)=lx(j) 440 next j 450 next i 451 ccc=no/2 460 jjj=int(ccc) 470 if jjj=0 then go to 540 480 for ji=1 to jjj 490 kk=kx(ji) 500 jj=no-ji+1 510 kx(ji)=kx(jj) 520 kx(jj)=kk 530 next ji 540 lj=4 542 zzz=kx(1)/10 550 mm=int(zzz) 570 if mm=0 then goto 620 580 moji(1,lj)=kx(1)-mm*10 590 kx(1)=mm 600 lj=lj-1 610 go to 542 620 moji(1,lj)=kx(1) 630 if no=1 then goto 800 640 for ll=2 to no 650 llj=4 660 sss=kx(ll)/10 665 mm=int(sss) 680 if mm=0 then goto 730 690 moji(ll,llj)=kx(ll)-mm*10 700 kx(ll)=mm 710 llj=llj-1 720 goto 660 730 moji(ll,llj)=kx(ll) 740 if llj=1 then goto 790 750 llj=llj-1 760 for mll=1 to llj 770 moji(ll,mll)=0 780 next mll 790 next ll 800 for ik=lj to 4 810 print moji(1,ik); 820 next ik 830 for iik=2 to no 840 for iij=1 to 4 850 print moji(iik,iij); 860 next iij 870 next iik 871 print 880 next n 890 END 900 zxzx=lx(nl)/10000 905 is=int(zxzx) 910 ia=lx(nl)-is*10000 920 if no=nl then ind=1 921 vv=nl+1 930 mx(vv)=mx(vv)+is 940 lx(nl)=ia 950 return【 リスト3:anの値の実用計算、10000桁まで可能型 】
100 dim k(10000) 110 input a 120 input n 121 print a;"の";n;"乗の値は次の通りである" 122 print 130 LET i=1 131 z=0 132 LET k(i)=a 150 if n=1 then goto 300 160 if k(i)>9 then gosub 400 170 for l=2 to n 172 for i=10000 to 1 step -1 180 LET k(i)=k(i)*a 181 next i 183 for i=1000 to 1 step -1 190 if k(i)>9 then gosub 400 192 next i 200 next l 210 goto 600 300 print k(i) 310 goto 630 400 u=k(i)/10 410 iu=int(u) 420 k(i)=k(i)-iu*10 430 m=i+1 440 k(m)=k(m)+iu 441 if k(m)>9 THEN goto 700 450 return 600 for i=1000 to 1 step -1 602 if k(i)=0 and z=0 then goto 620 610 print k(i); 611 z=z+1 620 next i 630 END 700 u2=k(m)/10 710 iu2=int(u2) 720 k(m)=k(m)-iu2*10 730 m=m+1 740 k(m)=k(m)+iu2 750 if k(m)>9 THEN goto 700 760 returnこのプログラム以外のものでも同様な計算をする実用プログラムは多数あると思います。要はこれらの計算をどのようにして行うかという点(アルゴリズム)の問題であり、様々な考え方があるのです。