GeoCities home page

プログラミング A home page

1998年6月1日分

関数の使い方 / include

メニューから「ヘルプ」→「キーワード検索」を選び、absと入力して「表示」を押すと、absについての説明が出てきます。この説明を読んでみましょう。

最も大切な部分は構文です。1行目の

#include <stdlib.h>

は、プログラムの最初にこのように記述する必要があるということを示しています。実は、関数とは誰かが作ってくれた部分的プログラムであり、特にabsのようにヘルプに載っている関数は C++ Builder によって最初から用意されているので、これを利用するためには、

#pragma hdrstop

よりも前に必ず

#include <stdlib.h>

という宣言が必要です。この部分は今はよく分からなくても構いませんが、今後は include 文を書き忘れないようにしてください。

関数の使い方 / 変数の型

構文の2行目

int abs(int x);

は、この関数が整数型を受け取り整数型を出力することを表しています。
図で書けば次のようになります。

差のプログラムに出てきた文

diff = abs(diff);

を思い出しながら、もう少し詳しく見てみましょう。

括弧の中の int xint は、受け取るデータの型を表しています。つまり、abs() と書くとき、括弧の中は整数型のデータでなくてはいけません。上の例では、括弧の中にある diff は整数型なのでOKです。int xx は特に意味はありません。

abs の前の int は出力するデータが整数型であることを示しています。上の例では、abs(diff) というかたまりが整数となります。

バイオリズム

新しい関数を使ってバイオリズムのプログラムを作ってみましょう。

バイオリズムとは、人間の調子には一定の周期(リズム)がある、という考えで計算されるものです。

とされ、生まれたばかりのときはすべて±0なので、図で書くと次のようになります。(図を描くのは大変なので、これから作るプログラムは調子を図の代わりに数値で表します。)

では、フォームから作ってみましょう。次のようにフォームを作ってください。

LabelDay というみなれないコンポーネント(部品)が出てきましたね。これはラベルと呼ばれるものです。を押すとフォームに配置することができます。文字を表示したいが入力欄にする必要がないときに利用します。ただし、入力欄と違い、Text ではなく Caption が表示内容を表します。

ラベルは上から順に「日数」「身体」「感情」「知性」としてください。また、入力欄はすべて空欄にし、ボタンの表示は「計算」としてください。

生まれてから今日までの日数を一番上の欄に入れるとバイオリズムを計算してくれる、というプログラムにします。先ほどのグラフを見てわかるように、バイオリズムを求めるには sin (サイン、正弦関数)を使えばいいようですね。「ヘルプ」→「キーワード検索」を選び、sin と入力して「表示」を押してください。sin の説明が出てきましたね。まずは sin を使うための準備をしましょう。

構文の最初の行は

#include <math.h>

ですから、まったく同じ文を次の位置に書き込みます。

#include <vcl\vcl.h>

#include <math.h>

#pragma hdrstop

これで、プログラム中で sin を使うことができるようになりました。

構文の2行目には

double sin(double x);

と書いてありますから、この関数に double 型を渡してやると double 型を返してくれる、ということがわかりますね。3行目は無視します。(もし long double 型を渡してやると long double 型を返してくれる、という意味です。)

次は、ButtonCalc の OnClick にプログラムを書き込みましょう。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)

{

EditShintai->Text = sin(EditDay->Text.ToDouble() * 2 * 3.141592 / 23);

EditKanjou->Text = sin(EditDay->Text.ToDouble() * 2 * 3.141592 / 28);

EditChisei->Text = sin(EditDay->Text.ToDouble() * 2 * 3.141592 / 33);

}

これで出来上がりです。あなたが生まれてから今日までの日数を計算し、一番上の欄に入力して計算ボタンを押してください。それぞれの欄に数値が出てきます。数値が正ならエネルギー放出期、数値が負ならエネルギー充電期、数値が0に近ければ不安定な時期だそうです。

試しに使ってみましょう。今日があなたの20歳の誕生日だとすると、1年は365日、またあなたが経験した閏年は

20 / 4 = 5 回

ですから、今日はあなたが生まれて

365 * 20 + 5 = 7305 日目

です。これを上の欄に入力し計算ボタンを押すと、

という数値が出るはずです。

プログラムの中で身体の数値を計算する行には

EditDay->Text.ToDouble() * 2 * 3.141592 / 23

という部分がありますね。身体は23日周期なので23で割る理由は分かると思いますが、その前の「* 2 * 3.141592」にはどういう意味があるのでしょうか。

これは弧度法と呼ばれるもので、0°〜360°で角度を表す代わりに0〜2πを用いる方法です。360°が2πです。ラジアンとも呼ばれます。

さて、このように完成したプログラムですが、「生まれてから今日までの日数を計算するのが面倒だ」という欠点が残されています。時間に余裕がある人は、次の発展課題を考えてみましょう。

発展課題:生まれた年月日と現在の年月日を入力すると自動的に日数を求めてくれるように、プログラムを改良しなさい。(この課題は難しいので、実習指導員に助言を求めながら作るとよいでしょう。)

ヒント:1960年1月1日を1日目としたときに誕生日と今日は何日目になるのかを求めることができればよい。例えば、1978年9月10日生まれの人が1998年6月1日のバイオリズムを求めるとするなら、1960年1月1日から数えて1978年9月10日は6827日目、1998年6月1日は14031日目であるから、この人は14031-6827=7204日間生きていることになる。