CPUの進歩でよみがえるBASIC言語

CPUの進歩でよみがえるBASIC言語

一昔前までは,パソコンでプログラム言語としてBASIC言語を使っていた.私も研究ではワープロ以外は自分で作ったプログラムを利用していた.分子軌道計算もBASIC言語で書かれたものをパソコンの機種に合うように書き換えて使用していた.学生の情報処理実習もBASIC言語による実習をずっと続けてきた.

最近はプログラムは既製品を購入するものであり,アプリケーションの使い方を知ることが情報処理能力になってしまった.ところが,Javaスクリプトを利用したホームページの制作,あるいはパソコンをもっと便利に使いたいとなるとスクリプト処理が必要になる.そのような時にBASIC言語等によるプログラミング経験があると簡単に対応できる.

しかし,BASIC言語はインタプリタ方式,すなわち実行すると1行づつ翻訳する必要があるため,時間がかかり処理が遅い.描画など処理速度が問題になる場合は使い物にならないと言われ次第に使われなくなってしまった.ところが,最近のCPUの処理速度は当時のものに較べると格段に速い.ひょとしたら描画だって捨てたものでないはずと思い,WEBを調べるとWindowsマシン専用だった十進BASICがIntel Mac用まで整備されて公開されていた.

図に示すプログラムおよび実行例は6員環の半径と色,さらに中心位置を変えながら240個描画する16行のプログラムである.子供の頃,麦わらで編んだかごのイメージを描かせてみた.Core 2 duo 2GHzのMac Miniで0.1秒で描画してくれた.Core i7 2600Kでは0.02秒であった.チンタラチンタラ描くBASICのイメージとはまったく異なる速度である.私立大学ではまったく予習復習しないため,「入出力」.「分岐」.「繰り返し処理」などの基礎文法まで教えるのがやっとで,グラフィック処理のことろまでは教えることができなかった.面白味はこれからというところで定期試験突入,国家試験にも関係ないので,試験が終わると何をやったかさえ覚えていないという状況が続いた.学生の能力に大幅な差があり足並みを揃えるのが難しいので,授業終了後も演習できるようにしたがアルバイトがあるからとさっさと帰ってしまう始末である.卒後教育で教える手もあるが,教員に教えた経験からするとおそらく対応できないだろう.プログラミングは20歳までに習得すれば後は自転車の運転と同じであるが,機を逸するとまったくだめである.

十進BASICは白石和夫氏によって大学の数学教育用に作られた言語であり,JIS規格にも準拠している.アルゴリズムを分かりやすく記述できるので,大学教育には必須と思っているが経験したことのない教員にはワード,エクセルで十分,それ以外は不要と言われ続けた.それでもモッコスぶりを発揮して定年まで続けられたのは助教授以下賛同してくれたおかげである.(2012/1/14)

追記

Mac用でも使用できる別のBASIC言語を紹介しておきたい.

(Chipmunk BASIC を利用) 「フロンティア電子密度のグラフィック表示」

「自由電子模型法で共役ポリエンの軌道係数」を求めるプログラムである.実行するとπ電子の数を聞いてくるので,4を入力するとブタジエンの各原子の軌道係数や電子密度が計算される.塗りつぶしたサークルを半径を変えて描かせている.赤,青は正負である.

5' free electron model

10 input n

15 dim c(n,n)

18 print"Eigenvalues"

20 for i = n to 1 step -1

30 print i;

40 for j = 1 to n

50 a = i*j*180/(n+1)

60 d = 3.141592*a/180

70 wh = sin(d)

80 c(i,j) = sqr(2/(n+1))*wh

90 print using "###.###";c(i,j);

100 next j

110 print

120 next i

125 print

128 print"Electron densities"

130 for i = n to 1 step -1

132 print i;

135 for j = 1 to n

140 ed = 2*c(i,j)*c(i,j)

150 print using "###.###";ed;

160 next j

165 print

170 next i

200 graphics 0

210 for i = n to 1 step -1:'input a$

220 for j = 1 to n step 1

230 c = abs(c(i,j)*30)

235 graphics moveto j*30,300-i*30

236 if c(i,j)<0 then

238 graphics color 0,0,100

250 for r=0 to c:graphics circle r:next r

255 else

258 graphics color 100,0,0

260 for r=0 to c:graphics circle r:next r

270 endif

280 next j

285 graphics moveto j*30,300-i*30+5:graphics drawtext str$(i)

290 next i

300 end

>run

? 4 ブタジエンの計算

Eigenvalues

4 0.372 -0.602 0.602 -0.372

