GeoCities home page

プログラミング A home page

1998年5月11日分

入力欄の内容の入れ替え

新しいプログラムを作ります。

まず、次のようにフォームを作ってください。

ボタンの表示は「入れ替え」にし、Edit1のTextは「3」、Edit2のTextは「5」にしてください。

ボタンを押すと上の欄と下の欄が入れ替わる、というプログラムを作るにはどうしたらいいでしょうか。例えば

void __fastcall TForm1::ButtonChangeClick(TObject *Sender)

{

Edit2->Text = Edit1->Text;

Edit1->Text = Edit2->Text;

}

というプログラムでは、1行目が実行された時点でEdit2の内容が消えてしまいます。(試しに実行してみてください。)だからといって1行目と2行目を入れ替えてもうまくいきません。

この場合、Edit2の内容を取り敢えず保存しておく欄が必要です。次のように、データの中継用の欄を加えてください。(Temp は temporary=一時的 の略です。)

この中継欄は空欄にし、プログラムを次のように変えてください。

void __fastcall TForm1::ButtonChangeClick(TObject *Sender)

{

EditTemp->Text = Edit1->Text;

Edit1->Text = Edit2->Text;

Edit2->Text = EditTemp->Text;

}

どうですか。3と5が入れ替わりましたか。

このままでもプログラムは正しく動きますが、中継欄が画面に表示されるのは格好悪いですね。EditTempのVisibleをfalseにしてもう一度実行してください。これで一応まともな入れ替えプログラムになりました。

変数

ここで、新しい方法を試してみます。中継欄(EditTemp)を削除し、プログラムを次のように変えてください。

void __fastcall TForm1::ButtonChangeClick(TObject *Sender)

{

int temp;

temp = Edit1->Text.ToInt();

Edit1->Text = Edit2->Text;

Edit2->Text = temp;

}

このプログラムを解説します。

最初に出てくる「int temp;」は、中継欄(EditTemp)の代わりに「temp」という入れ物を作ります、という宣言です。宣言といわれてもピンとこないかもしれませんが、これはフォームに入力欄を置くのと同じことです。ただし、入力欄と違い、この「temp」という入れ物の中身は、そのままでは画面に表示されません。このような入れ物を変数といいます。入力欄(やボタン)も変数の一種ですが、この「temp」という変数はより原始的な変数です。

変数の型

このプログラムで、

temp = Edit1->Text.ToInt();

というように ToInt() がついていることに気づいたでしょうか。実は、 temp という変数を宣言したときに「int」とつけたので、temp は整数用の変数(整数しか入らない変数)になっているのです。一方、Edit1やEdit2は文字でも数字でも受け付けるので、その中身を temp に代入するときは整数にしてやる必要があります。そのために ToInt() がついています。

もし上下の欄に入っている数が整数とは限らずに少数もありうるとしたら、temp は少数を受け付けないので、おかしなことになります。試しに、「2.7」とか「-3.5」とかを入れて実行してみてください。こういう場合は、プログラムを次のように変えてやるとうまく動きます。

void __fastcall TForm1::ButtonChangeClick(TObject *Sender)

{

double temp;

temp = Edit1->Text.ToDouble();

Edit1->Text = Edit2->Text;

Edit2->Text = temp;

}

このように、変数がどんな形の値を受け入れるか、を表す intdouble は(変数の)型と呼ばれます。基本的な型は、主に次のものがあります。

int 整数
double 実数(とはいっても精度には限りがある)
char 文字(1文字)

char という型は初めて見ますね。これは文字を1文字だけ受け付ける型です。つまり、

char x;

として変数xが用意されたら、このxには

x = 'C';

というように1文字だけ代入することができます。

X = "C++";

というように何文字も代入することはできません。このように char 型は不便なので、C++Builderではあまり使われません(AnsiString 型という、もっと便利な型を使います)が、C++ではなくCの時代には、文字を扱うことができる型が char しかなかったので、Cの教科書には char 型が頻繁に現れます。