// おまじない std.stdio のモジュールを読み込む
import std.stdio;
// 一つ目の関数
// f(x) = 3x + 5
// この場合引数は一つで、real型の値をとります。
// xは仮引数になる変数です。
// return というのはそこに書かれた値を戻り値にするということ。
// return で返される値の型は、 real f( ... のあたりの、最初の realの部分で決定されます。
real f(real x)
{
// 戻り値は 3*x + 5 として計算された値
return 3*x + 5;
}
// 二つ目の関数
// 円の面積を求めます。
// この場合も引数がreal型の値一つ、戻り値はreal型になります。
real A(real r)
{
// 戻り値は 円の面積を計算した値
return 3.141592*r*r;
}
// いままでおまじないとして見ていましたが、このmainも関数です。
// 基本的には、プログラムで最も最初に呼ばなくても自動的に実行される関数です。
// 引数の型は、複数の文字列で、戻り値はint型となっています。
int main(char[][] arg)
{
// 円の半径は、3x+5の計算をした値とする。
real CircleRadius = f(3);
// 円の面積は円の半径から求める。
real CircleArea = A( CircleRadius );
// 面積を計算する。
writef(CircleArea);
// プログラムの戻り値。 0 で正常終了します。
// 異常終了のときには-1や1などを返すのが一般的です。
return 0;
}
615.752
// writefやwritefln、readln関数を使用するためにインポートするのは
// std.stdio というモジュール
import std.stdio;
// sinやcos、平方根を求めるためのsqrtなどの数学的な関数を
// 使用するためにはこのモジュールをインポートする
import std.math;
// 文字列から数値に変換する場合はこのモジュールをインポート
// たとえば、文字列から整数に変換するのはtoInt関数
// 文字列から実数に変換するのはtoReal関数
import std.conv;
// 数値から文字列に変換したり、文字列に関する操作を
// 行う場合にはこのモジュールをインポート
// たとえば 行末文字を削るchomp関数や、
// 特定の文字あるいは文字列を見つけるfind関数など
// が使えるようになります。
import std.string;
// 2変数関数の定義。
// この関数は、数学のグラフで、原点から (x, y) の点
// までの距離を求めます
real DistanceFromOrigin(real x, real y)
{
// 三平方の定理を使います√(x^2 + y^2)
// 平方根を求める関数は、 std.math モジュールの中の sqrt関数
return sqrt( x*x + y*y );
}
// 4変数関数の定義
// この関数は点から点までの距離を求めます
real DistanceFromPointToPoint(real x1, real y1, real x2, real y2)
{
// これもやっぱり三平方の定理
return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
}
// main関数
int main(char[][] arg)
{
// writefln や writef は、std.stdioをインポートすることで使うことができます。
writefln("原点と点(10,10)からの距離を求めます。");
writef("まずはx座標を入力 : ");
// 入力を求めるのに、今までに toInt( chomp( readln() ) )
// のようなことをしていましたが、まさにこれは合成関数ですね。
// readln() で読み込んだ文字列を、
// chomp() で改行コードを削り取り、
// toInt() で実数に変換するという流れを合成関数によって行っています。
// もっとも、プログラミングでは特に合成関数と意識するようなことはありません。
// "(" と ")" に囲まれた部分は先に評価(=実行)されるので、
// より深い()に囲まれた部分から先に関数が処理されているだけなのです。
// 今回は整数ではなく、実数なのでtoReal関数を使います
real x = toReal( chomp( readln() ) );
writef("つぎにy座標を入力 : ");
real y = toReal( chomp( readln() ) );
// 原点からの距離を表示する
writefln( "原点からの距離は : %f", DistanceFromOrigin(x, y) );
// 点(10, 10)からの距離を表示する
writefln( "点(10, 10)からの距離は : %f", DistanceFromPointToPoint(10, 10, x, y) );
// 正常終了
return 0;
}
原点と点(10,10)からの距離を求めます。
まずはx座標を入力 : 50
つぎにy座標を入力 : 10
原点からの距離は : 50.990195
点(10, 10)からの距離は : 40.000000
int main(char[][] args)
{
writef("整数を入力 : ");
int a = InputInt();
writef("入力された整数は");
writefln(a);
writef("実数を入力 : ");
real b = InputReal();
writef("入力された実数は");
writefln(b);
return 0;
}
整数を入力 : 5
入力された整数は5
実数を入力 : 1.6
入力された実数は1.6