3 0.602 -0.372 -0.372 0.602 ---- LUMO

2 0.602 0.372 -0.372 -0.602 ---- HOMO

1 0.372 0.602 0.602 0.372


Electron densities

4 0.276 0.724 0.724 0.276

3 0.724 0.276 0.276 0.724

2 0.724 0.276 0.276 0.724

1 0.276 0.724 0.724 0.276

(十進BASICを利用) 分子構造を描く基本プログラム

回転角はデータ文の最後尾で指定できるようにしている.原子間の距離をすべて計算し,1~1.6Åの範囲にある場合は結合を描き,原子の色はデータ文から文字で読み取った.

結合を複数の線で結ぶ等の変更を行うと立体感が増す.

実行に要する時間は0.14秒である.


!molecule drawing program

SET WINDOW -5,5,-5,5

SET LINE COLOR 1

OPTION ANGLE DEGREES


data 25

data C, 0.170273, 1.520767, 1.217438

data C, 0.308716, 2.104233, -0.059952

data H, 0.968262, 1.404404, 1.915527

data C, -1.099945, 1.007248, 1.363449

data C, -0.865906, 1.991257, -0.753906

data H, 1.226089, 2.481018, -0.454239

data H, -1.531219, 0.657272, 2.276428

data C, -1.204086, -0.737076, 0.153671

data C, -1.925200, 1.616852, 0.244934

data C, -0.943344, -0.262207, -1.128555

data H, -1.082535, 2.406600, -1.712555

data O, -3.121887, 1.741348, 0.172882

data H, -1.797089, -0.058090, -1.745789

data H, -2.249634, -0.833527, 0.389038

data C, 0.306198, -0.453079, -1.862076

data H, 0.228989, -0.237946, -2.913193

data C, -0.358673, -1.794296, 0.859955

data C, 1.504089, -0.815979, -1.411530

data H, 2.302780, -0.861160, -2.130051

data C, 1.126938, -1.534653, 0.952606

data H, -0.753174, -1.930359, 1.859940

data H, -0.519028, -2.734787, 0.333862

data H, 1.572388, -1.716339, 1.913879

data C, 1.905792, -1.139800, -0.036545

data H, 2.958908, -1.037933, 0.158127

data 50,0,0


read n

dim a$(n),x(n),y(n),z(n)

for i=1 to n

read a$(i),x(i),y(i),z(i)

next i

read xx,yy,zz

for i=1 to n

LET A1= x(I)

LET A2= y(I)*COS(XX)+z(I)*SIN(XX)

LET A3=-y(I)*SIN(XX)+z(I)*COS(XX)

LET B2= A2

LET B3= A3*COS(YY)+A1*SIN(YY)

LET B1=-A3*SIN(YY)+A1*COS(YY)

LET x(I)= B1*COS(ZZ)+B2*SIN(ZZ)

LET y(I)=-B1*SIN(ZZ)+B2*COS(ZZ)

LET z(I)= B3

next i


for i=1 to n

for j=i to n

if (x(i)-x(j))>1.55 or (y(i)-y(j))>1.55 or (z(i)-z(j))>1.55 then

go to 10

end if

LET d=sqr((x(i)-x(j))*(x(i)-x(j))+(y(i)-y(j))*(y(i)-y(j))+(z(i)-z(j))*(z(i)-z(j)))

! print d

if d<1.6 and d>1.0 then

plot lines: x(i),y(i);x(j),y(j)

plot lines: x(i)+0.02,y(i)+0.02;x(j)+0.02,y(j)+0.02

end if

if a$(i)="H" then

SET AREA COLOR 5

DRAW circle WITH SCALE(1,1)*ROTATE(0)*SCALE(0.1)*shift(x(i),y(i))

elseif a$(i)="O" then

SET AREA COLOR 4

DRAW circle WITH SCALE(1,1)*ROTATE(0)*SCALE(0.2)*shift(x(i),y(i))

else

SET AREA COLOR 8

DRAW circle WITH SCALE(1,1)*ROTATE(0)*SCALE(0.15)*shift(x(i),y(i))

end if

10 next j

next i

PICTURE circle

DIM P(18,2)

FOR t=1 TO 18

LET P(t,1)=1*cos(20*t)

LET P(t,2)=1*sin(20*t)

NEXT t

MAT PLOT AREA: P

mat plot lines:p

END PICTURE

end

もっと速い処理速度を求めたいならMETAL BASICというフリーソフトがある.

Programming with the METAL BASIC compiler

本サイト内の関連項目

最近のパソコンの驚くべき能力

外部リンク

Chipmunk Basic Home Page