「プログラミングアルゴリズム、および(ii)に基づくアルゴリズム」、「第二週の再帰」四則式の評価4132

https://www.cnblogs.com/xyqxyq/p/10211341.html

我々は再帰的解決できる問題では、我々は最初にすべての式の、すなわち、3つの部分に分かれていることができます。

(1)式:の項目、プラスまたはマイナス

(2):因子、乗算と除算

(3)要因:()式の数

これら3は、再帰的な関係を構成し、我々は表現の必要な値は、我々は最初の項目の値を求めていることを見ることができ、項目の要求値は、我々は最初の値の係数を求めて、係数の値が必要で、我々そのそれが構成するもので、初見です。

これは、発現させることにより、括弧と組み合わせることができ、また数で構成することができ、数が、我々はこの数のサイズを計算するときことが分かりました。

浮動小数点数は2つの部分に分割され、整数部の大きさを計算するために最初は、10で前に、最後ではなく、それの終わりと、1つを取る場合は、1つを取り、見になり続け、その後、その後、この1を追加します我々はcin.peek()関数は、我々は小数部分を計算するようになりました。この1つがある場合はこの1つは、あるものを見ることができ、および同様の前の、それぞれ10倍にそれを減らします。

>用語 - - >要因、常に再帰的な解決策式が、その後、私たちはそのプロセスを続行する前に、式の場合。

式の評価のために、我々は最初に、後があるかどうかを確認するために、第一項の値を計算し、そう我々は終了していない、計算することができます。時間後に行ったとき、私たちは文字の後ろに食べに行くされているので、再帰た後、我々はそれを片付けるために使用されます。

+使用を終了 - 同じプロセスである、があるかどうかを判断するために、最初のものを求める我々はアイテムを見つけたとき、それを食べたい(後)* /を、次の手順に、一般ケースです。

/ * 
再帰的な
四則式が評価さ
百回の訓練を:4132は
何のスペースを入力しない
* / 
書式#include <iostreamの> 
の#include <CStringの> 
の#include <cstdlib> 
書式#include <iomanip> // てSetPrecision()

使用して 、名前空間STD;
 ダブルfactor_value( );
 ダブルterm_value();
 ダブルexpression_value(); 

int型のmain()
{ 
    ダブル ANS = expression_value(); 
    COUT << 修正 <<てSetPrecision(2)ANS << << ENDL;
     戻り 0 ;
}

ダブル expression_value()// 用語追加マイナス
{
     // 有するべきでwhileループ、用語追加マイナス何度
     // (A + B + C + D)* B + C + D 
    二重結果= term_value()。

    ブール値より= ;
    一方、(より)
    { 
        チャー C = cin.peek()。
        もし(C == ' + ' || C == ' - ' 
        { 
            チャー OP = CIN。取得();
            二重値=term_value();
            もし(OP == ' + ' 
                結果 + = 値。
            他の
                結果 - = 値; 
        } 
        
        { 
            複数 = 
        } 
    } 
    戻り値の結果; 
} 

ダブル term_value()// 因子/ * 
{
     ダブル結果= factor_value()。
    しばらく//なぜここwhileループのですか?例:a * b *表C * dの+ a * b *表C 
    {
        チャー OP = cin.peek()。
        もし(OP == ' * ' || OP == ' / ' 
        { 
            CIN。取得();
            二重値= factor_value()。
            もし(OP == ' * ' 
                結果 * = 値。
            他の
                結果 / = 値; 
        } 
        他に
            ブレーク

    } 
    戻り値の結果; 

} 

ダブルfactor_value()
{ 
    二重結果= 0 チャー C = cin.peek()。
    もし(C == ' ' 
    { 
        。CIN を取得(); 
        結果 = expression_value(); 
        CIN。得る(); 
    } 
    
    { 
        一方(isdigit(c)参照)
        { 
            結果 =結果* 10 + C - ' 0 ' ; 
            CIN。 =取得(); 
            Ccin.peek(); 
        } 
        二重 TMP = 0 もし(C == ' ' 
        { 塩基 = 0.1 
            CIN。取得();
            チャー CH = cin.peek()。
            一方、(isdigit(CH))
            { 
                TMP =(CH- ' 0 ')* 基底 + TMP。
                塩基 = 0.1 * 基地; 
                CIN。
             
            取得(); 
                CH = cin.peek()。
            } 

        } 
        結果 + = TMP。
    } 
    戻り値の結果; 
}

 

おすすめ

転載: www.cnblogs.com/focus-z/p/11443202.html