勤務校には学校設定科目「数理情報」がある。数理的問題をコンピュータを使って解く(解決する)授業である。問題を解決するアルゴリズムを考えプログラミングし実行させて結果を見る。
プログラミング言語としてはFull-BASICに準拠した処理系の「十進BASIC」を用いている。…こんな紹介をすると,情報系の人から「いまさらBASICなんて…フフン…」と鼻で笑われることが多い。

まあ,BASICと聞けばマイコン黎明期に登場したTiny-BASICから始まる機能限定版の言語処理系を思い出す人が多い。各社のパソコンに搭載されて一世を風靡したマイクロソフトBASICも機能限定版であった。

フル機能版BASIC「Full-BASIC」の言語仕様がISO(JIS)で規定されており,その具体的実装として「十進BASIC」が作成されフリーソフトとして提供されている。

Full-BASICの実力を見てみよう(その1)

問題
ある地域には4つの直線道路がある。この道路は,どの2つも平行でなく,また,どの3つも同一の交差点を通らないとする。これと同じように直線道路を増やしていくとして,道路の数が10のとき,交差点はいくつできるか。

道路の数をnとしたときの交差点の数をa(n)とすると,
a(1)=0, a(2)=1, a(3)=3, a(4)=6, ⋯⋯
道路の数が n のとき,道路を1つ作ると,その道路はそれまでにある n 本の道路とそれぞれ1つずつ交差点を作るから,新しい交差点の数は a(n)+n 個となる。すなわち,次の式が成り立つ。
a(n+1)=a(n)+n
このような式を漸化式(ぜんかしき)という。数学では a(n) を n の式で表す方法を学んだが,ここでは漸化式をそのままプログラムにする方法を考えてみよう。

《考え方》
先に求めたようにa(1)=0,a(n+1)=a(n)+nであるから,第n項はa(n)=a(n-1)+n-1となるので,

漸化式の第n項を求める関数a(n)を定義する。
n=1のときは関数の値として0を返す。
n>1のとき(n=1でないとき)は関数の値としてa(n-1)+n-1を返す。

以上の考え方によりプログラムすると次のようになります。
機能限定版BASICでは不可能だった関数の再帰呼び出しを利用しています。

DECLARE EXTERNAL FUNCTION a
LET n=10
PRINT "交差点の数";a(n)
END

EXTERNAL FUNCTION a(n)
IF n=1 THEN
    LET a=0			
ELSE 
   LET a=a(n-1)+n-1	
END IF
END FUNCTION
Full-BASICの実力を見てみよう(その2)

Full-BASICは行列計算なども簡単にできます。
3☓3行列の逆行列を求めます。

DIM a(3,3),b(3,3)
MAT READ a
DATA 1,2,3
DATA 1,2,1
DATA 3,2,1
MAT b=INV(a) !行列aの逆行列を求め行列bに代入
MAT PRINT a  !行列aを表示
MAT PRINT b  !行列bを表示
END

実行結果

 
 1                       2                       3 
 1                       2                       1 
 3                       2                       1 

 0                      -.5                      .5 
-.25                     1                      -.25 
 .5                     -.5                      0

Full-BASICはTiny-BASIC〜MS-BASICの系譜のモノとは全く別モノです。「BASICなんて…フフン」と鼻で笑わないでください。

Follow me!