変数
プログラミング言語では、データをメモリに記憶するために、「変数」と呼ばれる仕組みを使います。変数はそれぞれ固有の名前の付いた箱のようなものをイメージするのがよいと思います。そして、その箱の中には数値や文字列などを格納でき、
- 箱を作ること
- 箱の中身を参照すること
- 箱の中身を入れ替えること(代入)
(1) 箱を作る
BASICでは中身が空の変数は存在できないので、必ず初期値を入れる必要があります。
(2) 箱の中身を参照する
一度作った変数は、以降のプログラム中にその名前を書くことで格納されている値を参照することができます。同じ変数を何度でも参照することができます。
(3) 箱の中身を入れ替える(代入)
変数に新たな値を代入します。今まで格納されていた値は二度と参照することができません。
【確認】次のプログラムを実行せよ。
[プログラム]
10 LET A=1 20 LET B=2 30 LET C=A+B 40 PRINT "A=";A, "B=";B, "C=";C 50 END
[出力結果]
A= 1 B= 2 C= 3
【確認】次のプログラムを実行せよ。
[プログラム]
10 LET VAR1=10 20 LET VAR2=20 30 LET SUM=VAR1+VAR2 40 PRINT VAR1;"+";VAR2;"=";SUM 50 END
[出力結果]
10 + 20 = 30
[解説]
変数名はローマ字1文字である必要はなく、2文字目以降に数字を用いることもできます。
変数の値を1増やす式
[プログラム]
10 LET X=10 20 PRINT X; 30 LET X=X+1 40 PRINT X 50 END
[出力結果]
1 2
[解説]
BASICのLET文で用いられる「=」(イコール)は数学の「=」(等号)と違い、「(左辺と右辺が)等しい」という意味は持ちません。「LET 変数=式」は(変数)に(式)の計算結果を代入する命令です。つまり、「LET X=X+1」は変数Xの値を1増やす命令となります。
【問題】空欄(a),(b)に適する式を入れ、1〜3を順に出力するプログラムを完成しなさい。
[プログラム]
10 (a) 20 PRINT X; 30 (b) 40 PRINT X; 50 (b) 60 PRINT X 70 END
値の交換
変数Aの値と変数Bの値を交換しようと思い、次のプログラムを実行しました。しかし、期待する結果は得られませんでした。
[プログラム]
10 LET A=10 20 LET B=20 30 LET A=B 40 LET B=A 50 PRINT "A=";A, "B=";B 60 END
[実行結果]
a= 20 b= 20
[解説]
上のプログラムで変数Aと変数Bの値をトレースすると、次のようになります。
行 | 命令 | 変数A | 変数B |
10 | LET A=10 | 10 | − |
20 | LET B=20 | 10 | 20 |
30 | LET A=B | 20 | 20 |
40 | LET B=A | 20 | 20 |
50 | PRINT "A=";A, "B=";B | 20 | 20 |
60 | END | 20 | 20 |
30行目で変数Aに変数Bの値を代入しているため、40行目で変数Bに代入される値はもはや元の変数Aの値10ではなく、30行目で代入された値20となってしまいます。そのため、元々変数Bが持っていた値20が変数Aに代入されるだけで、変数Aと変数Bの値は交換されません。
先程のプログラムでは変数Aに変数Bの値が代入されると、元々変数Aが持っていた値の情報が消えてしまい、それを変数Bに代入することができないのが問題でした。そこで、プログラムを次のように修正します。
行 | 命令 | 変数A | 変数B | 変数W |
10 | LET A=10 | 10 | − | − |
20 | LET B=20 | 10 | 20 | − |
30 | LET W=A | 10 | 20 | 10 |
40 | LET A=B | 20 | 20 | 10 |
50 | LET B=W | 20 | 10 | 10 |
60 | PRINT "A=";A, "B=";B | 20 | 10 | 10 |
70 | END | 20 | 10 | 10 |
修正版のプログラムでは、元々の変数Aの値を保持するための変数Wを用意し、変数Aの情報が失われる前にそこに値を移しています。最後に、変数Bに変数Wの値(元々の変数Aの値)を代入することで、変数Aの値と変数Bの値の交換が正しく行われます。
【問題】次のプログラムの実行結果を答えなさい。
[プログラム]
10 LET X=1 20 PRINT X; 30 LET X=X+1 40 PRINT X; 50 LET X=X+2 60 PRINT X; 70 LET X=X+3 80 PRINT X 90 END
【問題】空欄(a)〜(c)に適切な式を埋めて、変数Xの値と変数Yの値を交換するプログラムを完成させなさい。
[プログラム]
10 LET X=10 20 LET Y=20 30 (a) 40 (b) 50 (c) 60 END
【発展問題】次のプログラムも2つの変数の値を交換するプログラムです。
[プログラム]
LET X=X+Y LET Y=X-Y LET X=X-Y