高等学校 数学科ソフトウェア活用 (UBASIC) 使用ソフトウェア: UBASIC 千葉県情報教育センター Ver.8.4 i はじめに コンピュータの発達とともに,プログラム言語も ら,斬新な形式の言語が次々に生まれています。 ハードウェアにもっとも近いアセンブリ言語から,人 高校生が学習で,アルゴリズムや思考の訓練に役 間により理解し易い言語 (高級言語) へと進歩してま 立たせるために,プログラミングを経験することは いりました。メモリの使用量についても,少ないシ 有効です。プログラム言語はコマンド (命令) の理解 ステムで動く言語から,メモリをふんだんに使用す が容易で,自然言語 (日本語) に近いものが適切であ るシステムでなければ動かない言語なども出現して ると考えられますが,高校生にとっては,日本語に います。 こだわる必要はないと思います。「インタプリタ型」 インタプリタ型の言語とは,人間が理解できるプ か「コンパイラ型」の選択では, 「インタプリタ型」 ログラムを,一行ごとに機械が理解できるコードへ, でよいと思います。実行速度の高速化の問題はそれ 逐次翻訳させてから実行する,方式の言語です。こ ほど重要ではないからです。もちろん,コンパイル れに対して,すべての行を一括翻訳し,以後実行す がほとんど意識されないようなシステム環境であれ る際に翻訳作業を行わない,コンパイラ型の言語も ば「コンパイラ型」でもよいでしょう。 あります。 コンパイラ型,インタプリタ型で,どちらの方式 高校生のつくるプログラムは 10 行程度を想定して いますので構造化言語である必要もないと思います。 の言語が優れているかということはありません。ス コンピュータ上で扱うプログラム言語はそれぞれ ピードが要求されるものでなければプログラムの修 一長一短があるので,特に限定されるものではない 正実行の繰り返しが手軽なインタプリタ型,スピー でしょう。したがってこのテキストでは,手近にあ ドが要求されるものや,市販のソフトウェアなどに り,比較的使いやすい多倍長計算計算用 BASIC「 はコンパイラ型,のように目的に応じて使い分けて UBASIC86」を使用することとします. います. 現在活躍している言語は,厳しい淘汰を経て生き 残っているという意味で,優秀な言語と言えると思 います。 科学技術計算の分野に長い歴史と伝統をもつ FOR- TRAN という言語があります。事務処理の分野で圧 倒的な COBOL 言語ともども,現在も改良を重ね進 歩しています。 高級言語の部類に属する C 言語は,ハードウェア の能力を十分に引き出すことのできるコンパイラ型 が主流です。 BASIC 言語は,ハードウェアの知識がなくてもプ ログラムを作成できます。また,インタプリタ型です から,プログラムの間違いを修正することがとても 簡単にできます。最近では,コンパイラ型の BASIC 言語も登場しました。 LOGO という言語は,教育用の言語としてアメリ カで生まれ,非常に注目されている言語です。小学 生でも容易にプログラムを作成できるシステム環境 と,よく考えられた言語体系をもっています。 このほかにも,ハードウェアや利用技術の進歩か ii 参考 言語名 概要 対話形の言語 BASIC 多数のパソコンに登載 手続き形言語 対話形の言語 LOGO グラフィックスに強い 非手続き形言語 用途 教育用 アプリケーション開発 教育用 アプリケーション開発 コンパイラ形の言語 C 言語 ハードウェア性能を 引き出すことができる OS や アプリケーション開発 コンピュータの知識が必要 コンパイラ型の言語 機械語の命令の一つをニーモ アセンブリ言語 ニックと呼ぶ記号で表す ハードウェア性能を引き出す 機械の制御システム ことができるがコンピュータ の知識が必要 その他の言語 FORTRAN コンパイラ型の言語 科学技術,事務処理 COBOL PASCAL, LISP 伝統のある高級言語 アプリケーション開発 目次 1 UBASIC とは 1 1.1 UBASIC とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 UBASIC の起動と終了 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1 UBASIC を起動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.2 UBASIC を終了する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 ダイレクトモードによる計算 2.1 2.2 2.3 5 画面で四則計算をする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.1 キー操作について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.2 画面に表示する (print) 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 画面で式・関数の値を求める . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 平方根を求める (sqrt) 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.2 三角比を求める (sin, cos, tan) 関数 . . . . . . . . . . . . . . . . . . . . . . . . . 9 画面に文字を表示させる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 プログラムモードによる計算 3.1 3.2 3.3 3.4 11 プログラムモードとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.1 プログラムの入力と実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.2 プログラムの表示・追加・削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.3 変数と代入 (=) 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 プログラムの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.1 キーボードから入力する命令 (input) . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 プログラムの保存と読込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 分岐のあるプログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3.1 無条件分岐 (goto) 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3.2 条件分岐 (if ∼ then) 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3.3 分岐の応用プログラム (2 次方程式の解法と手順) . . . . . . . . . . . . . . . . . . . 18 繰り返し文のあるプログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4.1 繰り返し (for ∼ next) 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4.2 2 重の繰り返し (for ∼ next) 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 プログラムを利用した計算 23 4.1 商と余りの関係 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2 素因数分解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.3 素数の分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 iii iv 目次 4.4 4.3.1 素数の表 . . . . . . . 進んだプログラミング技法 . 4.4.1 配列変数 . . . . . . . 4.4.2 read 命令と data 文 4.4.3 ファンクションキー 4.4.4 サブルーチン . . . . . . . . . . . . . . . . . . . . . . 5 数学教育への応用例 5.1 数表の代用 . . . . . . . . . . . . 5.1.1 2 乗と平方根の表 . . . . . 5.1.2 三角比の表 . . . . . . . . 5.1.3 平方根と累乗根 . . . . . . 5.1.4 数値積分の計算法 . . . . . 5.2 確率の実験 . . . . . . . . . . . . 5.2.1 乱数について . . . . . . . 5.2.2 サイコロを振る . . . . . . 5.2.3 モンテカルロ法 . . . . . . 5.3 数の性質 . . . . . . . . . . . . . . 5.3.1 有理数の小数表示と循環節 5.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 29 29 29 29 29 . . . . . . . . . . . 33 34 34 34 35 37 38 38 38 39 41 41 ピタゴラス数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6 グラフィック 6.1 グラフィック事始め . . . . . . . . . . . . . . . 6.1.1 グラフィックを使う準備 . . . . . . . . 6.1.2 円を描いてみよう . . . . . . . . . . . . 6.1.3 点,直線,長方形を描いてみましょう 6.2 グラフィックの使用 . . . . . . . . . . . . . . . 6.2.1 画面上の座標 . . . . . . . . . . . . . . 6.2.2 数学で使う . . . . . . . . . . . . . . . 6.2.3 こまごましたこと . . . . . . . . . . . . 6.2.4 生徒の使用 . . . . . . . . . . . . . . . 6.3 関数のグラフ . . . . . . . . . . . . . . . . . . 6.3.1 y = f (x) のグラフ . . . . . . . . . . . 6.3.2 文字列を式として使う . . . . . . . . . 6.4 その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 44 44 44 45 46 46 46 47 48 49 49 51 53 6.4.1 6.4.2 やさしいもの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.4.3 陰関数表示の曲線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 パラメータ表示の曲線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Chapter 1 UBASIC とは 1 2 CHAPTER 1. UBASIC とは 1.1 UBASIC とは 円周率 π の小数展開が無限にどこまでも続くことは,高校生ならだれでも知っているでしょう。でも, 「どうして無限に続くことがわかるのか?」と改めて問直されると,納得がいくでしょうか。無限に続くこ とを納得させるには何桁位の計算ができれば良いのでしょうか。無限桁必要なのでしょうか。 多倍長計算用 BASIC 『UBASIC86』は,プログラム上の工夫を必要としないで,2600 桁の整数及び小 数,正確な整数べきの計算ができる BASIC 言語です。普通の BASIC では,16 桁ぐらいまでしか正確な 数値がだせません。 UBASIC の特徴 UBASIC (多倍長計算用 BASIC ) は木田祐司氏が開発した,特別なプログラムを組まずに 2600 桁の整 数計算及び小数計算ができる BASIC です。数学で使う BASIC としてはとてもよくできたフリーウェア のソフトです。 (1) 操作方法は普通の BASIC に似ている。 (2) 多倍長計算 (2600 桁) の計算が無理なく,高速にできる。 普通の BASIC UBASIC ? 2^50 1.1259E+15 OK ? 123456789*987654321 1.219326311126353D+17 ? 2^50 1125899906842624 OK ? 123456789*987654321 121932631112635269 (3) 有理数や複素数,さらに多項式の計算までできる。 (4) 普通の BASIC の数々の欠点を改良してある。 (5) 数学の問題 (整数論) を解くための機能が豊富に用意されている。特に,巨大な整数の素因数分解が できる添付プログラムなどがある。 素因数分解をするプログラム (load"MPQSX") 素因数分解 (MPQS 法) のプログラムを実行すると 整数=? 2^50-1 3 * 11 * 31 * 251* 601 * 1801 * 4051 UBASIC の動作環境 パソコンで UBASIC を使うために必要なものです。 (1) パソコン本体 384K バイト以上の主記憶をもった NEC の 98 シリーズ または互換機,および富士通の FMR シリーズ。 通常この本体の前面の右にフロッピーディスクを挿入するための細い穴 (フロッピーディスクドラ イブ) がついています。 1.1. UBASIC とは 3 (2) ディスプレイ (3) キーボード (4) フロッピーディスク 3.5 インチ,5 インチのものが一般的です。 (5) MS-DOS が必要。 (6) グラフィックス命令を使う場合は,GRAPH.SYS が必要。 (7) グラフィック RAM を使用するソフトと一緒に使わない。 注意事項 フロッピーディスクの取り扱いには充分注意しましょう。次のようなことは,避けて下さい。 • ディスクに,熱や磁気を近づけること。 • ディスクを乱暴に扱ったり,データの記録部分に手を触れること。 • ハードディスクに,必要以上の振動を与えること。 • ディスクに,力を加えること。特に,フロッピーディスクにラベルを貼る場合などは,ラベルに記入 してから貼り付けるようにして下さい。 • フロッピーを使う場合には,入れる向きに注意をしましょう。ラベルの貼ってある面を上にして,挿 入します。 4 CHAPTER 1. UBASIC とは 1.2 UBASIC の起動と終了 1.2.1 UBASIC を起動 (1) ハードディスクを使用する場合 (本講習でもこの様になります) i. パソコン本体の電源を入れる。 ii. ディスプレイわきのスイッチを入れる。 iii. 2 つある本体の FDD の上の方 (1 と「表示」−ドライブ B) に「データディスク」を入れる。 iv. 情報教育センターメニュー画面からコマンドプロンプトを選択し, E>ub と入力する。 ※ 手順 ii は一般的には不要です。 (2) ハードディスクを使用しない時 (フロッピーディスクのみを使用する時) i. パソコンの電源を入れる。 ii. フロッピーディスク・ドライブの上の方 (「1」と表示−ドライブ A) に「システムディスク」を 入れる。 iii. プログラムを読込・保存するときは,ドライブ B に「データディスク」を入れ換える。 ※ ディスプレイに,”How many files (0-15)?” と表示された場合は,本体左下にある「リセッ ト (reset) ボタン」を押します。 1.2.2 UBASIC を終了する ¤ ¡ (1) 文字が何も書かれていない行で [system] と入力し £¾¢キーを押す。 ¤ ¡ (2) MS-DOS の対話モードから [exit] と入力し £¾¢キーを押す。 E>EXIT (3) MENU 画面が出てきます。 Chapter 2 ダイレクトモードによる計算 電卓の感覚で計算できる。 5 6 CHAPTER 2. ダイレクトモードによる計算 2.1 画面で四則計算をする 2.1.1 キー操作について 各キーの位置を把握しておきましょう。特に,次の項目に挙げられているキーは,その名称を覚えてし まいましょう。 ¤ ¡ £¾¢ (リターン) 改行を行うためのキーで,改行キーともいう。コンピュータに命令やデータの終わりを知らせる役割 もある。 ¤ £ ¡ ¢ (スペース) 文字 1 つ文の余白をあける。空白文字の入力ともいう。 ¤ ¡ £* ¢ (アスタリスク) BASIC では,掛け算 (積) の記号 (×) の意味で使う。また,プログラムでも重要な目印として働く。 ¤ ¡ £/ ¢ (スラッシュ) BASIC では,割り算 (除) の記号 (÷) の意味で使う。 ¤ ¡ £DEL ¢ (デリート) カーソル位置の文字を消去します (N88BASIC と異なる)。 ¤ ¡ £BS ¢ (バックスペース) カーソルの左の文字を消去します。 ¤ ¡ £INS ¢ (インサート) 「上書き」「挿入」のモードを切り換えます。 ¡ ¤ £SHIFT ¢ (シフト) これを押したまま文字キーを押すと,キーの一番上に表示されている文字・記号が入力できます。ア ルファベットの入力の,大文字小文字が切り替わります。 ¤ ¡ £CAPS ¢ (キャプス) ¤ ¡ 押しさげられていると,£SHIFT ¢を押していないときのアルファベットは大文字に固定されます。この ¤ ¡ とき小文字の入力は £SHIFT ¢を押して行います。 2.1.2 画面に表示する (print) 命令 print ( ? : 省略表記 ) 機能 画面に表示する。 〔書式〕 print 式 print "文字列" または または print 1/7 print "ABCDE" 入力の方法 ¡¤ ¡¤ ¡¤ ¡ ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ £P ¢£R ¢£I ¢£N ¢£T ¢£ ¢£1 ¢£+ ¢£2 ¢ 例 ? 式 ? "文字列" ? ? 1/7 "ABCDE" 2.1. 画面で四則計算をする 7 と打ってください。以下このキー入力を画面表示通り, print 1+2 ¤ ¡ と表現します。ここで £¾¢キーを打つと 3 OK と表示されます。つまり画面には print 1+2 3 OK となるはずです。 アルファベットの大文字と小文字の区別は命令文にはありません。 ●例題 1 電卓的な使い方 ¤ ¡ ¤ ¡ print 1993 £¾¢ print 3*5 £¾¢ ¤ ¡ ¤ ¡ print 100+200 £¾¢ print 24/8 £¾¢ ¤ ¡ ¤ ¡ print 13-5 £¾¢ print 1+2+3+4+5 £¾¢ ¤ ¡ £¾¢キーも今後は特にことわらない限り省略します。 ¤ ¡ [練習 1] 次のように入力し, £¾¢キーを入力する前に結果を予想しましょう。 (1) print 3+2*2 (2) print (3+2)*2 (3) print 6/2/3 (4) print 123456789*97531(禁予想!) (5) print 1//2+1//3 (// は有理数除算) 「print」と入力するのに疲れたら「?」で代用できます。 [練習 2] 次の計算をして,結果を画面に表示しましょう。 (1) 12 ÷ 3 (2) 5 × (2 + 3) (3) 2 × (1 + 3 ÷ 6) + 5 (4) 24 ÷ 6 ÷ 2 ■■■ 珈琲閑話 I ■■■ 数学の関数ということ 現代の数学では関数の概念は,集合の概念とならぶ 記号 y = f (x),y = g(x) で f , g は加工の仕方を表 基本的な考え方です。数学で用いる関数の定義は, している訳です。同じ小麦を原料としても,加工の 「ある x の値に従って,y の値がひとつ きまるとき,y を x の関数という。そし て,これを y = f (x) と書く。」 違いにより,うどんも出来ればラーメンにもなりま すね。ですから,y = g(x) の g は f とは別の種類 の “加工”を意味しているのです。 また,関数と言った場合に,加工を中心に考える立 などが代表的な例です。関数を「原料と加工と製品」 場「f 」と製品「y 」を中心に考える立場があり,関 のたとえ話で説明すれば,ある x の値は,原料に相 数の表現に特徴が見られます。 当します。この x の値を加工しますと製品 y ができ ます。 8 CHAPTER 2. ダイレクトモードによる計算 2.2 画面で式・関数の値を求める 2.2.1 平方根を求める (sqrt) 関数 2 乗するには,同じ数をかけるという方法と巾乗を使用する方法があります。(同じ数をかける方法の方 が,気持ちだけ時間をとらないで済みます) 入力の方法は, print 2*2 のように入力します。 巾乗は,X^Y (X の Y 乗) と入力します。入力の方法は, print 3^2 のように入力します。 正の平方根を求めるには,一般に関数 sqrt() を用いるのが普通です。 sqrt 機能 〔書式〕 例 正の平方根を求めて,その値を返す。 sqrt(引数) print sqrt(2) 入力の方法 print 命令のあとに続いて ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡ £S ¢£Q ¢£R ¢£T ¢£( ¢£2 ¢£) ¢£¾¢ と打ってください。 1.4142135623730850487 と出たはずです。 さて,ここで小数点以下の計算のまるめを考えてみましょう。UBASIC の強みは,非常に大きい桁まで 丸め無しで計算できることですが,深い桁までの計算が不必要な場合もあります。そこでプログラム全体 の小数点以下の桁を調整するのが次の point 関数です。 point 機能 〔書式〕 例 小数部の word 数を指定する。 (1 word = 16 ビット = 10 進数 4.8 桁) point 式 point * point 50 (log10 216∗50 = 240.824 なので 10 進 240 桁になります) point 21 で 10 進の 100 桁です。 入力の方法は ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ £P ¢£O ¢£I ¢£N ¢£T ¢£ と打ってください。 ¡¤ ¡¤ ¡¤ ¡ ¢£5 ¢£0 ¢£¾¢ 再度,平方根 sqrt(2), sqrt(3) を求めてみましょう。小数点以下に数字が 200 桁以上並ぶことでしょう。 ●例題 2 無理数の分母の有理化 小数部の word 数を 15 (point 15) とする。 (1) print sqrt(3) (3) print sqrt(3)/3-1/sqrt(3) (2) print 1/sqrt(3) 2.2. 画面で式・関数の値を求める 9 [練習 3] 無理数の積 小数部の word 数を 20 (point 20) とする。 (1) print sqrt(6) (3) print sqrt(6)-sqrt(2)*sqrt(3) 2.2.2 (2) print sqrt(2)*sqrt(3) 三角比を求める (sin, cos, tan) 関数 三角比の値を求めてみます。代入する角度の単位はラジアンです (念のため)。 機能 三角比の値を求める。 〔書式〕 例 sin(引数) cos(引数) tan(引数) print cos(#pi) 入力の方法は print 命令のあとに続いて ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡ £C ¢£O ¢£S ¢£( ¢£# ¢£P ¢£I ¢£) ¢£¾¢ と打ってください。−1 が返ってくるはずです。 ( ) の中に #pi*3 をいれると 3π の余弦が返ってきます。 [補足]#pi は,円周率 (定数) π のことです。 ●例題 3 三角関数の計算 (1) print sin(#pi/3) (3) print cos(#pi/4) (5) print tan(#pi/3) (2) print sqrt(3)/2 (4) print 1/sqrt(2) (6) print sqrt(3) [練習 4] 次の値を求めなさい。 (1) print sin(#pi/6)/cos(#pi/6) (2) print tan(#pi/6) 10 CHAPTER 2. ダイレクトモードによる計算 2.3 画面に文字を表示させる 今度は,画面に文字を表示する方法について学びましょう。 print (? : 省略表記 ) 機能 〔書式〕 例 画面に表示する。 print 式 または print "文字列"として入力します。 print "ABCD" または ? "ABCD" print "Einstein" または ? "Einstein" 画面には, "ABCD" "Einstein" と表示されます。 [練習 5] 記号 ^ (やまじるし) は数学記号のべき乗を表す演算子です。 記号 ^ を含む式を計算し,演算の優先順位も確かめましょう。 (1) print 2^3 (2) print 2^3/3 (5) print (0.9324722294+0.3612416662#i)^17 (3) print 2^3*3 [練習 6] 記号 @,Y = を含む式を入力し,結果からその意味を予想しましょう。 (1) print 7@3 (2) print 10@3 (4) print 7Y =3 (5) print 10Y =3 記号@ : 記号 Y =: (4) print 2*3^4 (3) print 15@3 (6) print 15Y =3 Chapter 3 プログラムモードによる計算 10! は計算しても 50! は説明ですませただけではつまらない。 素数は無限にあることを証明できても,巨大な素数を見たことがありますか? 2200 + 235 (61 桁) 素数 2756839 − 1 (227,834 桁 1992.2) は素数!! n n 次のフェルマ素数とは Fn = 22 + 1 のこと。F0 , F1 , F2 , F3 , F4 は素数! 11 12 CHAPTER 3. プログラムモードによる計算 3.1 プログラムモードとは 行番号をつけてから,BASIC の命令を入力する。それだけで,プログラムは作成できます。後はコン ピュータに実行の指示を出すだけです。 run : プログラムを実行する ための命令。 list : 入力したプログラムを BASIC のプログラム 確認するための命令。 new : プログラムを消去する 行番号 命 令 文 行番号 命 令 文 · · · · · · · · · · · · ための命令。 3.1.1 プログラムの入力と実行 とても短いプログラムを御覧にいれます。 ●例題 4 10 print 2+3 入力の方法は ¤ ¡¤ ¡¤ £1 ¢£0 ¢£ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¢£P ¢£R ¢£I ¢£N ¢£T ¢£ ¡¤ ¡¤ ¡¤ ¡¤ ¡ ¢£2 ¢£+ ¢£3 ¢£¾¢と打って下さい。 実行の方法は番号をいれないで ¤ ¡¤ ¡¤ ¡¤ ¡ £R ¢£U ¢£N ¢£¾¢と打って下さい。 画面に 5 ok と表示されるはずです。5 が 2+3 の答で,“ok” はプログラムが破綻なく実行できて終了したという印 です。 3.1.2 プログラムの表示・追加・削除 前節の例題 4で説明します。 10 print 2+3 表示 list と入力します。 ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡ £L ¢£I ¢£S ¢£T ¢£¾¢ と打って下さい。画面にプログラムが表示されますね。 3.1. プログラムモードとは 13 追加 新しい行番号をつけた命令を入力します。新しい行にカーソルを移動させて, 30 print 12/3 と入力します。 ¤ ¡¤ ¡¤ £3 ¢£0 ¢£ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¢£P ¢£R ¢£I ¢£N ¢£T ¢£ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡ ¢£1 ¢£2 ¢£/ ¢£3 ¢£¾¢ と打って下さい。そして,再度 list と入力します。画面に 30 print 12/3 が追加されていますね。 削除 行番号だけを入力します。 30 とだけ,入力します。 ¤ ¡¤ ¡¤ ¡ £3 ¢£0 ¢£¾¢ と打って下さい。プログラムを画面に表示してみて下さい。 list と入力するのでしたね。 30 print 12/3 の行が消えてなくなっているはずです。 3.1.3 変数と代入 (=) 命令 ●例題 5 10 A=2 20 B=3 30 C=A+B 40 print C 変数 変数 変数 変数 A B C C へ 2 を代入する。 へ 3 を代入する。 へ A+B の結果を代入する。 を表示する。 行番号 10 の文字 A は数値等を記憶するための箱の役目をする記号です。このような記号を変数といい ます。行番号 20 の文字 B も変数です。 変数は英文字で始まり,2 番目以降は数字か英文字の列です。UBASIC では 16 文字までが変数で認め られています。 ただし,UBASIC の命令として予約されている文字列は変数に使えません。 14 CHAPTER 3. プログラムモードによる計算 A, AB, A1, A10, XY123W 変数でない例 99HIJ, PRINT BASIC 言語の記号 (=) は 2 つの意味があります。ひとつは,代入の記号として使用される場合です。も うひとつは,条件文 (後出) の中で使用される等号の場合です。 代入とは,右辺の値を左辺の変数 (箱) の中に入れることを意味します。 変数の例 [挑戦問題 1]いままで学習した知識を使って,2 数 7 と 3 の和と差と積と商を表示するプログラムを 作ってください。 ※解説 2 つの 変数に 7 と 3 を代入して,その和と差と積と商を求めて表示すれば良い。 3.2. プログラムの変更 3.2 15 プログラムの変更 例題 5 で作ったプログラムを使って,2 + 3 の場合の他,4 + 5,8 + 11 などを次々に計算できるような, 便利なプログラムに変更したいと思います。どうしたらいいでしょうか。 3.2.1 キーボードから入力する命令 (input) 例題 5 のプログラムを引用します。 変数 A ,B を変更するのにいちいちプログラムを変更しなければならないのは不便ですね。キーボード から数値を入力する命令を使用してみます。 10 A=2 20 B=3 30 C=A+B 40 print C input 機能 〔書式〕 例 キーボードから文字や数字を入力する。 input 変数 input 変数, 変数 input A input A,B 入力の方法 ¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ £I ¢£N ¢£P ¢£U ¢£T ¢£ と打ってください。 ¡¤ ¡¤ ¡ ¢£A ¢£¾¢ ●例題 6 例題 5 のプログラムの変更 10 input A 20 input B 30 C=A+B 40 print C 変数 A へキーボードから入力する。 変数 B へキーボードから入力する。 変数 C の内容を表示する。 ●例題 7 半径 r の円の面積 S を求める。 10 input R 変数 R へキーボードから入力する。 20 S=3.14159*R*R 変数 R の 2 乗に 3.14159 を掛けて変数 S へ代入する。 30 print S 変数 S の内容を表示する。 ●例題 8 a を b で割った余り c を求める。 10 input A 20 input B 30 C=A@B 40 print C 変数 変数 変数 変数 A B A C へキーボードから入力する。 へキーボードから入力する。 を変数 B で割った余りを変数 C へ代入する。 の内容を表示する。 16 CHAPTER 3. プログラムモードによる計算 3.2.2 プログラムの保存と読込み 保存 プログラムを保存しておいて必要なときに使用できるようにしましょう。最初に,プログラムの保存の 方法を学習します。 (1) データディスクをドライブに入れます。 ¤ ¡ (2) £ f·6 ¢ を押して save" をだすか,キーボードから save" と打ち込みます。 ¤ ¡ (3) その後に続けて,ファイル名を入力して £¾¢キーを押します。 save "D:SAMPLE.UB" ディスクアクセスランプがチカチカして ok が出れば保存終了です。 (4) 文書の名前は,全角で 4 文字,半角で 8 文字までです。ただし,末尾の半角 4 文字分 (ピリオド “.” を含む) は,拡張子といってファイルの素性を表すものです。例えば,一太郎 Ver.5 では “.JAW” と いう拡張子がついています。Ver.4 では, “.JSW” でしたね。UBASIC の拡張子は,“.UB” です。 読込み つぎは,フロッピィーからコンピュータ本体へのファイルの読込みです。 (1) UBASIC を起動します。 ¡ ¤ (2) £ f·1 ¢ を押して load" をだすか,キーボードから load" と打ち込みます。 (3) 続いて,ファイルのあるディレクトリを入力するか。ファイル名を入力します。 load "D:SAMPLE.UB" ¤ ¡ ファイル名を忘れてしまった人は,ディレクトリ入力後, £¾¢キーを押しますと,ファイルの一覧が ¤ ¡ 出てきますからそこから呼び込みたいファイルを選んで, £¾¢キーを押してください。 3.3. 分岐のあるプログラム 3.3 3.3.1 17 分岐のあるプログラム 無条件分岐 (goto) 命令 ●例題 9 変数 K の値に注目 10 K=0 20 K=K+1 30 print K 40 goto 20 変数 K に 0 を代入する。 変数 K に古い変数 K+1 の値を代入する。 変数 K の内容を表示する。 行番号 20 へ これを実行してください。(RUN と入力するのでしたね) 実行すると,プログラムが止まらなくなったと ¤ ¡ 思います。そのときは,あわてず £STOP ¢ キーを押してください。 ¤ ¡ £STOP ¢(ストップ) キー プログラムの停止をします。 ¤ ¡ ¤ ¡ £CTRL ¢+ £C ¢ ¤ ¡ ¤ ¡ でもプログラムを停止することができます。この意味は, £CTRL ¢を押しながら £C ¢ を押すということです。 3.3.2 条件分岐 (if ∼ then) 命令 処理の流れが変化するのは,ある条件に従って流れが変化することが多いはずです。無条件分岐 goto 命令では,条件によって処理を変えるのは困難です。そこで,条件に従って分岐先が変わる,条件分岐命 令について説明します。 ●例題 10 1 から 10 までの和を求める。 10 K=0 変数 20 S=0 変数 30 K=K+1 変数 40 S=S+K 変数 50 if K<10 then 30 変数 60 print S 変数 K S K S K S に 0 を代入する。 に 0 を代入する。 に古い変数 K + 1 の値を代入する。 に古い変数 S + K の値を代入する。 が 10 より小ならば,行番号 30 へ の内容を表示する。 さて,例題 10 は入力できたでしょうか。プログラムの 10 と 20 ですが,下のように,1 行で書くと行 が短くなります。 10 K=0: S=0 これは,プログラムの文の間に : を入れることで 2 行の文を 1 行で処理しているのです。 あまりこの方法を使いすぎると何を書いてあるかわからないようなプログラムになりますが,便利な記 述方法です。 18 CHAPTER 3. プログラムモードによる計算 ●例題 11 例題 10 の短縮した書き換え 10 K=0:S=0 20 K=K+1:S=S+K 30 if K<100 then 20 40 print S ずいぶん短くなりましたね。でも何をやっているかは,だいぶ見にくくなりました。 [挑戦問題 2]調和数列の和を求めるプログラムをできる範囲で短縮した形に書き換えてください。 【参考 1】 10 N=10 20 S=1 30 K=0 40 K=K+1 50 S=S+1/K 60 if K<N then 40 70 print N; 80 print S 変数 変数 変数 変数 変数 変数 変数 変数 N S K K S K N S に 10 を代入する。 に 1 を代入する。 に 0 を代入する。 に 古い変数 K+1 の値を代入する。 に 古い変数 S + 1/K の値を代入する。 が 変数 N の値より小ならば,行番号 40 へ の内容を表示する。 の内容を表示する。 [挑戦問題 3]プログラムを実行しないで,S の値を求めなさい。(1) 2 × K + 1 の和を求める。 10 S=1 20 K=0 30 K=K+1 40 S=S+2*K+1 50 if K<10 then 30 60 print S (2) K × K の和を求める。 10 S=1 20 K=0 30 K=K+1 40 S=K*K 50 if K<10 then 30 60 print S 3.3.3 分岐の応用プログラム (2 次方程式の解法と手順) ●例題 12 2 次方程式 ax2 + bx + c = 0 において,係数 a,b,c を与えたときの解を求める。 3.3. 分岐のあるプログラム 10 print "ax^2+bx+c=0" 20 input "a,b,c ";A,B,C 30 if A=0 then 20 40 D=B^2-4*A*C:N=" " 50 if D>0 then M="2 ジッスウカイ" 60 if D=0 then M="1 ジッスウカイ" 70 if D<0 then M="2 キョスウカイ" 80 print M,(-B+sqrt(D))/2*A 90 if D=0 then end 100 print N,(-B-sqrt(D))/2*A 19 係数 a,b,c の入力 a = 0 なら行番号 20 判別式 D の計算,空白を N に代入 言葉を M に場合に応じて代入 解を一つ表示 重解ならば終了 2 実数解または虚数解の表示 ※解説 (1) まず,2 次方程式の各項の係数を入力させなければなりません。(input) (2) 判別式を導き, (3) 解の判別をします。(if ∼ then) (4) 普通の BASIC と違い UBASIC では,複素数をそのまま扱えるので,多様なプログラミングが考え られます。 (5) それぞれの場合に従って,解を表示します。 [挑戦問題 4] 2 次以下の方程式を解けるプログラムを作成しましょう。 20 CHAPTER 3. プログラムモードによる計算 3.4 繰り返し文のあるプログラム 同じ事の繰り返し処理は,人間には面倒なことですが,コンピュータの得意分野です。プログラミング の真髄は繰り返しです。ここでは,一定回数の繰り返しの方法について学ぶことにします。 3.4.1 繰り返し (for ∼ next) 文 繰り返しの範囲,回数を指定します。(数列の Σ を想像してください) ●例題 13 2 の倍数の表示 10 for I=1 to 30 20 print 2*I 30 next ※解説 10 変数 I に 1 から 30 を順次代入する。 20 変数 I を 2 倍した数を表示する。 30 変数 I が 30 を越えていないかどうかを確認して越えていないと 10 行目に戻る。 [実行] (1) 変数 I に 1 を代入する。 (2) 2 (変数 I を 2 倍したもの) を表示する。 (3) 変数 I が 30 を越えていない (変数 I は,1 です) ので 10 行目に戻る。 (4) 変数 I に 2 (1 の次の整数:間隔を 1 以外に変化させることもできます) を代入する。 (5) 4(変数 I を 2 倍したもの) を表示する。 (6) 変数 I が 30 を越えていない (変数 I は,2 です) ので 10 行目に戻る。 以下同様に繰り返す。 ●例題 14 1 から 20 までの階乗を求める。 n! = n · (n − 1) · (n − 2) · · · 2 · 1 階乗自体は,簡単な掛け算の繰り返しですが,一般の BASIC ではうまく計算できません。それは,この計 算結果がかなり大きな値になってしまうためです。UBASIC では 2600 桁までの計算ができますので,こ のような大きな数の計算にはきわめて有効です。 10 input "N= ";N 20 P=1 30 for I=1 to N 40 P=P*I 50 next 60 print K;"! = ";P 最初の値を 1 にしておくことを忘れず。 3.4. 繰り返し文のあるプログラム 21 このプログラムを実行すると,N の値を聞いてきますから,正の整数を入力します。かなり大きな値で も,1 の位まで計算できます。 実行してみると出てきた表の桁が揃っていないことに気づくと思います。using 関数は桁数を揃える関 数です。 [補足] using(整数部桁数, 小数部桁数), 引数 40 print using(3),K; 50 print using(25),P とするときれいな表になります。(小数桁部分を省略しました。) 階乗を利用すれば,順列,組み合わせの数の計算もできます。大きな場合の数を求めるには,途中の計算を 大きくしないことがポイントです。 n! 順列 n Pr = (n − r)! n! 組み合わせ n Cr = (n − r)!r! [挑戦問題 5] n と r を入力し,n 個から r 個を 1 列に並べる順列,取り出す組み合わせの数を求めるプ ログラムを作りなさい。 22 CHAPTER 3. プログラムモードによる計算 3.4.2 2 重の繰り返し (for ∼ next) 文 for next は 2 重以上にしても使用できます。 ●例題 15 かけ算の九九の表 10 for N = 1 to 9 20 for M = 1 to 9 30 print using(4) M*N; 40 next 50 print 60 next N 変数 N に 1 から順次 9 まで代入する。 変数 M に 1 から順次 9 までを代入する。 変数 M*N を表示する。 改行 実行すると,最初は変数 N は 1 のままで,変数 M が 1 から 5 まで変化する。つまり 1, 2, 3, · · · と横に 表示される。2 変数関数などを考える時,1 変数を固定して残りの 1 変数を変化させることと同じ考え方 です。 ■■■ 珈琲閑話 II ■■■ 円周率と無理数と指数の話 √ eπ 163 が整数だという噂があります。早速,その真 偽を調査してみましょう。 ? exp(sqrt(163)*#pi) .................... ok どうやら嘘だったようです。しかし,小数点以下に 9 がずらりと並ぶのは壮観です。このような現象が 【参考 2】 10 point 8 20 for J=1 to 1000 30 A=exp(sqrt(J)*#pi) 40 B=1000*(A-int(A)) 50 if B<999 then 90 60 print 70 print J;A 80 next 163 の他にあるでしょうか。プログラムを使って調 [関数の解説] べてみましょう。 int(引数) は,引数を超えない最大の整数です。 Chapter 4 プログラムを利用した計算 素数を題材にして,プログラミングの総合練習をいたします。 23 24 CHAPTER 4. プログラムを利用した計算 4.1 商と余りの関係 約数・倍数 自然数 a, b に対して,次の等式をみたす p と q がある。 a = bq + r (0 ≤ r < b) このとき,q を a を b で割ったときの商,r を a を b で割ったときの余りという。 a を b で割ったときに割り切れる (余りが 0 となる) とき,b を a の約数,a を b の倍数とよぶ。 ●例題 16 1 から 30 までの自然数の約数の個数をすべて調べなさい。 数 約数の数 数 約数の数 数 約数の数 1 2 3 4 11 12 13 14 21 22 23 24 5 6 7 8 9 15 16 17 18 19 25 26 27 28 29 10 20 30 【参考 3】 10 input A 20 B=0 30 D=0 40 B=B+1 50 C=A@B 60 if C=0 then D=D+1 70 print A;"/";B,C;"...";D 80 if B<A then 40 90 goto 10 素数・合成数 2, 3, 5, 7, 11 などの数はそれよりも小さな自然数の積になおすことができない数です。このように,1 より大きな自然数で,1 とその数自身のほかに約数をもたないを素数という。また,4, 6, 8, 9 のような素 数でない数を合成数という。 つまり,約数の個数が 2 である数を素数といい,約数の個数が 3 以上のある数を合成数という。 [挑戦問題 6] 100 までの自然数で約数の個数が最大の自然数は何でしょう。 4.2. 素因数分解 4.2 25 素因数分解 自然数を素数の積に分解することを素因数分解といいます。たとえば 60 = 2 × 2 × 3 と素因数分解できます。 ●例題 17 与えられた自然数 N の素因数分解 10 input N 20 K=1 30 K=K+1 ¾ 40 if N@K<>0 then 30 50 print K;"*"; 60 N=NY =K 70 if N>=K^2 then 40 80 print N N が K で割り切れないとき行番号 30 N の約数 K,間に "*" を表示 新しい N に古い N を K で割った商を代入 K の 2 乗より N が小さくないなら行番号 40 残りの約数 N を表示 (たまに,1 を表示する) ※解説 行番号40 で自然数 N を K で割り,割りきれない場合は行番号 30 で K を 1 ずつ増やして探す。 行番号50 は割りきれる数 K(素因数) を表示し, 行番号60 は元の数を素因数で割って小さくして, 行番号70 で終了条件を判定し, 次々に素因数を求める。 素因数分解の因数に 1 が混入してしまう欠点があるが,気になる方は変更してみて下さい。 ●例題 18 与えられた 2 つの自然数の最大公約数 (G.C.M.) を求めるプログラムを参考に,最小公倍数 (L.C.M.) 求めるプログラムを作成する。 10 input " a,b ";A,B 20 M=A:N=B 30 if M<N then M=B:N=A 40 R=M@N 50 if R=0 then 80 60 M=N:N=R 70 goto 40 ¾ 80 print "G.C.M.=",N 常に M>N となるように交換 M を N で割った余りを R に代入 余り R が 0 なら行番号 80 M に N,N に余り R を代入 行番 40 へ分岐 G.C.M. として N を表示 ここでは,2 つの自然数 A, B の最小公倍数 (L.C.M.) が L.C.M. = の関係にあることを利用する A×B G.C.M. 26 CHAPTER 4. プログラムを利用した計算 ■■■ 珈琲閑話 III ■■■ ユークリッドの互除法について 与えれれた 2 数 a, b では,いつでも a = bq + r となる q, r がある。 (0 ≤ r < b) を考えてみよう。頭が混乱するので,ダッシュ(0 ) を つけると, a0 = b0 q 0 + r 0 (0 ≤ r0 < b0 ) もし,r = 0 なら,b は a の約数で GCM= b となる。 もし,r0 = 0 なら,b0 は a0 の約数で a0 と b0 の r 6= 0 のとき,新しく a ← b, b ← r と代入をする。 G.C.M. が q 0 となる。 改めて, これは,前の記号で表せば,r と b の G.C.M. が q 0 ということ。 a = bq + r (0 ≤ r < b) 従って,a と B の G.C.M. がまた q 0 であることも 簡単に示せる。 r0 6= 0 のときは,再度代入を繰り返す。 4.3. 素数の分布 4.3 27 素数の分布 素数が自然数の中に,どのように分布しているかを観察することは,とても興味のあるところだと思い ます。 素数を表示するプログラムを紹介します。 4.3.1 素数の表 ●例題 19 エラトステネスのふるい 自然数の中から素数を選びだすには,2 から順に,2 の倍数を消し,次に 3 を残して,3 の倍数を消す。 以下同様に続ければ素数だけが残ることになる。 10 Retu=20:MaxNum=20*Retu:Keta=4 20 PrimeC=7:OtherC=2:F=1:cls 30 for N=1 to MaxNum:color OtherC 40 for J=2 to N-1 50 if N@J =0 then F=1 60 next 70 if F=0 then color PrimeC 80 locate (N@Retu)*Keta,NY =Retu 90 print using(Keta),N;:F=0 100 next:color 7 列幅 (Retu),最大数 (MaxNum) 素数の色 (PrimeC) その他の色 (OtherC) N が合成数なら F=1 N が素数 (F=0) なら素数の色 [補足] color 命令,locate 命令 (1) 行番号 20 の PrimeC の値を 0 に変更して,プログラム実行させなさい。 次に,PrimeC の値を 7, OtherC の値を 0 に変更して,実行しなさい。画面が見えなくなった ら,”color 7” と正確に闇に向かって打つ必要がある。 (2) 行番号 10 の 列幅 (Retu) の値を 6 に変更して実行しなさい。そのとき 6 の倍数に素数が 1 つもな いことを確認しなさい。また,列幅を変えて,素数がある列と 1 つもない列が他にあるかを調べな さい。 (3) 素数を求めるより高速なプログラムについて考えましょう。(希望者のみ) • 調べる範囲 (MaxNum) は狭くできないか。 • 割る数は奇数 (40 行目 step 2) だけでもよい。 • さらに,割る数は素数だけでもよい。 • 命令の組み合わせ方を変える。 • 短いプログラムが速いとは限らない。 だれのプログラムが一番速いでしょうか? [挑戦問題 7] n の多項式 f (n) = n2 − n + 41 とするとき,f (1), f (2), f (3), · · · で,はじめて合成数にな る n はいくつでしょうか。(Leonhard Euler) [挑戦問題 8]初項 a = 166601,公差 d = 11550 の等差数列で,項が素数の記録は何項目で破れますか。 ( Edgar Karst 1967 ) 28 CHAPTER 4. プログラムを利用した計算 ■■■ 珈琲閑話 IV ■■■ 素数を求める (三行革命) 公式? 素数を求めるための画期的なプログラムを発見したとの情報が入りました。 ただし,UBASIC でしか動かないそうです。また,素数は 2 からでなく,3 から表示するとのことで した。 これが問題のプログラムです。本当に素数が表示できるのでしょうか。どうも怪しい気がするのですが。 【参考 4】 10 for P=3 to 340 20 if 2^(P-1)@P=1 then print using(4),p; 30 next 4.4. 進んだプログラミング技法 4.4 4.4.1 29 進んだプログラミング技法 配列変数 変数には A, B, C, · · · とアルファベットを使いますが,変数の数が多いときや,同じような種類の変数 をまとめたいときなど, 「配列」を使うと便利です。 配列を使用するときには,まず dim 文で宣言する必要があります。 dim A(20), B(5,5) これで,A(0) から A(20) までの 21 個の変数を使えます。B( ) は二次元の 6 × 6,36 個の変数。 ●例題 20 2 の x 乗を求める 10 dim A(20) 20 for K = 1 to 20 30 A(K) = 2^K A(K) に,2k が入ります。 40 next 50 for K = 1 to 20 60 print "2^";K,A(K) 70 next 4.4.2 read 命令と data 文 いつも決まった数値を入力する場合,input 文で入力すると不便な場合があります。このようなとき, read 文が有効です。 ●例題 21 2 次の行列式を求める。 10 read A,B,C,D 行番 40, 50 の data 文から順に読み込む 20 print "ad-bc=",A*D-B*C 行列式の値を表示 30 end 終了 40 data 5,6 50 data 7,2 4.4.3 ファンクションキー キーボードの上の方に並んでいるキーで,既定のファンクションキーの設定は以下の通りです。key コ マンドで変更することができます。 ¤ ¡ ¤ ¡ £¤ f·1 ¢¡ load " £¤ f·6 ¢¡ save " £¤ f·2 ¢¡ dir "*.UB" ¤£ f·7 ¢¡ xref f·8 ¢ append " £¤ f·3 ¢¡ auto ¤£ ¡ list £¤ f·4 ¢¡ £¤ f·9 ¢¡ edit £ f·5 ¢ run £f·10 ¢ cont 4.4.4 サブルーチン 1 つのプログラムで,同じ処理を何回もするようなことがよくあります。このようなとき,同一処理に 関する部分を 1 つのプログラムとしてまとめ,処理に応じてそのプログラムを呼び出して使えば便利です。 そうすれば,プログラムも簡略化され,全体の流れも見やすくなります。このようなプログラムをサブルー チンと呼びます. 30 CHAPTER 4. プログラムを利用した計算 はじめ はじめ ? ? 処理 1 処理 1 GOSUB ? 処理 2 RETURN ? ? 処理 3 ? 処理 2 処理 3 GOSUB ? 6 処理 2 RETURN ? ? 処理 4 処理 4 ? ? おわり 手順通りの流れ おわり サブルーチンを使った流れ 【参考 5】 10 print "カタツムリ" 20 gosub 80 30 print "ラバ" 40 gosub 80 50 print "レ" 60 print "フジノヤマ" 70 end 80 ’ サブルーチン 90 print "ノボ"; 100 return サブルーチンは,呼び出すための命令「gosub」と, サブルーチンの中から戻る命令「return」で利用します。 gosub [行番号] 行番号 (またはラベル) の行へ分岐する。 return この命令で gosub で呼び出した次の命令へ分岐する 同様の分岐の仕方をするが,そのとき計算した値を返す命令として,ユーザー関数がある。 ユーザー関数は,呼び出すための命令「fn· · · · · · 」と,ユーザー関数の中から値を持って戻る命令「return ( )」で利用します。 4.4. 進んだプログラミング技法 31 【参考 6】 10 A=fnY(2) 20 print A 30 end 40 fnY(X) 50 Z=X^2 60 return (Z) 関数の使用 関数の宣言 関数値を持って戻る ■■■ 珈琲閑話 V ■■■ ガウス・ジョルダン法 3 元連立 1 次方程式をガウス・ジョルダン法に より求めるプログラムを紹介します。係数のデータ等は行番号 170∼190 にあります。UBASIC では有理 数除算命令 (//) があるので,有理数を係数とする連立方程式も正確に値を求めることができます。 3元連立 1 次方程式の例 係数行列 2x + z = 7 2 0 1 7 −x + y + 2z = 3 −1 1 2 3 x − 2y −z = 1 1 −2 −1 1 【参考 7】 10 N=3:dim A(N,N) 20 for J=0 to N-1 30 for K=0 to N:read A(J,K):next 40 next 50 for I=0 to N-1 60 B=A(I,I) 70 for K=I to N:A(I,K)=A(I,K)//B:next 80 for J=0 to N-1 90 if J=I then 120 100 C=A(J,I) 110 for K=I to N:A(J,K)=A(J,K)-C*A(I,K):next 120 next 130 next 140 print "x=";A(0,N);"y=";A(1,N);"z=";A(2,N) 150 end 160 ’ x y z 170 data 2, 0, 1, 7 180 data -1, 1, 2, 3 190 data 1,-2,-1, 1 係数の読込み 係数を基準化 基準係数を B へ 係数の消去 解の表示 係数のデータ 行番号 160 の「’」はリマーク文 (または,レム文) と言い,コンピュータは実行しないが人間のメモとし て役立つ命令です。(参考 rem) 32 CHAPTER 4. プログラムを利用した計算 Chapter 5 数学教育への応用例 33 34 CHAPTER 5. 数学教育への応用例 5.1 数表の代用 数学の教科書の巻末には,必ず数表がついています。2 乗,平方根,あるいは三角比,対数表などです。 コンピュータを使って,もっと精度の高い (有効数字の多い) 数表をつくったり,数表の値を別の角度か ら見直すと,新しい数との出合が待っているかもしれません。 5.1.1 2 乗と平方根の表 1 から 100 までの,2 乗および平方根の数表を,もっと精度を高く (有効数字を多く) つくりましょう。 2 乗は x^2 または x*x で,正の平方根は sqrt(x) で求めます。 UBASIC 以外の BASIC では,平方根は SQR( ) で表すものがほとんどのようです。UBASIC では,ど ちらでも sqrt() と解釈してくれます。 ●例題 22 1 から 100 までの平方根を求めるプログラムを参考に 2 乗を求めるプログラムを作りなさい。 10 point -60:Keta=100:N=100 20 for K=1 to N 30 print "sqrt(";K;")= "; 40 X=sqrt(K):gosub 100 50 next 60 end 100 ’ サブルーチン 110 Y=int(X):print Y;"." 120 for I=1 to Keta 130 X=10*(X-Y):Y=int(X) 140 print chr(48+Y); 150 if I@5=0 then print " "; 160 if I@50=0 then print 170 next 180 print 190 return 平方根を求め,表示サブルーチンへ サブルーチンの開始行 平方根の整数部分を表示 小数部分の数字 1 つを取り出す 数字 1 つを表示 5 桁ごとに空白を表示 50 桁ごとに改行 サブルーチンの終了 (戻る) [補足]行番号 100 から 190 はサブルーチンです。行番号 40 のところから利用しています。 5.1.2 三角比の表 三角比の表もつくることができます。注意することは,角度が 60 分法ではなく,ラジアンであることで す。UBASIC には円周率π を定数 #pi として持っていますので,次のように変換します。 変換式 : 角度 X ◦ を R (ラジアン) にする。 R = X/180*#pi 三角関数は, sin( ), cos( ), tan( ) です。 tan の場合,90◦ ,270◦ ,· · · で本来定義されませんが, UBASIC では負の数が出てきてしまいます。これは三角関数を級数展開しているためにこのようなことが おこってしまいます。 [挑戦問題 9] 60 分法で 0◦ から 90◦ までの sin,cos の表をつくりなさい。同様に,0◦ から 89◦ までの tan の表をつくりなさい。 5.1. 数表の代用 35 log( ) は自然対数であって,常用対数の関数はありません。「底の変換公式」を使って,常用対数を作 ります。 変換式 : x の常用対数は,log(x)/log (10) [挑戦問題 10] 1 から 100 までの常用対数表をつくりなさい。 UBASIC に限らず,たいていの言語には平方根の関数はありますが,立方根の関数はないようです。こ れを実現するには 自然対数と,指数関数を組み合わせて使求めてる必要があります。立方根では,次の ようになります。 変換式 : x の立方根は,exp(log(x)/3) この変換式を,生徒が理解するのは難しいかも知れません。しかし,/3 のところを *3 にすれば 3 乗が 出てきますし,/2 にすれば平方根と同じです。この部分を色々変えてみることにより,その変換式の意味 が,おぼろげながらわかるのではないでしょうか。 「対数をとったあと,指数にする」という,一見意味の ない操作でも,対数や指数の意味を理解するきっかけになると思うのですが。 5.1.3 平方根と累乗根 平方根を求める関数 (sqrt) を使わないで,平方根を求めるプログラムについて説明します。 ●例題 23 原始的な平方根の計算 平方根は平方すれば元の数にもどります。平方して,元の数に足りなければ,不足分を加えてやります。 この原理をプログラムにすると, 10 N=2:point 15 20 X=0:R=1 30 input A 40 K=-1 50 K=K+1:if K>10 then end 60 D=(X+K*R)^N 70 if D<A then 50 80 X=X+(K-1)*R 90 R=R/10:print X 100 goto 40 ................... ........ 平方して根号の中の値になること ....... ...... を利用した計算法 ..... ..... ... ... ... . . . . . . . . . . . . . . ......... . ... ...... ........ ... ......... ..... ... ... ... ... ......................... ...... ... ........... ....... . .... ... .. .... .. . ....................................................................................................................................................................................................................... 0 • 1 • 1.4 • 1.41 •√ 2 x 計算をしたら,組み込み関数 (sqrt) と値を比べてみてください。 また,行番号 10 の N の値を 3, 4, 5 と変更すれば 3 乗根,4 乗根,5 乗根も求められます。 36 CHAPTER 5. 数学教育への応用例 ●例題 24 二分割法による平方根 y ......... ..... ... .... .. ... 2 ... . ... .. ... . . ... .. ... .. ... .. .. ... . .... ... ... ... .. .. .. .. ... .. .. ... . . ... .. .. ... ... ... ... ... . .. .. ... . ........................................................................................................................................................................................... .... .. ... .... ... ... ... ... ... .. .. ... ... ... .. ... ... ... .. . . ... .. . ... .... ... . ... ... ... .. ... ... ... ... ... ... . . . ... . . .. .... .... .. .... .... ..... .. .. .... ...... ... . ........... ................................ .... ... .... .. ... ... .. y =x −2 10 point -3 20 M=2:A=0:B=2 30 K=K+1 40 print K;A,B 50 S=(A+B)/2:F=S^2-M 60 if F>0 then B=S:goto 30 70 if F<0 then A=S:goto 30 80 print:print S • a O a+b 2 • x b • • ●例題 25 ニュートン法による平方根 y ......... 10 point -20 20 M=2:Eps=10^(-5) 30 input "ショキチ";A 40 if A=0 then 30 50 X=(A+M/A)/2 60 if abs(X-A)>Eps then A=X:goto 50 70 print using(4,70),X ..... .... 2 . ... ... ... ... ... ... ... ..... . ... . . . ... ... . ... ..... .. .... .. ... ..... . . ... ... . .. ... .. ....... . ....... .................................................................................................................................................................................... . .... ... . .. . ..... . . . . . ...... .... .......... .... ................. .................... .... ... ... y =x −2 O x [補足] abs( ) は絶対値を返す関数 方程式の近似解法としては、他に「挟みうちによる方法」と「逐次代入による方法」等があります。 ■■■ 珈琲閑話 VI ■■■ 無理数の中に誕生日の数の並びはあるか? sqrt(2) のなかにあなたの誕生日はあるでしょうか。次のプログラムは sqrt(2) の小数展開の中にあ なたの誕生日と一致する数字の並びがあるかを調べるものです。例えば 5 月 19 日の誕生日の場合 (3 桁)。 【参考 8】誕生日調べ 10 point 200 20 N=2 30 A=sqrt(N) 40 C=519 50 for K=1 to 2000 60 A=10*(A-int(A)) 70 B=int(100*A) 80 if C=B then print K,B 90 next 誕生日を設定 注目する小数点の位置を 1 桁ずつ変更 3 桁だけ取り出す 誕生日が 4 桁の人は行番号 70 で 100 を 1000 に変更してください。 5.1. 数表の代用 5.1.4 37 数値積分の計算法 積分区間は [0, 1] での数値積分を仮定します。 ●例題 26 区分求積による計算 1 分数関数 の区間 [0, 1] の積分は log 2 になります。 x+1 y ........ 10 input "ブンカツスウ n=";N 20 H=1/N:S=0 30 for K=0 to N-1 40 S=S+fnY(K*H) 50 next 60 print S*H 70 end 80 fnY(X) 90 Z=1/(X+1) 100 return(Z) .... .... ... ... ... ... ............................................................................ ... ........... ....... ...... ... ........................ ..... .... .... ... ................................................... .... ........................................................ . . ... . . . .. .. . . . . . ... . . . . . ... ... ... ... ............................................................. ... ... ...................................................... ... .. ... ............................................................................................. ... ................................................. ... ... .. . . . . . . . . . . . . . . . . . . . . . . ... . . . . ... .. .... ................................................................................ ...... ... ... ... ... ......................................................................... ....... ... .... .. . . . . . ... . . . . . ... . . . ....... .... ... ... .... .................................................................................................................................................................................................... . . . .... . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..... ... ..... ... . . . . . .... . . . . . .... . . . . . .... . . . . . .... . . . . . ... ...... .......... .... .............. ......................................................................................................................................................... ........................................................................................................................ ...... ...... ...... ...... ...... ....... ................................................................................................................................................... ....................................................................................................................................... ............................................................................................................................................. ....................................................................................................................................... ................................................................................................... ............................................................................................................................................. ....................................................................................................................................... ............................................................................................................................................. ....................................................................................................................................... ............................................................................................................................................. ................................................................................................... ....................................................................................................................................... ............................................................................................ ............................................................................................................................................................................................................................................................................. .... ... .. ... ... ... .. y = f (x) x 1 O アルゴリズムが簡単で積分の理解にはよいのですが,精度は期待できません。次の台形公式による計算と 精度を比べてみてください。 ●例題 27 台形公式による計算 y ......... 10 input "ブンカツスウ n=";N 20 H=1/N:S=(fnY(0)+fnY(1))/2 30 for K=1 to N 40 S=S+fnY(K*H) 50 next 60 print S*H 70 end 80 fnY(X) 90 Z=1/(X+1) 100 return(Z) ..... .... ... ... ... ... ........ ............................. ... ...... .................................. ..... ... ................................... ..... ....................................... ... .... ........................................................... . . . . ... . . ............................... ...... .. ... ........................................... .... ... ................................................... ..... ... ........... ..................................................... ... ... ................. ........................................................................................................ . . . . . . . . . ... ... ... . . . ... . . . . . .... . . . . . .... . ........ ........ . ... .... ... ................. ........................................................... ... ... ......................................................................................... .......................... .... ... ................................................................................................ .... . .................................................................................................................................... . .... . . . . .. ..... ... ................................................................................................... ...... .......... ............................................................................................................................................................................................ .......................................................................................................... ............................................................................................ ................................................................................................... ....................................................................................................................................... ............................................................................................................................................. ....................................................................................................................................... ............................................................................................................................................. ....................................................................................................................................... ................................................................................................................................................ ................................................................................................... ...................................................................................................................................... ........................................................................................................................................... ....................................................................................................................................... ............................................................................................................................................. ........................................... ................................................................................................................................................................................................................................................................................... .... ... ... ... ... ... . y = f (x) O 1 x 38 CHAPTER 5. 数学教育への応用例 5.2 確率の実験 5.2.1 乱数について 0 から 1 までの乱数を与える関数があります。 rnd 使い方 a = rnd b = rnd * 6 0 から 1 までの乱数を与える 0 から 6 までの乱数を与える 次のようにして,乱数を表示してみます。 ●例題 28 10 a = rnd 20 b = rnd 30 print a,b 乱数が 2 個 表示されると思いますが,隣の方のものと見比べてください。同じ乱数が表示されていない でしょうか。 同じ乱数がでないようにするためには,次の命令を使います。 randomize 使い方 randomize randomize 123 乱数列を変える 123 番目の乱数列を与える この乱数を使って,確率のシミュレーションを行うことができます。 5.2.2 サイコロを振る 乱数を使って,サイコロを振るシミュレーションを行ってみましょう。 サイコロは 1 から 6 までの目が出ますので,次のようにするとよいでしょう。 A = int(rnd * 6 + 1) サイコロを 120 回振って,出た目の回数を調べてみましょう。 ●例題 29 10 randomize 20 dim A(6) 30 for I = 1 TO 120 40 D = INT(RND*6+1) 50 A(D) = A(D) + 1 60 next 70 for D = 1 TO 6 80 print D,A(D) 90 next A(D) には,サイコロのでた目の回数を表示します。 サイコロの目 D と回数 A(D) を表示します。 ここでは, 「サイコロを 120 回振った結果」だけを表示していますが,1 つ 1 つのサイコロの目を出した ければ,次の行を加えてみてください。 45 print D, 5.2. 確率の実験 39 これを応用すれば,1 から 10 の目を持つサイコロをつくることもできますし,1 と 2 の目だけを出す サイコロを作ることができます。 [挑戦問題 11] 0 から 9 までの目の出るサイコロを作って,100 回振った結果を表示しなさい。 5.2.3 モンテカルロ法 ●例題 30 大数の法則の利用 2 次方程式 ax2 + bx + c = 0 (a 6= 0) において,係数 a, b, c をサイコロの出た目で与えたとき,重解と なる場合の数をモンテカルロ法で推測した。理論的に求めた場合の数 (プログラムを使って求めてもよい) と比較しなさい。 10 randomize:T=80:N=100 20 for K=1 to T 30 for I=1 to N 40 A=int(rnd*6)+1 50 B=int(rnd*6)+1 60 C=int(rnd*6)+1 70 D=B^2-4*A*C 80 if D=0 then R=R+1 90 next 100 S=S+6^3*R/N:R=0 110 next 120 print S/T 平均をとる回数 T,サイコロをふる回数 N 係数 a をサイコロで決める。 b c 判別式 D を計算 重解なら R でカウントする 出現回数 63 × R/N の和 S,R 初期化 平均出現回数を表示 円周率を確率によって求める方法で有名なものに,次のようなものがあります。 正方形の中にでたらめに点を打ったとき,内接する円の中に入っている点の数を数えることに より,円の面積と正方形の面積の比を予測し,円周率を推測する。 ※解説 座標平面上の 4 点 (0, 0), (1, 0), (1, 1), (0, 1) によってできる正方形のなかにでたらめに点を打 π つ。原点からの距離が 1 以下の点の数 n と,正方形内に打った点の数 N の比が であることが推測さ 4 れる。 これを次のようになおして,実際に求めてみましょう。 ●例題 31 モンテカルロ法による円周率の計算 10 randomize 20 N=200:K=0 30 for I=1 to N 40 50 X=rnd:Y=rnd if X^2+Y^2<=1 then K=K+1 60 next 70 S=4*K/N y ........ .... ... ............................................................................... ................................... ... ................... .................. ... .................... ........................ ... ................... ............... ......... ... .............. .......... ........... ... .................... ............... ............... .. ................... ............... .......... ...... .... .................... ............... ........... ....... ... ................... ............... .......... .......... ... .............. .......... ....... ......... ... .................... ............... ........... ........ ...... ................... ............... .......... ....... ....... .................... ............... ........... ........ ....... ...... ..... ... .. . ....................................................................................................................................... .... .. ... O x 80 print S ※解説 rnd 関数が 0 から 1 までの乱数を与えるので,これを 2 組作り,x 座標,y 座標とします。これ p の原点からの距離 r = x2 + y 2 が 1 以下のものを数え,点全体の数との比を 4 倍すれば,円周率が推測 できるはずです。打つ点の数を 1000,10000 にすると,円周率の推測値はどうなるでしょうか。回数を多 くしても精度が上がらないとき,原因はどこにあるのでしょう。 40 CHAPTER 5. 数学教育への応用例 ■■■ 珈琲閑話 VII ■■■ 原子の消滅シミュレーション 原子が単位時間あたり確率 p で消滅するとき,N 個の原子の消滅の過程を示します。 10 randomize 20 N=200:Y=N:P=0.01 30 K=0 40 for I=1 to Y 50 if rnd<p then K=K+1 60 next 70 Y=Y-K 80 print Y; 90 if Y>0 THEN 30 100 end 原子の個数 N=200, 消滅確率 P=0.01 原子の消滅数 K=0 確率が P 以内なら 原子が消滅した。 1 回に消滅した原子の個数を元から引く。 原子があれば,行番号 30 から繰り返す。 5.3. 数の性質 5.3 41 数の性質 5.3.1 有理数の小数表示と循環節 素数 p を分母とする単位分数 1 の小数展開を考えます。 p 1 = 0.1428571428571428571 のように,循環節の長さが 6 の循環小数となります。 7 循環節の長さ (周期) が容易に確認できないほど長いものを問題としましょう。 たとえば 1 の循環節の長さは 60 です。 61 1 の循環節の長さは 112 になります。 113 次のプログラムは,素数 p に対して循環節の長さが p − 1 となる素数 p を発見するものです。分母の素 数は UBASIC の素数を返す関数 prm( ) を利用しました。 ●例題 32 10 for J=1 to 1000 20 P=PRM(j):FLG=1:Kmax=P-1 30 for K=2 to Kmax 40 if (10^(K-1)-1)@P=0 then FLG=0 50 next 60 if FLG=1 then print using(5),P; 70 next 5.3.2 ピタゴラス数 直角三角形に関する三平方の定理 (ピタゴラスの定理) について,直角三角形の 3 辺が整数で表せるとき, その 3 つ組整数をピタゴラス数と呼びます。 (3, 4, 5), (5, 12, 13) などがピタゴラス数です。 32 + 42 = 9 + 16 = 25 = 52 52 + 122 = 25 + 144 = 169 = 132 一般に,方程式 x2 + y 2 = z 2 を満足する整数 x, y, z の組をピタゴラス数と呼びます。ピタゴラス数 を求める方法を調べるのも,奥深い話題があります。 ●例題 33 ピタゴラス数を求める。 10 N=20 20 for Y=1 to N 30 for X=1 to Y 40 Z=sqrt(X^2+Y^2) 50 if Z=int(Z) then print X,Y,int(Z) 60 next 70 next ※解説 ピタゴラスの数を求める一般公式を知らないとしたら,x, y に整数をいれて z が整数になるかを 調べることになる。Z=sqrt(X^2+Y^2) で,整数なら等号 Z=int(Z) が成り立つ。さて,規則性を発見でき るでしょうか。 42 CHAPTER 5. 数学教育への応用例 ■■■ 珈琲閑話 VIII ■■■ ノルマンの軍団の問題 正方形に並べた軍団が 60 個あります。それに指揮 軍団の正方形の 1 辺を x とすると,式は 官の王様を 1 名加えるとまた 1 つの大きな正方形が 60x2 + 1 = y 2 できるとします。この王様の軍団の総兵力は何人で しょうか。 最小の整数解を求めなさい。 ここで,y は大きな正方形の 1 辺の長さです。やさ しいですね。 本物の “ノルマンの軍団の問題” では軍団の数が 61 個のときです。さて,求まるでしょうか。(新数学辞 典 大阪書籍より) Chapter 6 グラフィック UBASIC ではグラフィックも使えます. 43 44 CHAPTER 6. グラフィック 図形を表現するという意味において,グラフィックをつかうことは数学では大きな位置を占めると思いま す.今はやりの Computer Graphic というわけにはいきませんが,いろいろな関数や図形の方程式を与え て,その graph を見せたり,生徒に書かせたりすることにより,関数や図形の理解が深まればコンピュー タを使う意味もあると思います. 6.1 グラフィック事始め 6.1.1 グラフィックを使う準備 UBASIC でグラフィックを使う準備をするには MS-DOS の知識がほんの少し必要です. UBASIC 自体はグラフィックの機能を自分では持っていません.UBASIC のプログラムがグラフィック 命令を読むと,MS-DOS のグラフィック命令を呼び出しますが,それを使うには,NEC の MS-DOS 3.3 以降に付属の graph.sys と graph.lib の 2 つのファイルが必要です.これを使うには config.sys を書き 換える必要があり,config.sys に,graph.sys を使う設定の行がなければ, DEVICE=A:Y =DOSY =GRAPH.SYS のような行を書き加えます.アンダーラインの部分はパソコンによって異なると思います.パソコンをよ く知っている人に聞くとわかります. 6.1.2 円を描いてみよう プログラムを組む前にどんなことができるか,ダイレクトモードで見てみましょう. circle (100, 200), 50 と入力してください.どうなりますか? さて,circle の部分は「円を描く命令だな」とわかりますが,(100, 200) の部分は何でしょう.この 部分の数字をいろいろ変えて見ましょう.プログラムを学ぶとき,マニュアルで理解してからプログラム を組む必要もありますが,このようにいろいろと実験してみると,マニュアルよりも感覚的にわかりやす い場合があります.実験するときは,はじめは常識的な数字,わかってきたらとてつもない数字を入れて みてこの命令がどんな数値に対して,意味を持つのか調べてもよいでしょう (もちろんマニュアルにも書い てありますが).プログラムがうまく動かないときは,意味を持たない数を命令に与えたときもあり,この ようなプログラムのミス1 を見つけるのは大変な作業になります. circle 命令 機能 画面に円を描く。 circle (横座標, 縦座標), 半径 〔書式〕 例 circle (123,456), 22 円を書いたら消しましょう. cls 命令 機能 画面を消去する cls [引き数 ] 例 cls 2 グラフィック画面を消去するのは cls 2 です.cls 3 とすると,テキスト (文字) 画面とグラフィック画 面の両方を消去します. 〔書式〕 [練習 7] いろいろな円を描いてみましょう. 1 バグといいます. 6.1. グラフィック事始め 6.1.3 45 点,直線,長方形を描いてみましょう pset 命令 機能 指定された点(ワールド座標)に色を付ける。 〔書式〕 pset (x,y) 例 pset (50, 80), 7 これはいわゆる点を打ちます.これで理論的には精密な絵を描けます.しかし,ひとつひとつ打つため たくさんの点を打つと非常に時間がかかります.もちろんプログラムも大変なものになります. line 命令 機能 指定された2点(ワールド座標)間を直線で結ぶ。 〔書式〕 line [(x1,y1)]-(x2,y2) 例 line (50, 80)-(100,200) 実際に関数のグラフを書くときは,プログラムのしやすさやスピードの点で,こちらを使うことが多く なるでしょう. ちなみに ,,"b" をつけると長方形になります.マニュアル,ヘルプを参照してください. ●例題 34 line (100,100)-(200,200) line -(250, 100) line -(100,150),,"b" (100,100) から (200,200) へ直線 (200,200) から (250,100) へ直線 (250,100), (100,150) を対角線の 両端とする長方形 46 CHAPTER 6. グラフィック 6.2 グラフィックの使用 6.2.1 画面上の座標 ここで,画面上の座標がどうなっているか説明しましょう. まず,画面左上隅の点を原点 (0, 0) とし,画面は横 640 ドット,たて 400 ドットなので,x 座標は, 0∼639,y 座標は,0∼399 で画面内の点を表します.これ以外の領域に円を描く命令を指定してもエラー になることはなく,画面内に表示しなくなるだけです. circle (1234,4321), 4321 また,小数を代入しても circle (123.45678, 213.93), 22.5 四捨五入されて, circle (123, 214), 23 と同じ円になります.定数ではなく,式も書くことができます. circle (1000/3, sqrt(12340), tan(1.55) 6.2.2 数学で使う さて,グラフィックが画面全体に表示されると邪魔に思えるときがあります.画面上にグラフィックを表 示する領域を指定しましょう. view 命令 機能 指定された画面上の2点 (オリジナル座標といいます) を それぞれ左上、右下とする長方形内をグラフィックエリアに 設定する。 〔書式〕 例 view (x1,y1)-(x2,y2) view (300, 80)-(599, 379) ※解説 view のみを書くと初期化される。必ず x1<x2,y1<y2 でなければならない。 ●例題 35 つぎの命令を実行してみてください. view (300, 80)-(599, 379) circle (10, 20), 50 view circle (10, 20), 50 [挑戦問題 12]実は circle 命令も view 命令も色を指定できます.ヘルプが使える人は,それを読んで 色を出してみましょう. [挑戦問題 13] view 命令で領域を指定すると cls 2 で消去される領域もその内部になります. view 命令で領域を指定し円などを描き,そのまま消さずに view 命令を指定し直し画面消去をするとどう なりますか. 6.2. グラフィックの使用 47 さて数学での座標は,横軸では右へ行くほど大きくなり,画面の座標は一致していますが,たて軸は画 面の座標は下へ行くほど大きくなり,数学の座標とは逆になります.さらに,原点が左上隅にあるのも気 に入りません.原点はできれば画面の真ん中付近にあってほしいものです.何とかならないでしょうか. window 命令 機能 〔書式〕 例 view で指定したエリアに表示する座標の範囲を指定する。 window (x1,y1)-(x2,y2) circle (-100,100)-(100,-100) ※解説 view で指定した左上の点に window の (x1,y1) が,右下の点に window の (x2,y2) が,対応す るようにそれ以後のグラフィック命令のパラメータが変換される.(ワールド座標といいます) 具体的に見てみましょう.view 領域がわかるように色をつけています. ●例題 36 view (300,100)-(500,300),1,7 window (-20,20)-(20,-20) circle (10,-5),13 view の縦横のドット数の比と window の縦横の長さの比が一致していないと,円を描いても楕円になり ます. ●例題 37 view (300,100)-(500,200),1,7 window (0,20)-(10,0) circle (5,10),5 グラフィックを使用するに当たって,view, window の部分はプログラムとしてファイルに保存しておく と毎度タイプする必要がなくて便利でしょう. 10 view (300,100)-(500,300),1,7 20 window (-10,10)-(10,-10) パラメータの部分を input 命令を使って入力するという手もあるでしょう. 6.2.3 こまごましたこと 実際にグラフィックを使用するときは,ほかにもたくさんの準備が必要です.いろいろ込み入ったことを 始めるときに必要になってきます. screen 画面モードを設定 gsize gcolor gprint で文字を書くときの文字の大きさの指定 gprint で文字を書くときの色と,グラフィックへの上書きか 消して書くか. console グラフィックの命令ではないが,テキストをどこに表示するか を指定する. このあたりは,マニュアル,ヘルプを参照してください.また,N88BASIC とだいぶ違い,MS-DOS の グラフィック画面についてよく知っている必要があります.UBASIC のマニュアル以外にも MS-DOS の グラフィック画面についての書物を参照してください. 48 CHAPTER 6. グラフィック 6.2.4 生徒の使用 この section で述べたことを生徒に説明してプログラム等を組ませるのは労多くしてなんとやらだとお もいます.view, window 命令その他グラフィックの準備部分はあらかじめ教員が用意をしておき, (1) 関数を入力するだけ (2) 点の刻み幅の部分をプログラムさせる (3) それ以上のプログラムをやらせる の大きく 3 段階程度の生徒のアプローチがあると思います.N88BASIC は,文字列を入力してそれを式と して,評価する方法がありませんが2 ,UBASIC は比較的素直に式を変数に代入できます.その事を含め つぎの section から関数のグラフを書く解説します. 2 実はとてもトリッキーな方法があります. 6.3. 関数のグラフ 6.3 関数のグラフ 6.3.1 y = f (x) のグラフ 49 まず,f (x) = x sin x のグラフを描いてみましょう.とりあえずはこんな所でしょうか. ●例題 38 y = x sin x のグラフを描いてみる. 10 ’asave "g01" 20 view (300,100)-(500,300),0,7:’ グラフィックの領域指定 30 window (-3*#pi,10)-(3*#pi,-10):’ 座標の範囲指定 40 I=int(-3*#pi):’ 初期値 50 pset (I,I*sin(I)):’ はじめに点を打つ 60 for X=I to int(3*#pi):’ for は整数値だけ 70 line -(X,X*sin(X)):’ 続きは直線で結ぶ 80 next 90 end これだと,刻みの幅が大きくて美しくありません.範囲が −10 から,9 で刻み幅が 1 だからです.かと いって,−100 から,99 くらいにするとグラフの表示範囲が大きくなりすぎます.どんな範囲を指定して も画面上では 1 ドットずつの刻み幅になるように改造しましょう. ●例題 39 1 ドットずつ描く. 10 ’asave "g02" 20 view (300,100)-(500,300),0,7 30 X1=-3*#pi:X2=3*#pi 40 window (X1,10)-(X2,-10) 50 Unit=(X2-X1)/200:’ 横軸は 200 ドット,座標を 200 等分 60 X=X1 70 pset (X,X*sin(X)) 80 for I=1 to 200 90 X+=Unit:’ 1 ドットは座標で Unit ひとつぶん 100 line -(X,X*sin(X)) 110 next 120 end さらに,いまは縦横 200 ドットですが,関数によっては横長がよかったり,縦長がよかったり.座標も −100 から 100 とか,正の数だけでいいとか,いろいろ出てくるごとに関係するプログラム内の数値を書 き直していると大変です.プログラムの中にでてくるこのような定数は「マジックナンバー」と呼び,他 人がプログラムを読んだり,後で自分のプログラムを読むときに3 その可読性は大変悪くなります. 3 自分で書いたプログラムも時間が経つと一見して何を書いたのかわからなくなり,数ヶ月前の自分は他人としか思えません.そ のために,マジックナンバーを無くし,丁寧にコメントを着けることをお薦めします. 50 CHAPTER 6. グラフィック ●例題 40 グラフィック画面の大きさを変える. 10 ’asave "g03" 20 screen 1:’view を初期化 30 cls 2:’ グラフィック画面をクリア 40 console ,,0:’ 下のファンクションキーの表示が邪魔 50 Vsize=130:’ 縦横のグラフィック画面の大きさをドット数で指定. 60 Hsize=150 70 view (600-Hsize,200-VsizeY =2)-(600,200+VsizeY =2),0,7 80 X1=-3*#pi:X2=3*#pi:Y1=-10:Y2=10 90 window (X1,Y2)-(X2,Y1) 100 Unit=(X2-X1)/Hsize:’ 横軸は Hsize ドット,座標を Hsize 等分 110 X=X1 120 pset (X,X*sin(X)) 130 for I=1 to Hsize 140 X+=Unit 150 line -(X,X*sin(X)) 160 next 170 end [練習 8] 行番号 50, 60 の数値をいろいろ変えてみてください.どうなりますか? まだまだ,マジックナンバーがあります.C 言語などのコンパイラ型の言語では,マクロという形で定 数を記述できるのですが,UBASIC ではすべて定数に名前をつけて使用するとすべて変数になってしま い,なんだかメモリをたくさん使用してもったいないような気がするのは筆者が古い人間だからでしょう か.メモリがふんだんにある現代のパソコンを使っていてこのようなことをいうのはかなり貧乏性ですね. あと,座標軸と目盛りをつけましょう. ●例題 41 座標軸と目盛りをつける 10 ’asave "g04" 20 screen 1:cls 2:console ,,0 30 gcolor -7:’ グラフィックの文字は白で重ね書き 40 Vsize=200:Hsize=200:’ 画面のサイズをドット数指定 50 view (600-Hsize,200-VsizeY =2)-(600,200+VsizeY =2),0,7 60 X1=-3*3.14:X2=3*3.14:Y1=-5:Y2=10:’ 座標の範囲 70 window (X1,Y2)-(X2,Y1) 80 line (X1,0)-(X2,0),4:’ 座標軸 90 line (0,Y1)-(0,Y2),4 100 glocate mapx(X1),mapy(0):gprint using(3,1),X1; ’ 目盛り 110 glocate mapx(X2)-44,mapy(0):gprint using(3,1),X2; 120 glocate mapx(0)-4,mapy(Y2):gprint using(3,1),Y2; 130 glocate mapx(0)-4,mapy(Y1)-20:gprint using(3,1),Y1; 140 glocate mapx(0),mapy(0):gprint "O"; 150 Unit=(X2-X1)/Hsize 160 X=X1 170 pset (X,X*sin(X)),7 180 for I=1 to Hsize 190 X+=Unit 200 line -(X,X*sin(X)),7 210 next 220 end 6.3. 関数のグラフ 51 gprint で目盛りをグラフィック画面に書き入れます.あまり桁数が多いと見づらいので using で調整 します.gprint, using はテキスト表示の print と使い方は同じです.書く位置は glocate で指定する のですが,glocate で指定できる座標はスクリーン座標4 です.X1, Y1 等はワールド座標で,そのまま glocate で使うことができません.それをスクリーン座標に変換するのが mapx, mapy です.このプログ ラムでは小さい数をたしてこまかく位置を調整しています.さらに,ふつうは gprint は文字を書く領域 のグラフを消してから文字を書き,それでは困るので gcolor で重ね書きを指定しています.こまかな使 用法はヘルプやマニュアルを参照してください. ここまでくると,だんだんと頭が痛くなってきたのではないでしょうか.グラフィックのプログラムを ちゃんとしようとすると,このように準備のプログラムが膨大になり,とても手軽に扱える代物ではなく なります.ですから,授業等で使うときはこの準備部分は教師が用意しておく必要があるわけです.また, このプログラムは原点が画面の中にないとうまく表示できません.そこをうまく表示しようとすると,さ らにプログラムの行数が増えます.これ以上の表示のための改造はこの講習の本題から外れます5 ので,次 のステップに移ります. 6.3.2 文字列を式として使う N88BASIC でできなくて,UBASIC でできることのひとつに文字列を式として扱うことがあります.前 例題のプログラムにおいて,y = x sin x のグラフを書きましたが,他の関数を書きたいとき,行番号 170 と 200 を変更する必要があります.2 箇所に分かれているものを変更するのは面倒なものです.もちろん, サブルーチンを使えば 1 箇所にまとれられます.では,サブルーチンを使って 1 箇所にまとめてみたとこ ろで,input 命令で生徒に関数を文字列として代入させてその関数を描かせるにはどうしたらよいでしょ う.N88BASIC などの普通の BASIC は文字列は文字列で,その値を計算することは出来ません.つまり, 関数が変われば毎度毎度プログラムを書き換える必要が出てきます.UBASIC では,文字列を式として扱 う方法があります. 目盛りをつけたり座標軸を描いたりするのは本質ではないので,例題 39 を書き換えます.文字列を入 力するのに strinput 文字列を式として計算するのに val を使います. strinput 命令 機能 指定した変数にキーボードから文字列を代入する。 〔書式〕 例 val 関数 機能 〔書式〕 例 4 view strinput ["メッセージ"]; 変数名 strinput "式を入力してください";F# 文字列の表す数値。 val(文字列) X=2:print val("X+X^2") は 6。 で指定した領域の左上隅が原点で,右下に行くほど座標の値は大きくなり,ドット数で指定する. 5 いや,すでに外れてます. 52 CHAPTER 6. グラフィック ●例題 42 文字列の値を計算する. 10 ’asave "g05" 20 strinput "関数は";F#:’ 特別変数 F# に関数を文字列で入力 30 view (400,100)-(600,300),0,7 40 X1=-10:X2=10:Y1=-10:Y2=10 50 window (X1,Y2)-(X2,Y1) 60 Unit=(X2-X1)/200 70 X=X1 80 pset (X,val(F#)):’ val で値を計算. 90 for I=1 to 200 100 X+=Unit 110 line -(X,val(F#)) 120 next 130 end UBASIC には文字列専用の変数はありません.文字列は長変数か特別変数6 に格納します.F# は特別変数 です. このように,文字列を式としてその値を計算できるのは,UBASIC ならではです.さて,ここで, 25 F#=encode(F#) を書き加えてスピードを比べてください.encode 関数は文字列を内部コードの文字列に直しますのでずっ と高速に計算でき,グラフを描くスピードがずっと速くなります.ファイル g0.ub に今まで説明したすべ てを実現したプログラムを書いてあります.また,UBASIC のサンプルプログラムにも平面や立体のグラ フを描くものあるので,参考にしてください. 6 マニュアル,ヘルプを参照してください. 6.4. その他 6.4 53 その他 文部省発行の「指導計画の作成と学習指導の工夫」よりグラフィックプログラムの部分を UBASIC のプ ログラムに直してみました. 6.4.1 やさしいもの ●例題 43 x 軸,y 軸を滑ることなく移動する直線. ファイル g11.ub を参考にしてください.x 軸,y 軸を 10 ドットずつ動く 2 点を直線で結んだだけです. ●例題 44 正多角形の頂点を結ぶ直線 2π である.そこで,正 n n 角形の中心 O を画面のほぼ中央 (300,200) にとり,半径 150 の円周上にその頂点をとる.それらを順 次直線で結べばよい. ファイル g12.ub を参考にしてください.正 n 角形の中心角を D とすると,D = ●例題 45 二次関数のグラフ. ファイル g13.ub を参考にしてください.これは前の section で作ったプログラムとほぼ同じです. このような y = f (x) という陽関数表示できる関数のグラフは,定義式の部分を変えるだけで,瞬時にその グラフが得られ,それを観察することによって,y = f (x) の性質を調べることができます.観察する内容 は,増減や極値,零点の有無などの関数値の変化,漸近線,関数の現われる範囲,対称性,特異点,x = α での挙動などがあります. 6.4.2 パラメータ表示の曲線 一般に ½ x = f (t) y = g(t) で,媒介変数 (パラメータ)t を動かせば曲線が描けます.これを曲線のパラメータ表示といいます.この考 えで描かせるプログラムを g14.ub に書いたので参照してください. 円,楕円 √ √ 1 − x2 と y = − 1 − x2 のグラフを区間 −1 ≤ x ≤ 1 の上で 描けば,原点を中心とした単位円が描けます.しかし,円周を描く最もエレガントな方法は,三角関数を 利用する方法です.実際,三角関数は「円関数」とも呼ばれるほど円とはなじみ深いものがあります. ½ x = cos t y = f (x) を描かせるプログラムで y = y = sin t として,パラメータ t を 0 から 2π まで変化させると点 (x, y) の軌跡は円になります. さらに,一般に a > 0, b > 0 を定めて, ½ x = a cos t y = b sin t として,t を 0 から 2π まで変化させると点 (x, y) の軌跡は楕円 ³ x ´2 a になります. + ³ y ´2 b =1 54 CHAPTER 6. グラフィック 双曲線 双曲線については,a, b を正の定数として, ½ a x = cos t y = b tan t を考え,t を −π から 3π まで動かすと双曲線 ³ x ´2 a − ³ y ´2 b =1 が得られます. リサージュ曲線 自然数 a, b を与えたとき, ½ x = sin at y = sin bt で描く曲線をリサージュ曲線といいます.a, b をいろいろ変えてリサージュ曲線を楽しんでください. [練習 9] 曲線 (ア) x = sin t, y = sin 2t と,曲線 (イ) x = sin 3t, y = sin 6t は,同じものでしょうか. パラメータ付き曲線の見地からは,両者は同じ軌跡をもつが異なる曲線であると考えるようです.パラ メータ付き曲線の動点の運動を表していると解釈することがあります.同じレールの上を走っても,スピー ドが違えば異なる曲線で,曲線 (イ) の方が (ア) よりも 3 倍速い運動をしています.このことは,実際に パソコンに作図させてみるとよく分かります. 正葉線 極形式の方程式 r = a sin nt で与えられる曲線を正葉線といいます.n が奇数のときは,n 枚の花弁が,n が偶数のときには,2n 枚の 花弁が現れます.極形式の方程式をパラメータ表示の形に直すには, x = r cos t, y = r sin t で変換します. [練習 10] n が分数の時はどうなりますか. カーディオイド 極形式の方程式 r = a(1 + cos t) で与えられる曲線をカーディオイド (心臓曲線) といいます. r = a(1 − cos t) は上の曲線属と y 軸あるいは原点に対して対称です. 6.4. その他 6.4.3 55 陰関数表示の曲線 楕円の標準形 ³ x ´2 a + ³ y ´2 b −1=0 のように F (x, y) = 0 の形で曲線が与えられるときがあります.このとき,曲線は陰関数表示されているといいます.この場合, 方程式 F (x, y) が簡単であっても,その表す曲線を描くことは難しいものとなります. F (x, y) の値を次々に計算して,それが正であれば画面上に点を打ち,そうでなければ点を打たないこと にすれば,正の領域の境界線として,グラフの輪郭をとらえることができます.g15.ub を参照. 例えば, F (x, y) = (x2 − y 2 )(x2 + 4y 2 − 1) が正の部分を描くことによって, x=y x = −y 2 x + 4y 2 = 1 なる直線と楕円よりなる曲線 (x2 − y 2 )(x2 + 4y 2 − 1) = 0 に囲まれた領域を描くことができます. 二次曲線 このプログラムを使えば,二次曲線の性質を実験しながら説明することができます. 2 定点 (1, 0), (−1, 0) との距離の和が 4 に等しい点の集まり p p (x − 1)2 + y 2 + (x + 1)2 + y 2 − 4 = 0 は楕円,2 定点はこの楕円の焦点. 距離の差が一定の点の集まりで双曲線になります. 直線と点を定め,直線への距離と点への距離の比が一定の点の軌跡も描くことができ,これらは,比の 値 (離心率) により,楕円,放物線,双曲線となります. 例えば,直線 y = 0 と点 (0, 1) への距離が等しい点の軌跡を描くには, F (x, y) = |y| − p x2 + (y − 1)2 とします.これは放物線 2y = x2 + 1 を表します. 56 CHAPTER 6. グラフィック 参考文献 [1] 高等学校学習指導要領. 文部省. 大蔵省印刷局. [2] 高等学校指導要領解説 数学・理数編. 文部省. ぎょうせい. [3] 高等学校数学指導資料 指導計画の作成と学習指導の工夫. 平成 4 年 5 月文部省. ぎょうせい. [4] UBASIC による解析入門. 森本光生. 日本評論社. [5] 改定増補新数学辞典. 一松信・竹之内修編. 大阪書籍. [6] オイラーの主題による変奏曲. 小野孝. 実教出版. [7] 数学をパソコンで RUN しよう. 飯高茂. 岩波書店. [8] 数学のアイディア甦るガウスの夢. ハッル著 山下純一訳編. 東京図書. [9] ガロアの理論. I. スチュワート著 永尾汎監訳 新開章三訳. 共立出版. [10] 数学・まだこんなことがわからない (BLUE BACKS). 吉永良正. 講談社. [11] 数学セミナー 1993 年 11 月. 日本評論社. [12] 初等数値解析 . 薮下信. 森北出版. [13] コンピュータによる新しい高校数学. 正田實・寺田文行・吉村啓編. 日本評論社. [14] N88 -BASIC によるはじめてのアルゴリズム入門. 河西朝雄. 技術評論社. 57 索引 ■記号 dim, 29 ’, 31 ¤ ¡ £* ¢, 6 *, 7, 8 dir, 29 ■E edit, 29 +, 7 Euler, Leonhard, 27 -, 7 ¤ ¡ £/ ¢, 6 EXIT, 4 exp, 22, 35 /, 6 //, 7 ■F :, 17 fn· · · · · ·, 30 =, 13 for...next, 20, 22 ?, 6, 7, 10 FORTRAN, i, ii Y =, 10 ^, 8, 10 ¤ ¡ £¾¢, 6 ¤ £ ■G G.C.M., 25 ¡ ¢, 6 gosub, 30 goto, 17 ■A GRAPH.SYS, 3 append, 29 auto, 29 ■I ■B input, 15 ¤ ¡ £INS ¢, 6 int, 22 if...then, 17 BASIC, i, ii ¤ ¡ £BS ¢, 6 ■K ■ C¡ ¤ Karst, Edgar, 27 £CAPS ¢, 6 COBOL, i, ii key, 29 color, 27 ■L cont, 29 L.C.M., 25 cos, 9, 34 ¤ ¡ ¤ ¡ £CTRL ¢+ £C ¢, 17 C 言語, i, ii LISP, ii list, 12, 29 load, 16, 29 ■D locate, 27 data, 29 ¤ ¡ £DEL ¢, 6 log, 35 LOGO, i, ii 58 59 索引 ■M MPQSX, 2 ■N new, 12 word, 8 ■X xref, 29 next, 20, 22 ■あ ■O アセンブリ, i, ii ok, 12 余り, 24 ■P ■い PASCAL, ii インサート, 6 π, 9, 34 インタプリタ, i #pi, 9, 34 point, 8 print, 6, 10 アスタリスク, 6 ■う (文字の) 上書き, 6 prm, 41 ■え ■R エラトステネスのふるい, 27 randomize, 38 円周率, 9, 34, 39 read, 29 ■か rem, 31 階乗, 20 reset, 4 ガウス・ジョルダン法, 31 return, 30 拡張子, 16 rnd, 38 (プログラムの) 確認, 12 run, 12, 29 掛け算, 6 ■S 関数, 7, 30 save, 16, 29 ¤ ¡ £SHIFT ¢, 6 sin, 9, 34 ■き SQR, 34 行番号, 12 sqrt, 8 ¤ ¡ £STOP ¢, 17 ■く system, 4 ■T 木田祐司, 2 キャプス, 6 空白, 6 九九の表, 22 区分求積, 37 tan, 9, 34 組み合わせ, 21 then, 17 繰り返し, 20 ■U ■け ub, 4 原子の消滅, 40 UBASIC, 2 using, 21 ■こ 高級言語, i ■W 合成数, 24 60 互除法, 26 コンパイラ, i ■さ サイコロ, 38 最小公倍数, 25 最大公約数, 25 (プログラムの) 削除, 13 サブルーチン, 29 三角比, 9, 34 ■し (プログラムの) 実行, 12 シフト, 6 循環小数, 41 索引 (プログラムの) 追加, 13 ■て デリート, 6 ■に 2 次方程式, 18 2 重の繰り返し, 22 二分割法, 36 (キーボード) 入力, 15 (プログラムの) 入力, 12 ニュートン法, 36 ■の ノルマンの軍団, 42 循環節, 41 ■は 順列, 21 π, 9, 34 商, 24 倍数, 24 (プログラムの) 消去, 12 配列, 29 (文字の) 消去, 6 バックスペース, 6 条件分岐, 17 小数点, 8 ■ひ 小数展開, 41 ピタゴラス数, 41 除の記号, 6 (プログラムの) 表示, 12 ■す 数値積分, 37 数列の和, 18 スペース, 6 スラッシュ, 6 ■せ 積の記号, 6 積分, 37 ■そ 素因数分解, 2, 25 (文字の) 挿入, 6 素数, 24 ■た 台形公式, 37 ■ふ ファイル, 16 ファンクションキー, 29 ふるい, 27 フロッピーディスク, 3 分岐, 17, 30 ■へ 平方根, 8, 35 巾乗, 8 変数, 13 ■む 無条件分岐, 17 ■も モンテカルロ法, 39 代入, 13 ■や 多倍長計算, 2 約数, 24 ■つ ■ゆ 索引 ユークリッド互除法, 26 ユーザー関数, 30 有理数除算, 7 ■ら 乱数, 38 ■り リセット, 4 リターン, 6 立方根, 35 リマーク文, 31 ■れ レム文, 31 ■わ 割り算, 6 61
© Copyright 2024 ExpyDoc