第4回 黒板(変数)を使って、得意の計算を行う
(学習目標)変数はデータを書く黒板だ、というイメージを掴む。変数や定数を使った計算命令を書けるようにする。
コンピュータは高速計算が得意です。変数や定数(2や5といったきまった数値)を使って高速計算を行い、様々な処理を実行します。ただ、計算と言ってもできるのは、次の演算、
+:数の時は足し算、文字列(言葉)の時は“連結”
(連結とはつなげること)“ab”と”ghy”の連結はabghy
−:引き算
*:掛け算
/:割り算(結果は実数(小数点))
\:割り算(結果は整数(商))
Mod :割り算の余り
And:〜かつ〜(If..Then 命令の条件部で、a>4 And a<7等と使用)
です。
注1:プログラムの中では全て半角(直接入力)で書きます。
注2:計算に使う変数には“文字”ではなく、“数字”が書かれていること。
コンピュータに計算をやらせる命令は、(左辺=右辺)の形をしていて右辺に計算式を書きます。ここで=は、(前に述べたように)<=(左向き矢印)のことで、左辺への書き込みを意味します)。ですから、
d= 5 はdという変数に5を書き込むことですし、
dd= sd はddという変数にsdという変数に書かれているデータをコピーすることを意味します。
4−1 計算命令
次に5つの計算式の例を示します。
(1) data1= 5 + 3 (5+3の結果を、変数dataに書き込む)
(2) data2= data3 * 5 (変数data3に書かれている数に5を掛けた結果を変数data2に書き込みます。この時、data3の数値は変化しません。もしdata3に4が書かれていたらdata2に20が書かれます)
(3) data3= data3 / 5 (変数data3に書かれている数を5で割った結果(実数)をdata3に書く。=は“等しい”という意味ではなく、“書き込む”という意味なので、このようなことができます)
(4) kekka= kekka Mod 3 (変数kekkaに書かれている数を3で割って、余りをkekkaに書き込む。
(5) kekka= data1 – data2 (変数data1に書かれている数から、変数data2に書かれている数値を引いて、結果を変数kekkaに書き込む。
この外、 a1= b + c * dの様に長い式や()を使った式も書けます。計算の手順は皆さんが普段行っているように、()や*/を先に計算します。
4−2 (たいしたことのない)特訓
変数と計算は、“習うより慣れろ”です。簡単ですが、重要な例を9個用意します。少しですので、自分でやってみましょう。(キャラクターは表示しないので、“キャラクターを出現させるおまじない”は不要です)
'===プログラム4.1:
'変数aに数値を入力し、変数aの数を変数bにコピーし、bを出力。
a= InputBox ("数を別の変数にコピー") + 0
b= a
MsgBox b
'===プログラム4.2
'変数aに数値を入力し、変数aの数に1を加え、変数aを出力。
a= InputBox ("1加えます")+ 0
a= a + 1
MsgBox a
'===プログラム4.3:
'変数aに数値を入力し、変数aを2乗し、aを出力。
a= InputBox ("2乗します")+ 0
a= a * a
MsgBox a
'===プログラム4.4:
'変数aに数値を入力し、変数aで割った結果を出力。
a= InputBox ("3で割ります")+ 0
a= a / 3
MsgBox a
'===プログラム4.5:
'変数aに数値を入力し、3で割った余りを出力。
a= InputBox ("3で割った余り")+ 0
a= a Mod 3
MsgBox a
'===プログラム4.6:
'変数aとbに数値を入力し、a+bの結果をcに書き、cを出力。
a= InputBox ("数を入れて")+ 0
b= InputBox ("この数を加えます")+ 0
c= a + b
MsgBox c
'===プログラム4.7:
'変数aとbに数値を入力し、a×bの結果をaに書き、aを出力。
a= InputBox ("数を入れて")+ 0
b= InputBox ("この数を掛けます")+ 0
a= a * b
MsgBox a
'===プログラム4.8:
'変数aとbに数値を入力し、a÷b+2の結果をcに書き、cを出力。
a= InputBox ("数を入れて")+ 0
b= InputBox ("この数で割って2を加えます")
c= a / b +2
MsgBox c
‘===
ここで、キャラクターに付随している変数を2つ紹介します。それらはキャラクターの大きさを指定する変数でWidth(幅)とHeight(高さ)です。例えばマーリンの高さはMerlin.Heightという変数で、マーリンの幅はMerlin.Widthという変数です。
‘===プログラム4.9:
‘マーリンの大きさを2倍にした後、“元の大きさに戻ります”と言って元の大きさにもどる。
Set Agent1= WScript.CreateObject("Agent.Control.1", "Merlin_")
Agent1.Connected= True
Agent1.Characters.Load "Merlin","Merlin.acs"
Set Merlin= Agent1.Characters("Merlin")
Merlin.Show
'ここから下がプログラム本体
Merlin.Speak "大きくなります"
Wscript.Sleep 2000
Merlin.Width= Merlin.Width*2
Merlin.Height= Merlin.Height*2
Merlin.Speak "もとにもどります"
Wscript.Sleep 2000
Merlin.Width= Merlin.Width/2
Merlin.Height= Merlin.Height/2
MsgBox "よかったね"
‘===
(補足)上のプログラムのWscript.Sleep 〜 は、〜ミリ秒(1000ミリ秒が1秒)の間、実行が次の命令に進むのを止めます。コンピュータは、Speakが終わらなくても次の命令に進んでしまうので、Wscript.Sleep 2000でおしゃべりが終わるまで2秒待っています。
(問題4.1:中1レベル)半径rの球の表面積と体積は、次の式で表されます。
表面積= 4×3.14×r×r
体積= (4×3.14×r×r×r)÷3
半径を入力すると、メッセージボックスに球の表面積と体積を(2行に分けて)表示するプログラムをつくろう。
答a41.vbs
(問題4.2:中1レベル)マーリンを300,300の位置に動かし、身長を2倍、幅を半分にしよう。
答a42.vbs
(問題4.3:中2レベル)マーリンを300,300の位置に動かし、InputBoxで体の横幅と高さを指定して表示しよう。
答a43.vbs
(問題4.4:中2レベル)高さhの場所から物を落とした時、地上に到着するまでの時間をt秒とすると、hとtの間に次の関係がある。
高さh=0.5×9.8×t×t
落下時間tを入力すると高さを教えてくれるプログラムを作りましょう。
答a44.vbs
(問題4.5:中2レベル)秒速v(メートル)でボールを真上に投げると次の高さまで上昇する。
高さ= v×v÷0.051
時速(キロメートル)を投げ上げの速度を時速で入力すると到達する高さを教えてくれるプログラムを作ろう。時速(キロメートル)を秒速(メートル)に直すには、キロメートルをメートルに直し、60×60で割ればよい。ちなみに、野球選手は時速100kmくらいの球を投げます。
答a45.vbs
(問題4.6:中3レベル)人工衛星を、ある高さ(地上h km)の高さで(地上に落ちないように)回り続けさせるには毎秒v(km)で飛ばす必要がある(次の式)。
高さh=(398600÷(v×v))−6378
地上すれすれに飛ばすには時速約7.9kmです。もっと高い所を飛ばすには、もう少し速度を落とす必要があります。人工衛星の速度を入力すると、高さを教えてくれるプログラムを作りましょう。
答a46.vbs