コンピュータは「計算機」というくらいなので、計算をするのが仕事だ。ここでは、普通の意味での「計算」と「変数」をとりあげる。残念ながら、このあたりから話が抽象的でとっつきにくくなる。プログラミング初心者はがんばってついてきてください。
たとえば、半径20の円を画面の左上端に描くプログラムを考える
ellipse(20,20,40,40);
これでは円が小さすぎるので二倍にしよう。
ellipse(40,40,80,80);
たしかにこれでいいのだが、すべての数字は半径が20か40かということだけで決まっているのに数字を4ヶ所書き換えなくてはならないというのは、いまひとつ賢くない感じがする。そこで次のプログラムを実行してみる。
int r; r = 20; ellipse(r,r,2*r,2*r);
いきなり見慣れないプログラムになったが、気にせずに実行すると、最初の半径20の円と同じ絵が現れる。ここで20という数は二行目のr = 20;
にしか出ていないから、これが半径なのだろうと予想して、これをr = 40;
と書き換えてみると
int r; r = 40; ellipse(r,r,2*r,2*r);
今度は半径40の円の絵が描かれる。つまり、数字を1ヶ所書き換えるだけで、4ヶ所まとめて変えたのと同じ効果が得られた。
すると、(r,r,2*r,2*r)
が(20,20,40,40)や(40,40,80,80)の役を果たしていることになるから、2*r
は「rの2倍」という意味らしい。
これは変数というものの使い方の簡単な例だ。変数とは名前のついた箱のようなもので、そこに数を入れておくことができる。この例ではrという名前の変数を用意した。1行目のint r;
は「これからrという名前の変数を使う。その変数には整数を入れられる」という意味だ。int
は整数を意味するintegerに由来する。この「宣言」をすることによって、rという変数が使えるようになる。変数の名前は英文字ひとつでもいいし、xx, hensu, kazu1など長い名前でもかまわない。二行目のr = 20;
が変数rに数20を「代入」している。=記号は数学では「等しい」という意味だが、プログラムでは「右側の数を左側の変数に代入する」という意味になる。まとめると
数を憶える名前つきの箱。名前は英字1文字でもよいし、長い名前でもよい。
変数を使う前には「使う」という宣言をする。整数をおぼえる変数の宣言はint
宣言した変数に数を代入するには=を使う。
変数はいくつでも使える。宣言はカンマで区切って並べてもいいし、別の行にしてもよい。たとえば
int x,y; int rr; rr = 10; x = 100; y = x;
というプログラム(計算だけをして、絵を描かない)は三つの整数変数x,y,rrを宣言し、rrに10、xに100を代入する。最後の行では=の左右とも変数が置かれているが、こういう書き方も許されて、とにかく右側の数を左側の変数に代入する。したがって、yはxの中身である100となる。
これでは、計算結果が確認できないので、変数の中身を画面に出す命令も確認しておこう。今後もたまには使うかもしれない。
()内に書かれた内容を画面に出力して改行する
printlnと違い、改行しない
使用例はこんな感じ。結果はエディタ画面の下側の黒い領域にさりげなく表示されるので注意。
int x; x = 10; println(x); x = 100; println(x);
ここでは同じxという変数にまず10を代入して、次に100を代入した。たしかに数が変わっていることがprintlnの出力で確認できる。
したがって、次のようなプログラムも書ける
int x,y; x = 20; y = 10; ellipse(y,y,x,x); y = 20; ellipse(y,y,x,x); y = 40; ellipse(y,y,x,x);
上のプログラムを参考に、だいたい次のような絵を描くプログラムを作れ。変数をうまく使うこと。
2*r
はrの二倍を表すので、記号 *
が掛け算を表すことがわかる。基本的な四則演算の記号をまとめておこう。
和・足し算
差・引き算
積・掛け算
商・割り算
これらの計算は数同士でも変数同士でも、また数と変数でも行なえる。
注意が必要なのは割り算だ。
println(3./2); println(3.0/2); println(3/2.); println(3/2.0); println(3./2.); println(3.0/2.0); println(3/2);
というプログラムを実行してみると、最後の行だけが 1 になり、ほかは 1.5 になる。実は「整数/整数」は結果が小数点以下切捨てされて整数になる。それに対して、2.0 や 3.0 と小数部分が(0であっても)ついている数、あるいは 2. や 3. と小数点だけでもついている数は「整数ではない」とみなされて、普通に割り算される。
これは変数でも同じで
int x,y; x = 3; y = 2; println(x/y);
は、整数/整数なので 1 となる。そこで実は「整数同士の割り算をした余りを求める」という計算の記号も用意されている
整数/整数の余り
たとえば、10/3
は3になり、10%3
は1になる。
整数ではない「実数」を表す変数は float
と宣言する。
float x; x = 1.0; println(x); x = 2; println(x);
このプログラムを実行すると、xに1.0のような実数を代入しても2のような整数を代入しても、実数として扱われることが分かる。
int
float
ところで、実数変数に整数を代入してもかまわないが、整数変数に実数変数を代入するプログラムはエラーが出る。3.14を整数変数に代入したらするといくつになるかという問題だが、小数部分を切り捨てて整数にする命令 int
が用意されている。整数変数の宣言と同じ名前だが、使いかたが違うので注意。これを使うと
float x; int y; x = 3.14; y = int(x); println(x); println(y);
のようになる。int は小数点以下を切り捨てる。四捨五入ではないことに注意。実数の計算についても同様で、もし計算結果を整数変数に代入したければ int 命令を使う。
float x; int y; x = 3.14; y = int(x*2); println(y);
右の数(計算ならその結果)を左の変数に代入
小数点以下を切り捨てて、数を整数にする。実数を整数変数に代入するときには必ず必要
ところで、=
の記号は「等しい」ではなく「右の数を左の変数に代入」だから、、次のような書き方ができる
int x; x = 10; x = x+2; println(x);
この x = x+2
のような書き方は、プログラミング初心者がまず最初につまづくところだが、 = があくまでも代入だということを忘れなければ大丈夫。
もっとも、これではわかりにくいので、単に「変数に数を足す」という命令も用意されている。たとえば、x=x+2
は x += 2
と書ける。こちらを使うほうがなにかと便利だと思う。もちろん、その他の四則演算や余りも同様にできる
左辺の変数に右辺を足す
左辺の変数から右辺を引く
左辺の変数に右辺を掛ける
左辺の変数を右辺で割る
左辺の変数を右辺で割った余り(整数同士の場合のみ)