【解決方法】C++ で関数電卓をコーディングする方法


こんにちは

個人的なプロジェクトの一環として、コンソール ベースの関数電卓を作成する必要があります。

コマンドごとに大量の数値を加算、減算、乗算、および除算できる必要があり (例: 2+2+2+2+2+2*9/7*sin 45- 88.277)、数値を操作できる必要があります。 BIDMASを正しく使用してください。

三角関数、対数、整数の mod を計算し、階乗を計算し、指数と根を n 次まで計算できる必要があります。

これを行うにはどうすればよいですか?また、コードは何行かかりますか?

現時点では、GUI を使用したくありません。

ソースコードはすべて公開され、プログラム全体が無料になります。

私は何年にもわたって周りを見回しましたが、見つけることができるのは2つの数字しか追加できない電卓だけです

よろしく

解決策 5

これは主に解析タスクであり、C++ の初心者にはあまり適していません。
構文解析の専門家であれば、数時間以内にこの問題を解決できます。まったくの初心者であれば、何らかの方法で解決するのに数か月かかることもあります。
個人的な興味や趣味に応じて、別のトピックを選択します。
また、今日 C++ が役立つ分野についても考え、それぞれのトピックを選択してください。

C++ でのパーサー タスクを主張する場合は、flex/bison を使用して学習することができます。
– tokeinzing (トークンの定義)
– 解析 (プロダクションの定義)
– シンボル テーブル (型システム、変数/演算子/関数の検索、データの保存と取得、サポートされている操作、操作の実行)
– アクション (解析されたプロダクションのアクションと、スタックなどによって値を渡す方法を定義します)

コンパイラの構築に関する本を購入する必要があるかもしれません。

幸運を。

そして私

解決策 2

簡単なことではなく、思ったよりも多くのコード行が必要になります。

入力文字列を解析して記号と数字を検索し、三角関数を微分し、スペルをチェックし (おそらくエラーや自動修正を行う)、必要に応じて () を追加します (つまり、”*” または ” https://www.codeproject.com/” または数字の後に文字 “2sin 45” を入力し、前後に検索して操作の優先順位を設定します) など…そして、それだけです。入力を読み取ります。

次に、優先順位に従ってそれぞれの操作を呼び出し、例外 (0 によるダイビング、​​虚数根など) を処理します。

結論としては、一度に説明するにはあまりにも広いテーマです。

コーディングを開始し、より具体的な問題が発生したときに戻ってきます。質問を特定の問題に限定すると、より良い回答とより有用なヘルプが得られます。

頑張ってコーディングを楽しんでください:)

解決策 3

C++ (または C++/CLI との混合モード) で実行する場合は、boost を使用することもできます。

http://www.boost.org/doc/libs/1_49_0/libs/spirit/doc/html/index.html[^]

コードの行数については、それをどのように行うかによって大きく異なります…

解決策 8

#include <iostream> 
#include <stdlib.h> 
#include <conio.h> 

using namespace std;

int main() { 

    int operation, numCount = 0;
    float result, nums[100];

    bool done = false; 
    while(!done) { 

        cout << "Enter an operation (+ (1) - (2) * (3) / (4)) or press Alt+F+4 to quit: "; 
        operation = getch();

        if(operation == 6) { 
            done = true; 
        } 
        else if (operation < 49 || operation > 52) { 
            cout << "Invalid operation!\n"; 
        } 
        else { 
            cout << "Enter numbers (press \"=\" to calculate): \n";

            char key = getch(); 

            while(key != '=') { 

                if((key >= 48 && key <= 57) || key == 46) { 
                    if(numCount < 100) { 
                        if(key == 46) { 
                            if(nums[numCount - 1] == int(nums[numCount - 1])) { 
                                cin >> nums[numCount]; 
                                key = getch(); 
                                numCount++;
                                continue;
                            } else { 
                                cout << "Invalid number!\n";
                                cin.ignore(1000000, '\n'); 
                                key = getch(); 
                                continue; 
                            } 
                        } 
                        cin.putback(key); 
                        if(!(cin >> nums[numCount])) { 
                            cin.clear(); 
                            cin.ignore(1000000, '\n'); 
                        } else { 
                            numCount++; 
                        } 

                    } else { 
                        cout << "Max limit reached!";
                        break;
                    } 
                } 

                key = getch(); 
            }

            switch (operation) { 
                case 1: 
                    result = 0;             
                    for(int i = 0; i < numCount; i++) { 
                        result += nums[i];
                    }
                    break;
                case 2:
                    result = nums[0];
                    for(int i = 1; i < numCount; i++) { 
                        result -= nums[i];
                    }
                    break;
                case 3: 
                    result = 1; 
                    for(int i = 0; i < numCount; i++) { 
                        result *= nums[i];
                    }
                    break; 
                case 4:
                    result = nums[0];
                    for(int i = 1; i < numCount; i++) { 
                        if(nums[i] == 0) { 
                            cout << "Cannot divide by zero.\n";
                            break;
                        } 
                        result /= nums[i];
                    }
                    break; 
            } 

            if(operation >= 1 && operation <= 4) 
                cout << "Result: " << result << "\n"; 
        }

        numCount = 0;
    } 

    return 0;
}

解決策 1

それについて具体的なことは何もありません。コードを取得するには、それを設計、開発、およびデバッグする必要があります。 何年にもわたって見回す代わりに。 何について質問しますか? あなたがソフトウェア開発者でない場合、このフォーラムはあなた向けではありませんが、そうである場合は、作業を開始してください。
何行のコードが必要になるかは誰にもわかりません。 それらの行をどのように数えますか? とにかく、これはあなたのコードです。 あなたのスキルとスタイルを誰が知っていますか?

私も興味があります: なぜ電卓が必要なのですか? 物事を計算する方法はたくさんあります。

特定の懸念がある場合は、質問してください。喜んでお手伝いさせていただきます。

-SA

コメント

タイトルとURLをコピーしました