|
|
 |
課題
C
逆ポーランド記法による電卓 |
|
1.プログラムの仕様
配列によるスタックを利用して逆ポーランド記法による簡単な電卓のプログラムを作成して下さい。
プロジェクト名を dentaku とし、ソースファイル名は dentaku.c とすること。
- 計算する数値の最大値は100個とすること。
- 計算する数値は配列に格納し、スタックとして設定/取り出しを行う。
- スタックの設定/取り出し部分は関数として作成すること。(push/pop)
- 数式を入力し、リターンキー入力後に計算の答えを表示する。(繰り返し行い、Ctrl+Zで終了)
- 数式は逆ポーランド記法で記述すること。
- 数式の順序に従い計算を行い、計算は整数値の四則演算のみとする。( + - * / )
- 計算の答えは実数として小数点2位まで表示すること。
- 数値、四則演算子、空白、タブ以外の入力は「数値を入力して下さい!」を表示する。
- 数値がスタック領域を超えた場合は「スタック・オーバフロー!」を表示する。
- スタック領域がないのにリターンキー入力を押した場合は「スタックに値はありません!」を表示する。
|
2.関数の仕様
スタックの設定/取り出し部分の関数の仕様を以下に示します。
| No. |
関数名 |
内容 |
引数 |
戻り値 |
エラー対処 |
| 1 |
push |
スタックの設定 |
設定する値 (double) |
なし (void) |
「スタック・オーバフロー」表示 |
| 2 |
pop |
スタックの取り出し |
なし (void) |
取り出した値 (double) |
「スタックに値はありません!」表示 |
|
3.結果のサンプル
逆ポーランド記法による入力で電卓計算を行った結果サンプルです。
→ dentaku.c (2KB)
ここでは次のような数値でテストしています。
| No. |
通常の数式 |
逆ポーランド記法の数式 |
答え |
| 1 |
(3+2)*(15/3) |
3 2+15 3/* |
25.00 |
| 2 |
(3*4-6)*8 |
3 4*6-8* |
48.00 |
| 3 |
15-8*7/2 |
15 8 7* 2/- |
-13.00 |
| 4 |
1+2+3+4+5 |
1 2+3+4+5+ |
15.00 |
| 5 |
10/3-5/2 |
10 3/5 2/- |
0.83 |
| 6 |
-5+2 |
0 5-2+ |
-3.00 |
| 7 |
5+a |
5 a+ |
数値を入力して下さい! |
| 8 |
5+3 |
5+3 (誤り) |
スタックに値はありません! |
注)これ以外は自分でテスト仕様書を作り、十分なテストして下さい。

注)エラー時に処理を中止する場合は exit関数(stdlib.h) を使用して下さい。
|
|
|