Webで学ぶセンター試験数学−BASICプログラミング > 変数

変数

変数

 プログラミング言語では、データをメモリに記憶するために、「変数」と呼ばれる仕組みを使います。変数はそれぞれ固有の名前の付いた箱のようなものをイメージするのがよいと思います。そして、その箱の中には数値や文字列などを格納でき、

  1. 箱を作ること
  2. 箱の中身を参照すること
  3. 箱の中身を入れ替えること(代入)
ができます。以下にプログラムの書き方を記します。

(1) 箱を作る

LET 変数名 = 初期値

 BASICでは中身が空の変数は存在できないので、必ず初期値を入れる必要があります。

(2) 箱の中身を参照する

変数名

 一度作った変数は、以降のプログラム中にその名前を書くことで格納されている値を参照することができます。同じ変数を何度でも参照することができます。

(3) 箱の中身を入れ替える(代入)

LET 変数名 = 代入値

 変数に新たな値を代入します。今まで格納されていた値は二度と参照することができません。

【確認】次のプログラムを実行せよ。

[プログラム]

  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

(1) XとYに適当な値を代入して計算を行い、確かにXとYの値が交換されていることを確かめなさい。

(2) 多くの場合、このプログラムは期待通りに2つの変数の値を交換しますが、ある特殊なケースにおいては正しく動作しません。どういった場合にどういった理由で正しく動作しなのか答えなさい。


<< 前のページトップページ次のページ >>
inserted by FC2 system