GeoCities home page

プログラミング A home page

1998年10月26日分

コンソールではなくウィンドウで作るプログラム

10月12日に配ったプリントの3〜4ページにある例題1「正の整数 m の約数の合計 sum を求めよ。」を、コンソール (黒い画面) ではなくウィンドウで動くようにプログラミングしてみましょう。

まずは、例題1のプログラムをもう一度見直してみます。

/*

* 例題1 約数の和

*/

#include <stdio.h>

#include <stdlib.h>

 

void main(void)

{

int k, m, sum;

char buff[20];

printf("input m = ");

m = atoi(gets(buff));

sum = 0;

for (k = 1; k <= m; k++) {

if (m % k == 0) sum = sum + k;

}

printf("約数の和 = %d", sum);

getchar(); /*dummy*/

}

これをみると、「m = atoi(gets(buff));」の代わりに入力欄を1つ、「printf("約数の和 = %d", sum);」の代わりに出力欄を1つ作ってやるといいようですね。

では、実際に作ってみましょう。次のように入力欄とボタンを配置してください。

入力欄・ボタン・出力欄があるフォーム

上の入力欄と下の出力欄は空欄にし、ボタンの表示は「計算」にしてください。

さて、プログラムの中身を書いていきましょう。ButtonCalc を選び、オブジェクトインスペクタのイベントの中にある OnClick の欄をダブルクリックすると、

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)

{

}

というようになるので、ここに次のようにプログラム本体を書きます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)

{

int k, m, sum;

m = EditM->Text.ToInt();

sum = 0;

for (k = 1; k <= m; k++) {

if (m % k == 0) sum = sum + k;

}

EditSum->Text = sum;

}

前のプログラムと比べて、ずいぶんとすっきりしましたね。では、どこが変わったのか、見ていきましょう。

まず、

printf("input m = ");

m = atoi(gets(buff));

という部分が

m = EditM->Text.ToInt();

となりました。これは、「上の欄 (EditM) の表示内容 (Text) を整数値 (ToInt) として m に代入せよ」という意味です。

次に、

printf("約数の和 = %d", sum);

という部分が

EditSum->Text = sum;

となっていますね。これは「sum の値を下の欄 (EditSum) の表示内容 (Text) に代入せよ」という意味です。

また、

char buff[20];

のようになくなってしまった行もあります。これは、コンソール (黒い画面) で動かしたときにキーボードから入力された文字をとりあえず貯えておくための変数です。新しいプログラムでは入力欄に何文字でも入力することができるので、この行は不要になりました。

時間があったら、10月19日の演習課題57〜59もウィンドウを利用してプログラミングしてみましょう。演習課題60〜63もウィンドウを利用したプログラミングが可能ですが、少々難しいです。興味がある学生は、石川 (演習指導員) に質問してください。