(仮称)十進BASICが目指すもの 文教大学教育学部 白石 和夫 アルゴリズムを習得する数学教育から アルゴリズムを作り,使う数学教育へ 自律思考の育成 数学的活動の道具 数学的事実の探究 数学理論の実地検証 数学の探訪(DO MATHを楽しむ) アルゴリズムの概念の習得 人間が使う言葉としてのアルゴリズムの記述 コンピュータの学習をコンピュータ言語への 翻訳技術の習得にしてはいけない しかし,アルゴリズムを実行してみることは必 要 自律思考を育てる 論理性の育成 論理的な文書の作成 証明の記述を自律的に行えない学習者多い プログラミングを通して,自律思考を育てたい 数学的活動の道具 数理的現象から構造を見抜く 新しい理論を作る 数学理論の適用 数学のよさを感じ取る 既存BASICの問題点 N88BASIC etc. 論理的表現 A=A+1 代入と相等の区別が身に付かない 文法のむずかしさ 10 A=5 20 IF 1<A<3 THEN PRINT “Y” ELSE PRINT ”N" 文法のむずかしさ 10 IF A=1 THEN B=0 : IF A=2 THEN B=10 アルゴリズムの記述 10 20 30 40 50 60 70 INPUT A,B,C D=B^2-4*A*C IF D<0 THEN 60 PRINT (-B+SQR(D))/(2*A), ・・・ GOTO 70 PRINT "kai nashi" END アルゴリズムの記述 10 20 30 40 50 60 70 80 90 INPUT N F=2 IF N=1 THEN GOTO 90 IF N MOD F=0 THEN PRINT F; ELSE GOTO 70 N=N/F GOTO 30 F=F+1 GOTO 40 END 計算 10 20 30 40 X=0 PRINT X,SQR(X) X=X+0.1 IF X<>10 THEN GOTO 20 論理性? 計算 10 FOR x=1 TO 100 20 FOR y=x TO 100 30 LET z=SQR(x^2+y^2) 40 IF INT(z)=z THEN PRINT x,y,z 50 NEXT y 60 NEXT x 70 END N88BASICだと正しい答えが出ない 数学的論理よりもコンピュータ理解が重要? グラフィックス (0,0) (639,399) エラー処理のむずかしさ 100 ON ERROR GOTO 1000 110 DEF FNF(X)=1/X 120 FOR X=-10 TO 10 130 PSET (X,FNF(X)) 140 NEXT X 150 END 1000 RESUME NEXT SYNTAX ERROR 文法誤りが実行してみないとわからない 10 FOR I=10 TO 1OOO 20 ・・・・ 30 NEXT 40 PLINT A 解決するには? 独自言語 ひとつに絞るのは難しい (百花繚乱) 仕様かバグか不明確 (利用者泣かせ) ISO Full BASIC BASIC言語の国際規格(日本ではJIS) J.G.Kemeny と T.E.KurtzのTrue BASICが土 台 Full BASICの特徴 数値は浮動小数点10進数 演算結果の正確さに関する規定を持つ 構造化言語 再帰呼び出し可能な副プログラム,関数定義 構造化例外状態処理 問題座標系によるグラフィックス 文法誤りは実行前に検出される (文法より論理の構築に集中できる) 処理系の都合でなく, 使う側の都合に合わせた文法 マイクロソフトBASIC 大小比較,論理演算は数値演算の一部 (真は‐1,偽は0,非負を真と解釈) だから,1<A<3の値は-1(真) Full BASIC 大小比較,論理演算は数値演算と非互換 だから,1<A<3は文法誤り (翻訳時に検出される) Full BASICの特徴(弱点?) 作るのが面倒 文法を拡張したほうが作成が容易。 しかし,それは,機械と人間とで意味の解釈 の相違を生み出す原因になる。 厳格な文法のよさが知られていない 「文法が拡張されている」と聞くと「よさそう」 と思ってしまう人が多い(実際は誤り)。 アルゴリズムの記述 人間の使うアルゴリズム記述言語でプログラ ムを書くべきである。 プログラミング言語への翻訳がプログラミング の作業であってはならない。 プログラミングは,論理を組み立てる作業で あるべき。 2次方程式の解 10 20 30 40 50 60 70 80 INPUT a,b,c LET D=b^2-4*a*c IF D>=0 THEN PRINT (-b+SQR(D))/(2*a),・・・ ELSE PRINT "kai nashi" END IF END 素因数分解 100 110 120 130 140 150 160 170 180 190 INPUT N LET F=2 DO UNTIL N=1 DO UNTIL MOD(N,F)<>0 PRINT F; LET N=N/F LOOP LET F=F+1 LOOP END 計算 数値は浮動小数点10進数 (整数型,単精度,倍精度などの別がない) 組込関数の正確さが規格で定められている。 (数学的に正しい値が整数になる演算の結果 は整数になることが保証される) 計算(実用性) ASIN,ACOS,ANGLE,LOG10などの関数 OPTION ANGLE DEGREES MOD(x,y)は,x-y*INT(x/y) で定義される MOD(-2,10)は 8 MOD(4.71, 3.14)は 1.57 (MicrosoftのMOD演算子と定義が異なる) (-2) MOD 10 は -2 グラフィックス 計算結果を図示する GUIが目的ではない Full BASICのグラフィックス 問題座標系 描画領域の初期値は正方形 xyプロッタを想定した描画命令 4×4の2次元配列(行列)を利用して アフィン変換,射影変換が可能 関数のグラフ 10 20 30 40 50 60 DEF f(x)=x^3-4*x SET WINDOW -4,4,-4,4 FOR x=-4 TO 4 STEP 0.1 PLOT LINES: x,f(x); NEXT x END 例外状態処理 100 110 120 130 140 150 160 170 180 190 DEF f(x)=1/x SET WINDOW -4,4,-4,4 FOR x=-4 TO 4 STEP 0.1 WHEN EXCEPTION IN PLOT LINES: x,f(x); USE PLOT LINES END WHEN NEXT x END (仮称)十進BASIC Windows版とLinux(x86)版がある。 JIS Full BASICのうち 中核機能単位・図形機能単位 付属書のモジュールおよび単文字入力 に対応(若干の非互換あり) フリーソフト(再配布も可) (仮称)十進BASIC Win32版 テキスト出力は1メガバイト超でも表示できる (結果はスクロールして見ることができ, 保存したり,クリップボードにコピーしたり, 印刷したりできる。) グラフィックスは,ビットマップのほか,メタファ イルの作成にも対応。 文法 行番号はなくてもよい 処理系を簡略化するための拡張文法は採用 していない。 (意味があいまいになるかもしれない構文が 文法的に禁止される) 計算 正確さのために,一般的なライブラリに頼ら ず,独自の計算ルーチンを使用 たとえば,LOG10(1000)は正確に3になる 例 10 PRINT LOG10(1000)-3 20 END を実行すると,答えは0 再帰呼び出し可能な絵定義 絵定義は描画用の手続き定義で,副プログラ ムの機能の他,実行時に図形変形の指定が 可能。 図形変形は組込みの変形(拡大,平行移動, 回転,剪断のほか,4行4列の行列による射 影変換も可能で,それらの積を書くこともでき る。) 絵定義の再帰呼び出しを利用すると,自己相 似図形が簡単に描ける。 PICTURE D(n) IF n=20 THEN PLOT POINTS: 0,0 ELSE DRAW D(n+1) WITH ROTATE(PI/4)*SCALE(r) DRAW D(n+1) WITH SHIFT(-1,0)*ROTATE(PI/4)*SCALE(1/SQR(2))*SHIFT(1,0) END IF END PICTURE SET WINDOW -1/2,3/2,-1,1 DRAW axes SET POINT STYLE 1 DRAW D(1) END 独自拡張 複素数モード 十進1000桁モード 有理数モード(多倍長) できないこと 数式処理(コンピュータ代数) 多倍長整数の高速計算 構造型の変数 動的変数 オブジェクト指向
© Copyright 2024 ExpyDoc