以下のプログラムは、第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: }-----------------------