#define PROG "e24bun (rev.9)" #define TITLE "電気: E24抵抗分圧比" #define BY " (C)2005 Midolikawa H. (やねのすずめ)" #define USAGE "使用法 : e24bun \n" #define SPEC "・一覧表を標準出力\n" \ " ■:E6 ★:E12 ◎:E24 *:E6-E6 \n" \ " 小数点は省略\n" /*********************************************** コンパイル(LSI-C): lcc e24bun.c ( -lintlib 不可 ) (2) %.4e -> %.3e に修正 (四捨五入の桁が異なる) (3) 出力形式を変更: 小数点以下4桁を 0. を省いて出力 (4) 計算範囲を拡大: 分圧比 0.05 - 0.95 の範囲 (5) E24値の出力形式: 1★2 ★12 12★ (1.2 12 120 のつもり) (6) E6目印 ×(7) E24値の出力形式を変更: 12★ ★12 1★2 (8) 再編 (リファクタリング) (9) (7)を元に戻す ***********************************************/ #include #include #include /*(4)*/ #define EI (e24[i]) /*(4)*/ #define EJ (e24[j]) /*============================== 外部変数 (4) 外部化 ==============================*/ int e24[] = { 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 75, 82, 91 }; /*============================== (8) E24値 編集・出力 ==============================*/ void put_e24 /* out: con */ (int kurai /* in: 位取りコード */ ,int i /* in: E24値コード */ ) { /*(8)*/ static char mark[] = /* E系列マーク (8) extern -> static 化 */ "■◎★◎■◎★◎■◎★◎■◎★◎■◎★◎■◎★◎"; switch(kurai) { /*(9)*/ case 0: /*(5)(7)*/ printf( " %u%.2s%u", EI/10, mark+i+i, EI%10 ); return; case 1: printf( " %.2s%u", mark+i+i, EI ); return; /*(9)*/ case 2: /*(5)(7)*/ printf( " %u%.2s", EI, mark+i+i ); return; } } /*============================== (8) 分圧比計算 ==============================*/ float hi /* out: 比率 (計算結果) */ (int kurai /* in: 位取りコード */ ,int i /* in: E24値コード */ ,int j /* in: E24値コード */ ) { switch(kurai) { case 0: return( ((float)EJ*10) / (EI+EJ*10) ); case 1: return( ((float)EJ) / (EI+EJ) ); case 2: return( ((float)EJ) / (EI*10+EJ) ); } } /*============================== 編集・出力 (主処理) (8) 再編 ==============================*/ void e24bun (int kurai /* in: 位取りコード */ /* (0:上桁, 1:同桁, 2:下桁) */ ) { /*(4)*/ register int i,j; /* ループカウンタ */ /* (4) register 化 */ /*(8)*/ char work[15+1]; /* 文字列編集用ワーク */ /* (8) extern -> auto 化 */ for (i=0; i<24; ++i) { for (j=0; j<24; ++j) { if (j==i) /*(8)*/ put_e24(kurai, i); else { /*(6)*/ printf("%.1s", "* "+( (i | j) & 3) ); /*(2)(3)(8)*/ sprintf( work, "%.4f", hi(kurai,i,j) ); /*(3)(6)*/ printf( "%.4s", work+2 ); } } printf("\n"); } /*(8)*/ printf("\n"); } /*============================== 説明表示 ==============================*/ void usage() { fprintf(stderr,"\n" PROG "\n" TITLE "\n" BY "\n\n" USAGE "\n" SPEC); } /*============================== メインル−チン ==============================*/ int main(int argc, char *argv[]) { /*説明表示*/ if (argv[1] != NULL) { usage(); exit(22); } /*主処理*/ /*(4)(8)*/ e24bun(0); /*(8)*/ e24bun(1); /*(4)(8)*/ e24bun(2); /*正常終了*/ exit(0); }