-1

C++ を使用してユーザーが cin を使用して値を入力する状況を解決し、フォーマットが与えられた場合に cin の値を取得する方法をコンピューターに解決させる方法を見つけようとして立ち往生しています。超高速の例を以下に示します..はい、多くのコードが欠落していることは知っています.しかし、概念はそこにあります..

int x;
int y;
int w;

int x = 30 < w < 50;
int y = 60 < w < 90;

cin >> input;

x + y = input;

cout << x;
cout << y;

当然ですが、 x + y は右辺値にはなりません。したがって、x + y = 入力と書くことはできません..では、x + y = 入力をどのように解決しますか? さらに、x と y がリストされた数値の間にあることを望みます。これにより、これらの入力間の数値が制限されます。しかし、実際のコーディングでは、関数を使用してこれを行いました。

学校はもう始まったの?いいえ、宿題ではありません。自分で C++ を教えています.. – Sean Holt 1 分前編集

xとyが関数で指定された値の間にある場合、コンピューターに入力値のx / yを解決させる方法を理解しようとしているだけではありません

4

4 に答える 4

2

C++ が方程式を解いてくれると思っているようです。それはしません。C++ は命令型スタイルの言語であり、何をすべきかを正確に伝えるという概念に基づいています。

アルゴリズムを作成できるように、x と y を解く方法を理解する必要があります。このアルゴリズムは、プログラムを作成するためのものです。

ある意味で必要なものを記述し、コンパイラまたはランタイムにそれを取得する方法を理解させることができる他の言語が存在します。C++ はその 1 つではありません。

特定の問題を解決するさまざまな方法は、方程式系を設定してそれを解決することです。または、ブルート フォース アプローチを実行して、x と y の値を繰り返し処理し、一致する値を見つけます。

于 2012-08-25T08:49:52.673 に答える
1

ここに「数学的」問題があるようです。方程式によって制約されたいくつかの値であり、「コンピューター」に制約 (方程式) に適合するすべての可能な値を見つけてもらいたいと考えています。私は正しいですか?

一部のコンピューター プログラムは確かにそれを行うことができますが、C++ 言語はこの目的のために設計されていません。C++ の役割は、「この値をメモリに格納する」または「これら 2 つの数値を加算する」など、プロセッサに命令を与える方法を提供することです。しかし、「この数学の問題を解け」とは言えません。

必要なのは、方程式ソルバーです。しかし、私はどれにも精通していません。Matlab や Mathematica などのツールがあります。しかし、私は彼らが自由だとは思いません。

于 2012-08-25T08:51:07.743 に答える
0

数学の問題をアルゴリズム的に解決したい場合は、擬似コードで力ずくのアイデアを次に示します。

Input a number.
for each value x between 30 and 50
  for each value y between 60 and 90
    if x+y equals the number
      print x and y

これで、優れた本またはチュートリアルを利用して、C++ でコードを作成できます。教材でforandキーワード (反復と選択のアルゴリズム概念) を探します。if楽しむ!

于 2012-08-25T09:36:44.160 に答える
0

このケースは、区間演算によって自明に解決できます。「2 つの間隔制約付き変数の和の問題」を解決する C++ コードを以下に示します。

int min_x = 30, max_x = 50;
int min_y = 60, max_y = 90;

// solutions exist in this interval
int min_z = min_x + min_y, max_z = max_x + max_y;

cin >> input;

// solutions possible?
if (input >= min_z && input <= max_z)
{
    // determine solution interval for x (y is dependent)
    cout
    << "Solution:\n"
    << "x in [" << min(max(  input - max_y  , min_x),max_x)
    << ";"      << min(max(  input - min_y  , min_x),max_x) << "], "
    << "y = "   << input << " - x" << endl;
}
else
{
    cout << "No solution." << endl;
}

コンピューターは「基本的に愚か」であり、賢いことをするのはソフトウェアです。C++ のような汎用プログラミング言語を使用するには、ベア コンピューターの単純な算術手段に基づいて問題を正確に解決する方法について、ユーザー (または少なくとも最終的に使用するライブラリ) が非常に具体的である必要があります。

プログラミング言語は魔法のように何かを行うわけではありませんが、方程式系などの多くの数学的な標準問題を解決するアルゴリズムが存在します。Numerical Recipes in C++ では、さまざまなアルゴリズムとその C++ 実装について説明しています。

于 2012-08-31T07:31:36.077 に答える