/*****************************************************************************/ /* */ /* ジョブ名称 : n進計算機(オリジナルプログラム) */ /* */ /* 機能概要 : n進数の四則計算をする(モジュール分割) */ /* */ /* : */ /* */ /* 作成者 : 恒川 昭一(カーネルキャリアスクール) */ /* */ /* バージョン番号 01.20 日付 2005/06 備考 コメント削除版 */ /* */ /*****************************************************************************/ #include int adicinp(void); int numinp(int ntype); int opeinp(void); /* ----- 滅入ん ----- */ void main() { int ntype; int num1; int op; int num2; int ans; printf("何進数で計算しますか? (2 進数〜 16 進数):"); if ((ntype = adicinp()) == -1) { printf("Error!!\n"); return; } printf("1番目の数値:"); if ((num1 = numinp(ntype)) == -1) { printf("Error!!\n"); return; } printf("演算子は? (+, -, *, /):"); if ((op = opeinp()) == -1) { printf("Error!!\n"); return; } printf("2番目の数値:"); if ((num2 = numinp(ntype)) == -1) { printf("Error!!\n"); return; } switch (op) { case '+': ans = num1 + num2; break; case '-': ans = num1 - num2; break; case '*': ans = num1 * num2; break; case '/': if (num2 == 0) { printf("\nCan't divide by 0\n"); return; } ans = num1 / num2; } printf("演算結果 (10 進数): %d\n", ans); } /* ----- 関数定義 ----- */ int adicinp(void) { int ntype = 0; int ch; while ((ch = getchar()) != '\n') { if (ch >= '0' && ch <= '9') { ntype = ntype * 10 + ch - '0'; } else { return -1; } } if (ntype < 2 || ntype > 16) { return -1; } return ntype; } int numinp(int ntype) { int num = 0; int ch; if ((ch = getchar()) == '\n') { return -1; } while (ch != '\n') { if (ntype <= 10) { if (ch >= '0' && ch <= '9' - (10 - ntype)) { num = num * ntype + ch - '0'; } else { return -1; } } else { if (ch >= '0' && ch <= '9') { num = num * ntype + ch - '0'; } else { if (ch >= 'a' && ch <= 'f' - (16 - ntype)) { num = num * ntype + ch - 'a' + 10; } else { return -1; } } } ch = getchar(); } return num; } int opeinp(void) { int op; op = getchar(); if (op != '+' && op != '-' && op != '*' && op !='/') { printf("Operator incorrect!\n"); return -1; } if (getchar() != '\n') { printf("Operator incorrect!\n"); return -1; } return op; }