<<前 [TOP] 次>>
Visual Studioで新規プロジェクトを作り、以下のcppファイルを作成して下さい。
【Kouzoutai5.cpp】
#include <iostream> struct Point { float x; float y; }; struct Triangle { struct Point a, b, c; }; struct Triangle tri = { {1.0, 1.0}, {5.0, 3.0}, {4.0, 2.0}}; int main() { std::cout << "三角形の頂点" << std::endl; std::cout << "(" << tri.a.x << "," << tri.a.y << ")" << std::endl; std::cout << "(" << tri.b.x << "," << tri.b.y << ")" << std::endl; std::cout << "(" << tri.c.x << "," << tri.c.y << ")" << std::endl; }
平面上の点を表す構造体Point を用いて、三角形の3つの頂点座標をメンバーに持つ構造体Triangleを以下のように定義しました。
struct Point { float x; float y; }; struct Triangle { struct Point a, b, c; };
この定義を用いて構造体Triangle型の変数triを宣言し、3頂点が(1.0,1.0),(5.0,3.0), 4.0,2.0)になるように初期化して頂点座標を出力するプログラムです。
このように構造体Triangleのメンバー a, b, c のメンバー x, y にアクセスするには次のようにします。
tri.a.x; tri.b.y; tri.c.x;
構造体が構造体を含む場合に初期化する方法の例です。
例 struct Point { int x; int y; }; struct Triangle { struct Point t1, t2, t3; }; struct Trianlge tri = { {0, 0}, {1, 1}, {2, 2} };
struct triangle型の構造体変数aはstruct Point型の構造体メンバーt1, t2, t3を含み、struct Point型は整数のメンバーx, yを含むので、構造体変数triは6個の整数を含んでいることになります。
従ってこの例の最後の行のように、struct Triangle型の変数triの3つのメンバーを{0, 0}と{1, 1}と{2, 2}で初期化しています。
実行結果です。
Visual Studioで新規プロジェクトを作り、以下のcppファイルを作成して下さい。
【Kouzoutai6.cpp】
#include <iostream> struct Point { float x; float y; }; struct Triangle { struct Point a, b, c; }; struct Triangle tri = { {1.0, 1.0}, {5.0, 3.0}, {4.0, 2.0}}; int main() { std::cout << "三角形の頂点" << std::endl; std::cout << "(" << tri.a.x << "," << tri.a.y << ")" << std::endl; std::cout << "(" << tri.b.x << "," << tri.b.y << ")" << std::endl; std::cout << "(" << tri.c.x << "," << tri.c.y << ")" << std::endl; float s; if ((tri.c.x - tri.a.x)*(tri.b.y - tri.a.y) > (tri.b.x - tri.a.x)*(tri.c.y - tri.a.y)) { s = ((tri.c.x - tri.a.x)*(tri.b.y - tri.a.y) - (tri.b.x - tri.a.x)*(tri.c.y - tri.a.y))/2; } else if ((tri.c.x - tri.a.x)*(tri.b.y - tri.a.y) < (tri.b.x - tri.a.x)*(tri.c.y - tri.a.y)) { s = ((tri.b.x - tri.a.x)*(tri.c.y - tri.a.y) - (tri.c.x - tri.a.x)*(tri.b.y - tri.a.y))/2; } std::cout << "三角形の面積 S =" << s << std::endl; }
三角形の面積を計算するプログラムです。
三角形の面積Sは3つの頂点の座標を(x1, y1)、(x2, y2)、(x3, y3)とした場合次の式で計算できます。
S=|(x3 - x1)(y2 - y1) - (x2 - x1)(y3 - y1)| ÷2
上の式では面積が常に正になるように絶対値の記号「||」を用いていますが、サンプルプログラム「Kouzoutai6.cpp」ではif文を使っています。
実行結果です。
Visual Studioで新規プロジェクトを作り、以下のcppファイルを作成して下さい。
【Kouzoutai7.cpp】
#include <iostream> struct Point { float x; float y; }; struct Triangle { struct Point a, b, c; }; float menseki (struct Triangle *t); /* 関数の宣言 */ int main() { struct Triangle tri = { {1.0, 1.0}, {5.0, 3.0}, {4.0, 2.0}}; float s; s = menseki( &tri ); std::cout << "三角形の頂点" << std::endl; std::cout << "(" << tri.a.x << "," << tri.a.y << ")" << std::endl; std::cout << "(" << tri.b.x << "," << tri.b.y << ")" << std::endl; std::cout << "(" << tri.c.x << "," << tri.c.y << ")" << std::endl; std::cout << "三角形の面積 S =" << s << std::endl; } float menseki (struct Triangle *t) { float s; if ((t->c.x - t->a.x)*(t->b.y - t->a.y) > (t->b.x - t->a.x)*(t->c.y - t->a.y)) { s = ((t->c.x - t->a.x)*(t->b.y - t->a.y) - (t->b.x - t->a.x)*(t->c.y - t->a.y))/2; } else if ((t->c.x - t->a.x)*(t->b.y - t->a.y) < (t->b.x - t->a.x)*(t->c.y - t->a.y)) { s = ((t->b.x - t->a.x)*(t->c.y - t->a.y) - (t->c.x - t->a.x)*(t->b.y - t->a.y))/2; } return s; }
[Kouzoutai6.cpp]と処理は同じですが面積の計算部分を関数に分け、関数の引数は構造体Triangleへのポインタとしました。
関数の返値は三角形の面積です。
実行結果は[Kouzoutai6.cpp]と同じです。
↓↓クリックして頂けると励みになります。