2. BASIC の計算機能
2.1 変数と数値式
(テキストの該当箇所を右に表示)
2.1.1 数値式
【要点】 PRINT文とEND文だけからなるプログラムを実行し,簡単な計算を行う.「PRINT (計算式)」で計算結果を出力する.END文はプログラムの(記述上のではなく実行手続き上の)最後の行を示すために用いられる.
|
- 加減乗除およびべき乗の演算の表記方法,および演算の優先順位(優先度:べき乗>乗除>加減)を確認し,計算式「2+3*4^2」「3/4*5」「2^3^2」を手計算で計算せよ(3番目は計算しやすいようにテキスト中のものと値を変えた).
- テキスト中のプログラムを入力・実行せよ(保存しなくてよい).ただし第30行は「PRINT 2^3^2」とする.オートフォーマット機能により小文字で「print」と入力しても直後に大文字に変換されることを確認(変換されない場合はまずタイプミスによる綴りの間違いを疑え).さらに計算結果がどのように表示されるかを観察.
- 十進BASICによる計算結果を手計算のそれと比較し,演算の優先順位を再確認する.
2.1.2 括弧
【要点】カッコは1種類のみで,何重にでもすることができる(そのため複雑な式では左右のカッコの対応関係をよく確認し,カッコの閉じ忘れ等に注意する必要がある).
|
- 2.1.1同様,プログラム中の計算式をまず手計算で計算.
- 「ファイル」メニューで「新規」を選択し,新しいウィンドウを開いてプログラムを入力・実行し,正しく計算されることを確認せよ.
[注意]このとき古いウィンドウは消えたように見えるが実は裏に隠れているだけ.「表示」メニューで切り替えることができる.「表示」メニューでタイル表示,カスケード表示を選択して,それぞれどのように表示されるか観察せよ(これらの表示方法はワープロなど他のソフトでも共通).
2.1.3 行番号
【要点】十進BASICのプログラムは行番号を必要としない.テキストやプリントでは便宜上行番号を付けているが,実際には行番号の数字と関係なく,上の行から順に実行される(プログラム中に指示があれば副プログラム等にジャンプすることはある).また行番号は後から一括して付加・削除することもできる.
|
- 「編集」メニューの中の「行番号付加」「行番号削除」を確認.すでに入力済みのプログラムで試してみる.
第1回の範囲はこのあたりまで.プログラミング課題1を提出し,「OK」の返信を確認したら終了.
課題のページを別ウィンドウで表示.
2.1.4 変数
【要点1】 予約語(*)を除き,任意のアルファベット(+数字)の文字列を変数名として利用することができる.アルファベットの大文字と小文字はプログラム中では区別されない.
(*)予約語・・・コマンド名・関数名など,プログラムで使用するためにあらかじめ登録されている文字列.
【要点2】変数に数値を代入するときは LET文 を用いる.「LET A = B」でA(変数)にB(数値や数式,別の変数など)を代入.すなわち,LET文における「=」は 代入演算子 であり,「等しい」という意味はありません!(「代入される変数と代入する数値等を結ぶ記号」に過ぎない).
特に左辺の変数が右辺でも使われている場合,一見おかしな「等式」(に見えるが実際は異なる)が出てくることがありますが,LET文のルールをよく理解して,戸惑わないように.
|
- テキストの説明を冒頭から読み,「変数」の概念とLET文の使い方・記述法を理解する.
- 冒頭の3行からなるプログラム第20行の数式「2*X^2+3*X+4」を通常の表記法で書き直すとどうなるか,考えよ.
- 冒頭のプログラムを入力・実行し(保存しなくてもよい),計算結果を確認.さらに第10行を「X=0」「X=1」「X=2」などと書き換えて実行し,それぞれ正しく計算されることを確認せよ.
- テキストの [Note] に注目.積を表す「 * 」は忘れやすいので,今後も十分注意すること.
- テキストの問1を考え,結果を予想してからプログラムを入力・実行し,予想と比較せよ.
- 問1のプログラムをUSBメモリに保存せよ.ファイル名は「toi01.bas」(ただし拡張子「.bas」は保存時に自動的に付加される).さらにこのプログラムを用いて,テキストの説明に従って ステップ実行を行え.
★第20行の「a=a+1」は「等式」を表しているのではなく,右辺の a (計算前) と 左辺の a (計算後) は等しくない!
[注意]ステップ実行を用いると計算の途中経過が調べられるので,プログラムの間違いを修正する作業(デバッグdebugという)において非常に役に立つ..
【参考】後述の IF文 等における条件式で用いる 「=」 は(通常の数式と同じく)「等しい」という意味を持ち, 等価演算子 と呼ばれます.多くのプログラミング言語は等価演算子と代入演算子で異なる記号が用いられますが,BASIC言語ではどちらも 「=」 を用いるため,初心者にとって混乱しやすくなっています.
2.1.5 INPUT文
【要点】プログラム実行時に変数に数値を代入したいときは INPUT文を使う.「INPUT a,b,c,・・・」のように代入される変数を指定.実行時にはINPUT文での記述に合わせてカンマで区切って数値を代入する.
|
- テキストのプログラムを入力・実行せよ.a, b にいろいろな値を代入し正しく計算されることを確認.
- INPUT文の記述を無視し,数値を1だけ,または3つ以上入力して「OK」をクリックすると,ダイアログボックス下部にエラーメッセージが表示される.これを確認せよ(簡単な英語で表示されるので,意味を理解すること).
2.1.6 大きな数と小さな数
【要点】十進BASICでは計算結果は15桁まで表示できる(プログラム中で計算可能な桁数はもっと多いが,16桁目を四捨五入して表示される).
|
- テキストの2つの短いプログラムを入力・実行せよ(保存は不要.2番目のプログラムはPRINT文の数式の部分のみ変えればよい).さらに数値を適当に変えていろいろなケースでどのように表示されるか調べよ.
- 計算結果が 1015以上,または10-15以下の場合の表示方法を確認せよ.
- ★「表示されない」からといって,「計算されていない」わけではありません!誤解しないように.
2.2 PRINT文
(テキストの該当箇所を右に表示)
2.2.1 文字列
【要点】「PRINT "(文字列)"」で「" "」の中の文字列を表示する.
|
- テキストのプログラムを入力・実行し,結果を確認せよ.
- 第10行で「" "」を削除して「PRINT ABC」として実行し,結果の違いを確認せよ.またなぜそうなるか,理由を考えよ.
[注意]このように,「" "」の有無でプログラム上はまったく意味が変わってしまう.意味を考えないで入力していると間違えやすいところ.
2.2.2 項目の区切り記号(コンマとセミコロン)
【要点】PRINT文において複数の項目を同じ行に詰めて表示させるときは「;」(セミコロン),間を開けて表示させたいときは「,」(カンマ)を用いる.またPRINT文には表示結果を改行させる働きもある.次にPRINT文が実行されたとき改行しないで同じ行に続けて表示させたい場合は行末に「;」を付ける.
|
- テキストの1番目のプログラムを入力・実行し,結果を確認せよ.さらにカンマとセミコロンを適当に置き換えて変化を確認し,カンマ( , )とセミコロン( ; )の役割の違いを理解せよ.
- 2番目のプログラムを入力・実行し,セミコロンによって改行が抑制されることを確認せよ.さらに第10行末尾のセミコロンを削除して実行し,改行が行われることを確認せよ.
- 3番目のプログラムの入力・実行し,第20行のPRINT文によって改行が行われ,空白行が生じることを確認せよ.また第20行を削除して実行し,空白行がなくなることを確認せよ.
★「ヘルプ」の使い方も学習し,随時活用せよ.
第2回の範囲はここまで.プログラミング課題2を提出し,「OK」の返信を確認したら終了.
課題のページを表示.
2.3 FOR〜NEXT
(テキストの該当箇所を右に表示)
2.3.1 FOR〜NEXT構文
【要点】FOR〜NEXT 構文では,FOR文とNEXT文の間に挟まれた部分を一定回数だけ繰り返す.繰り返しの回数はFOR文の記述で決まる.たとえば「FOR i = m TO n」(iは変数.m, n は数値または変数)という FOR文が与えられると,制御変数(またはカウンタ変数) i の値を m から n まで +1 ずつ変化させながら(n-m+1)回繰り返す.
|
例1のプログラムについて.
- n が制御変数(カウンタ変数とも呼ばれる).まずテキストの説明をよく読んで実行結果を予想.次にプログラムを入力・実行し,結果を確認せよ.
- ステップ実行を行い,変数の値の変化と実行順序を確認せよ.
- 第10行の「1」と「10」を他のいろいろな値に変えて実行し,結果を確認せよ.
- [復習]第20行のカンマをセミコロンに変えると表示はどのように変わるか.予想してからプログラムを書き換え,実行して結果を確認せよ.
- 【注意】 インデント(indent=字下げ)について.
第20行の行頭(行番号は除く)が右にずれているが,これを インデント という.FORとNEXTで挟まれた部分を明示し,プログラムの構造を把握しやすくするためのもの.プログラムを見やすくするためには必須.ただし十進BASICでは,FOR〜NEXT構文などを含むプログラムを実行すると自動的にインデントが行われるので,入力時は気にしなくて良い.実行時にインデントの様子を確認すること.
例2のプログラムについて.
- k が制御変数.プログラムを入力し,n にいろいろな値を入力して実行せよ.入力の際は例1のプログラムに追加・修正を施せばよい(ただしこれを「上書き保存」すると先に保存した「ex01.bas」の内容が消えてしまうので,まず最初に「名前をつけて保存」でファイル名を「ex02.bas」としてUSBメモリに保存すること).
- 第50行では文字列「Last」と変数 k を続けて出力していることに注意.
- [復習]第50行の「Last」の前後の「" "」を削除してから実行するとどうなるか調べよ.そのようになる理由も考えること(2.2.1でやったのと同じこと).
- 例2の後に書かれた説明をよく読んで理解せよ.
2.3.2 FOR〜NEXTの応用(数列の和,積)
【要点1】数列 a1, a2,・・・の 和 の求め方:(1)LET文で和の値を入れる変数(仮に S とする)に初期値 0 を設定し,(2)FOR〜NEXT構文を用いて S に a1, a2,・・・を順次足していく.
【要点2】数列 a1, a2,・・・の 積の求め方:(1)LET文で和の値を入れる変数(仮に P とする)に初期値 1 を設定し,(2)FOR〜NEXT構文を用いて P に a1, a2,・・・を順次掛けていく.
[注意]上の「初期値」とは,計算を始める前の「仮の値」であって,数列の初項ではない.
|
例3のプログラム(数列 12, 22,・・・, n2 の和の計算)について.
- プログラムを入力し,n の値を変えて繰り返し実行せよ.n の値としてはまず 0, 1, 2・・・を入力(結果を確認しやすくするために,最初は計算が容易な小さな値を入れる).
★60行と70行の間に「65 PRINT (1/6)*n*(n+1)*(2n+1)」と挿入し,同じ値が2つ表示されることを確認せよ.
【参考】公式 nk=1 k2= 12 + 22 + ・・・ + n2
= (1/6)n(n+1)(2n+1)
- FOR〜NEXT構文を使って数列の和を計算させる仕組みを理解せよ.特に第40行の部分.ピンと来ない人は,ステップ実行を利用して S の値が加算により変化していく様子を確認すること.
- 第20行を削除してから実行し,結果が変わらないことを確認せよ.変わらない理由は?変わらないのに何故わざわざ入れるのか?(テキストの[Note]参照)
[練習課題] INPUT文で与えた n に対し, nk=1 k3 = 13 + 23 + ・・・ + n3 の値を, (1)「FOR〜NEXT構文を用いた和の計算」 および (2)「 n で表す公式(調べてみましょう)を用いた計算」
の2通りで求めて同時に(2つの同じ値を)表示するプログラムを作成して実行し,(2)の公式を確かめよ.
|
例4のプログラムについて.
- 【注意】順列の総数 nPr を計算するプログラムだが,要するに n-r+1, n-r+2, ・・・, n-1, n という数列の積を計算していることになる.初期値が (0ではなく) 1 であることに注意.
- プログラムを入力し(例3のプログラムをUSBメモリに保存した後に修正すればよい),例3と同様に n にいろいろな値(0,1,2,…)を入れて繰り返し実行→結果を確認.プログラムの仕組み,計算手順(=アルゴリズム)を理解すること.
- 第20行を削除してから実行し,結果の違いを確認せよ.そのように変化する理由を考えること.
2.3.3 FOR〜NEXTの応用(漸化式で定義された数列)
省略可.ただし漸化式がわかれば難しくはないので,余裕がある人はやりましょう.
2.3.4 STEP
【要点】FOR文の末尾に「STEP 〜」と付け加えると,繰り返しの度に制御変数に加算される値を(1ではなく)「〜」にすることができる(STEPが無い場合は「STEP 1」が省略されていると思ってもよい).
|
- 例6,例7のプログラムについて入力(&保存)・実行および結果の確認を行い,STEP の働きを理解せよ.「STEP 〜」の「〜」の値をいろいろな値に変更して繰り返し実行し,結果の違いを確認すること.
- 問2のプログラムについて入力(&保存)・実行および結果の確認を行い,特に n に奇数を入力した場合の動作について理解せよ(わからなければステップ実行を利用).
- ★「STEP -1」を用いて,例4のプログラム(ex04.bas)を大きい方の値から(n→n-1→・・・n-r+1の順に)掛け算を行うプログラムに書き換え,これを「ex04a.bas」として保存せよ.同じ n, r の値に対して ex04.bas と ex04a.bas の両方で計算を行い,結果が一致することを確認すること.
第3回の範囲はここまで.プログラミング課題3を提出し,「OK」の返信を確認したら終了.
課題のページを表示.
2.4 DEF文
(テキストの該当箇所を右に表示)
【要点】DEF文を使うと自分で作った関数に名前を付けてプログラム中で用いることができる.
DEF文は関数の「形」を定めるだけなので,DEF文における変数と実際にその関数を使用する際の変数は一致していなくても良いことに注意.
|
- 例8のプログラムを入力・実行し,テキストと同じ実行結果になることを確認.また出力結果のウィンドウを縦にスクロールし,出力結果の全体を確認せよ(テキストのコメントにある通り,出力結果が多数の行にわたる場合,最初の方を見るためにはスクロールする必要がある).
- テキストの説明をよく読んで,DEF文の役割と使用法を理解せよ.
- 例8のプログラムで,第10行のDEF文で定義される関数を他の関数( f(x)=x2 などシンプルなものでよい)に書き換えて実行し,結果を確認せよ.
- 第10行の x をすべて y に書き換えて実行し,結果が変わらないことを確認せよ.理由もよく考えること.
【重要】DEF文で関数を定義するときに用いる変数は,後でその関数を使うとき用いる変数と一致している必要はない!
2.5 組込み関数
(テキストの該当箇所を右に表示)
【要点】平方根,絶対値,三角関数,小数点以下を切り捨てる関数(INT関数),割り算の余りを求める関数(MOD関数)など,計算でよく用いられる基本的な関数はあらかじめ用意されている.また円周率を与えるPI関数(実際は定数),乱数を発生させるRND関数もある.
|
2.5.1 平方根,絶対値
- 例9 のプログラムの入力・実行し,組込み関数SQRの使い方を理解せよ.a,bにいろいろな値を入れて正しく計算されることを確認せよ
.
[問] 例9のプログラムにおいて,a,b の値として以下の値を入力したとき実行結果はどうなるか.計算によって求めてから実行結果と比較せよ.
- a=3, b=4
- a=5, b=12
- a=1, b=1
- a=1, b=2
- 例9のプログラムの第20行を「PRINT a-b, ABS(a-b)」と書き換えて実行し,関数ABSの使い方を理解せよ.
2.5.2 三角関数
- 余弦定理「c2=a2+b2-2ab cosC」を思い出せ!
- 例10のプログラムを入力・実行し,結果を確認せよ.正三角形,直角二等辺三角形など,角度や3辺の比がわかっている三角形を利用すること.
【注意】a,bが小文字でCが大文字なのは便宜上の理由(辺の長さa,bと角度Cを区別するため).BASICは大文字・小文字を区別しないので,全部小文字または全部大文字でもプログラム上支障はない.
[問] 例10のプログラムにおいて,a,b,C の値として以下の値を入力したとき実行結果はどうなるか.計算によって求めてから実行結果と比較せよ.
- a=2, b=2, C=60
- a=1, b=1, C=90
- a=1, b=2, C=60
- OPTION ANGLE DEGREESについて:
2.5.3 逆三角関数 → 省略
2.5.4 INT関数とMOD関数
- いずれの関数も後で用いるので,テキストの解説をよく読むこと.
- 例9のプログラムの第20行を「PRINT SQR(a^2+b^2), INT(SQR(a^2+b^2))」と書き換えて実行し,関数INTの使い方を理解せよ.
- 例9のプログラムの第20行を「PRINT MOD(a,b)」と書き換えて実行し,関数MODの使い方を理解せよ.
2.5.5 PI関数など
- PI 関数および MAXNUM 関数の概念を理解せよ.
【注意】これらは便宜上「関数」と呼んでいるが引数はとらず,実質上は「定数」に名前をつけたもの.数学用語としての「関数」とは意味が異なるので注意せよ.特に円周率PIは三角関数と組み合わせてよく使われるので重要!
- 例12のプログラムを入力・実行し,PIとMAXNUMの値を確認せよ.
2.5.6 乱数(RND関数)
- 例13のプログラムを入力,繰り返し実行し,結果を確認せよ(何度実行しても同じ乱数列を発生する).
- 例13のプログラムで第10行の前にRANDOMIZE文を挿入して再び繰り返し実行し,実行する度に異なる乱数列が発生することを確認せよ.
- 最後のプログラムを入力,繰り返し実行し,実行する度に異なる乱数列が発生することを確認せよ.
- 最後のプログラムの第25行に「LET x=RND」を付加,第30行を「PRINT x, x*6, INT(x*6), INT(x*6+1)」と書き直して実行し,RNDの値を1〜6の整数に変換させる仕組みを理解せよ.
- 最後のプログラムで第10行を削除してから繰り返し実行し,毎回同じ乱数列を発生することを確認せよ.
- 最後のプログラムの第20行の「20」,第30行の「6」「1」を他の数字に書き換えるとどうなるか?予想してから実行し,結果を確認せよ.
[練習課題] 最後のプログラムを書き直し,4, 5, 6のいずれかの数字が等確率で計15個(すなわち平均してそれぞれ5個ずつ程度)出るように改造せよ.
|
第4回の範囲はここまで.プログラミング課題4を提出し,「OK」の返信を確認したら終了.
課題のページを表示.
2.6 グラフィックス
(テキストの該当箇所を右に表示)
【要点】十進BASICには折れ線を描くための PLOT LINES,点を打つための PLOT POINTS などのグラフィック命令が用意されている.曲線は主に PLOT LINES を用いて細かい折れ線として描く.色の指定は SET LINE COLOR, SET POINT COLOR.またSET WINDOW で座標の取り方を指定する.関数のグラフを描くときは DRAW GRID で簡単に座標軸と目盛りが打てる.
|
2.6.1 関数のグラフ
- 例14のプログラムを入力,実行し,結果を確認せよ.さらにテキストの解説をよく読んでプログラムの各行のおおまかな意味を理解すること.特に例8とよく比較し,DEF文とFOR〜NEXT文の使い方を再確認すること.
- 第40行の STEP で指定された値をより大きな値(0.5など)に変更して実行,折れ線が描かれていることを確認せよ.
- 第30行を削除して実行し,grid(=格子,マス目)が消えることを確認せよ.
2.6.2 SET WINDOW
- テキスト冒頭の説明をよく読み,SET WINDOW文の仕組みを理解せよ.例14の第20行も見直して使い方を確認すること.
- 例14(例15ではない!)のプログラム第20行を「SET WINDOW -8,8,-8,8」「SET WINDOW -2,2,-2,2」「-2,2,-4,4」などと変更するとどうなるか.それぞれ結果を予想してから実行せよ.
- 例15のプログラムを入力,実行し,結果を確認せよ.さらにテキストの解説をよく読んでプログラムの各行のおおまかな意味を理解すること.
[復習]「OPTION ANGLE DEGREES」は角度の単位の変更(→ 2.5.2)
- 第40行のDRAW GRID文の引数(90,1)をいろいろな値(例:(90,2), (90,0.5), (180,1), (45,1), etc.)に変更して実行し,DRAW GRID文の機能を理解せよ.
[注意]例14ではDRAW GRID文の引数を省略していた.引数の省略値は「(1,1)」.すなわち例14で第30行を「DRAW GRID(1,1)」と書き変えても実行結果は同じ.
- 第50行で STEP を使っていないのは,「STEP 1」でも十分細かく,滑らかな曲線に見えるから(本当は細かい折れ線).たとえば第50行の行末に「 STEP 90」と付け加えるとどうなるか?結果を予想してから書き換えたプログラムを実行し,確認せよ.
- SET WINDOW の引数を変えてもディスプレイ上の表示領域は変わらないので,結果的に曲線の(見かけ上の)拡大・縮小や平行移動を行うことになる.例15で第30行の「SET WINDOW」に続く部分を以下のように順次書き換え,結果を予想してから実行せよ(保存は書き換える前のものだけでよい).
- 「-360,360,-2,2」「-360,360,-8,8」「-360,360,-2,6」(縦方向の変化)
- 「-720,720,-4,4」「-180,180,-4,4」「-270,450,-4,4」(横方向の変化)
- 「-180,180,-2,2」(縦横同時)
2.6.3 PLOT LINES
- テキストの解説をよく読み,PLOT LINES の使い方を確認せよ.特に「;」(セミコロン)の役割!
- 「;」の前後で指定された座標を結ぶことによって線分や折れ線を描いていることに注意.PLOT LINES文が「;」を伴わないのは,そこで「止める」(または「切る」)場合のみ.
- テキストでは一度に2点を結ぶ例しか出てきていませんが,「PLOT LINES: x1,y1 ; x2,y2 ; x3,y3 ...」と順に座標を記述して3点以上を一度に結ぶことも可能です.
- PLOT LINES文の使い方を間違える人は毎年多いですが,使い方の規則はとてもシンプルです.このセクションに書いてあることをきちんと理解すること.
- 例16のプログラムを入力・実行し,結果を確認せよ.
- 例16の第170行を削除して実行し,結果の違いを確認せよ.そうなる理由も理解すること.
- 例16の150行、190行における行末の「;」の役割を理解せよ.またこれらのセミコロンを削除して実行し,結果を確認せよ(曲線が折れ線ではなく点線で表示される).
2.6.4 媒介変数表示の曲線
- 媒介変数を用いて円や楕円を表す方法を思い出せ!
- 【重要】 例17のプログラムを入力・実行し,結果を確認せよ.さらに以下の書き換えを行い,図形が変化する様子を確認せよ.
- 第20行,第30行の「*COS」「*SIN」の前の値を変える(楕円の長軸・短軸の長さが変化).
- 第20行,第30行の末尾にそれぞれ「+1」「-1」などを書き加える(楕円の中心が移動).
- 第60行のFOR文の制御変数の範囲(「○ TO ○」の部分)を変更.
- 例17のプログラムの第60行に「STEP〜」を付加するとどうなるか.以下のそれぞれの場合について実行し,そうなる理由を考えよ.
- 「STEP 60」
- 「STEP 100」
- 「STEP 360/n」( n のところに 1〜20 あたりのいろいろな自然数を入れる)
- 第60行を「60 FOR t=0 TO 720 STEP 144」と書き換えるとどうなるか?(なるべく事前に結果を予想してから)プログラムを実行し,実行結果に基づいて考察せよ.
HINT:720=360*2, 144=360/5*2 であることに注意.
- 例14〜17ではPLOT LINES文の引数の部分に入れる関数をあらかじめDEF文で定義してあるが,PLOT LINES文の引数に直接数式を入れてもよい(むしろDEF文を使わない方が,プログラムが短くなり見やすいかもしれない).例17をDEF文を使わずに書き直し,このことを確かめよ.書き直したプログラムは保存しなくてもよいが,必ず実行して同じグラフが描かれることを確認すること.
2.6.5 極方程式表示の曲線 → 省略
2.6.6 極座標 → 省略
2.6.7 SET LINE COLOR
これまでに入力したプログラムに SET LINE COLOR 文 を挿入し,色が変わることを確認せよ.
2.6.8 点を描く命令
例14の PLOT LINES 文を PLOT POINTS 文に書き換えて(行末のセミコロンは不要となる)実行し,結果の違いを確認せよ.さらに SET POINT STYLE文や SET POINT COLOR文を挿入して点の色や形を適当に変えて実行せよ.
第5回の範囲はここまで.プログラミング課題5を提出し,「OK」の返信を確認したら終了.
課題のページを表示.
2.7 数値計算 → すべて省略
BACK
NEXT