以下のプログラムは、第2節のプログラム例を 関数と置き換えを使って書き直したものです。 これにより、関連する処理をひとつにまとめて見やすく 考えやすくし、また後からパラメータをいろいろといじって 変更してみることが非常に楽になっています。
-----------------------
1: /* "ex7.c" --- 単振動のグラフを表示する */
2:
3: #include <stdio.h>
4: #include <math.h>
5: #include <Xtc.h>
6:
7: #define PAI 3.14159 /* 置き換えの定義 */
8: #define G 9.80
9: #define RANGE 0.2 /* (変更を容易にする置き換え) */
10: #define ORIGIN_X 120
11: #define ORIGIN_Y 200
12: #define LENGTH 0.5
13: #define MAG_Y 150
14: #define Radian(x) ( x * PAI / 180.0 ) /* マクロ定義 */
15: /* (度→ラジアンへの変換) */
16:
17: void syokika(void)
18: {
19: initgraph(); /* グラフィックス環境の初期化 */
20:
21: setcolor( WHITE ); /* 座標軸の表示色設定 */
22: line( 100, ORIGIN_Y, 540, ORIGIN_Y ); /* x軸の描画 */
23: line( ORIGIN_X, 50, ORIGIN_X, 350 ); /* y軸の描画 */
24: outtextxy( ORIGIN_X - 20, ORIGIN_Y + 20, "0"); /* 原点表示 */
25:
26: return;
27: }
28:
29: double huriko( double x, double l )
30: {
31: return( RANGE * sin( Radian( sqrt( G / l ) * x ) ) );
32: }
33:
34: void main(void)
35: {
36: int degree;
37: int x,y;
38: double radian;
39:
40: syokika(); /* ウィンドウへグラフを表示する準備処理 */
41:
42: for( degree = 0; degree < 360; degree++ ){
43: x = ORIGIN_X + degree;
44: y = ORIGIN_Y + MAG_Y * huriko( (double)degree, LENGTH );
45: putpixel( x, y, GREEN ); /* グラフ(点)の描画 */
46: }
47:
48: xtcmainloop( 3 ); /* 終了入力待ち */
49: closegraph();
50: }
-----------------------