ハチソン前
ガールフレンドは言った:「非常に難しいの高い数は、最近私を見ることは非常に難しい、あなたが私に私に贈り物を送った、あなたは私が何をしたいと思い、それについて私を幸せにします..」
私は何も感じていない、最後の家庭用品に電子機器に本から靴まで、長い時間のために考えた、と彼女は言った:「あなたは漢を送りたいと言う、私はそれを買うものを」
私は彼女が主張推測:「いいえ、あなたがする個人的にあなたに贈り物、そしてこのギフトを言わなければなりません。」
その後、私はあなたを助けることができる、「まあ、あなたは本当に私が何かを送信する場合:だから、私は真剣にアップし、携帯電話を拾う、淘宝網は、数分の買い物が、それでも欠点を出てくるものを考えることができなかった、そして最終的に方法はありません電卓それを書きます。」
記事のタイトルはただギミックで、私は記事の内容が乾燥していることを保証しますので、愛情の通信技術の学習者として、私たちは、地球にダウンする必要があります!
設計の原則
スタックフレーム構造によって中置演算式の入力は、後置出力への変換を達成し、その後、後置表現に計算結果を出力します。電卓の最終的なデザイン。
有効範囲:+ - %整数* /負の小数
デザインのアイデア
論理設計
- 2つのスタックの設立は、スタックはスタックとスタックノード
- 文字の配列を格納するスタックスタックは、文字要素は中置式を保存します。
- ポイントタイプ、中置式と各要素の演算を記憶された要素値の値を浮動倍精度を格納するためのスタックのノードアレイ。
- 以下の2つの関数の設計とそれぞれのスタックのポップ操作。
関数名 | パラメータ | 効果 |
---|---|---|
Mtf_function() | char * P1、CHAR *半ば、CHAR *最終 | 回転のための辞接尾辞 |
Caculate() | スタック* M、CHAR *最終 | Postfixの式の値の計算 |
Mtf_function()関数の設計
(スタックのスタック)
(1)オペランドが発生した場合、直接出力します。
(2)あなたは、オペレータが発生した場合は、我々は遭遇した左括弧がスタックに入れてスタックにそれを置くだろう。
あなたはそれがこれまでに左括弧に遭遇するまで、ポップアップオペレータの出力をスタック要素をポップ、その後、右括弧が発生した場合(3)。左括弧が唯一のポップアップ出力されていないことに注意してください。
(4)あなたが任意の他のそのような(「+」、「*」、「(」)などの演算子などを持っている場合は、優先度の低い要素(またはスタックが空になるまで、それは要素に遭遇するまで、スタックからポップされる)が発見次の。これらのポップの要素の後に、それがスタックにプッシュオペレータが発生します。それは顔だけに注意することが重要である「)」私たちはポップな状況は、「(」そう、私たちはポップアップしません。 " (。 "
(5)あなたが入力の終わりを読めば、その後、順番にすべての要素のスタックをポップ。
Caculate()関数の設計
(ノードのスタックスタック)
1)トラバーサル発現、遭遇したデジタル最初のスタックに配置
2)オペレータ次いで読み取る演算子「+」は、頂部要素と次の要素ポップアップは、対応する演算を実行し、計算結果をスタックに押し込まれます。
3)直接スタック上に配置される次の要素を読み出します。
4)「のような次の要素、読むために、」を頂部要素と次の要素をポップし、実行8 5は演算結果に応じた演算......スタックにプレスなど。最後に、値がスタックの一番上に存在する見つけます。
アルゴリズム小数点を処理します
- 原理:次いで、対応する重み10点の重みで割った10進数に変換する第一。= 0 0,10 J初期重量和のそれぞれの重みの小数値、文字列要素が0-9小数点か、場合に、小数点をシフトした後、和=和* 10 +対応する要素を決定するように、ループを作成します値、体重10 Jプラスワンの対応する重み、次の要素が0-9に属していないまで。
- 次のようなアルゴリズムがあります
負の符号を処理するための
位置は、負の符号は文字の配列または左ブラケット要素の裏面の最初の要素である現れます。回避マイナスに「 - 」、文字や左括弧の配列の最初の要素の要素によって決定され混乱して「 - 」の検索マイナス記号、および「M」に置き換えます。要素が「M」が出力されている場合場合は中置サフィックスをトランスフェクト「 - 。」、素子後の値は、反対番号後の動作に要素計算値(小数を含む)を「M」の接尾辞である場合。
メインプログラムのフローチャートと、各モジュールの呼び出し関係
物理設計
-
オープンメモリ連続を達成するために、ストレージアレイベース、C宣言は、転送後置インフィックスのために、文字の配列を含む文字スタックフレーム構造を定義します
-
対応するノードの意味
-
そして、スタック操作のうち
-
C文は、後置表現を計算するために、整数の配列を含む整数スタックフレーム構造を定義します。
-
対応するノードの意味
-
そして、スタック操作のうち
テスト
- テストケース
- テスト結果
ソース(コメント付き)
コードはC言語のバージョンで書かれている、時間がJavaのバージョンにフォローアップします
githubのコードのリンク