0

「for」ループで関数 (f(x) = x * x – 12 * x + 40) の整数の間隔で値を計算する宿題に取り組んでいます。最小値を見つける必要があります。これで問題ありませんが、値が最小だったインデックス番号も保持する必要があります。現時点では、別のループで関数をもう一度繰り返しますが、これは非常に面倒です。また、x を導出し、既知の最小値を使用して答えを計算することもできますが、導出はそれほど単純ではないため、これも奇妙です。何かヒントはありますか?ありがとう。

#include <iostream>
#include "limits.h"
using namespace std;

int main ()
{
    int lBound, uBound, y, min;

    cout << "Give the lower and the upper bounds of integer numbers: " << endl;
    cin >> lBound >> uBound;        

    min=INT_MAX;
    int x = lBound;
    for (int i = x; i <=uBound; i ++) {
        y = i * i - 12 * i + 40;
        cout << x << " " << y << endl;
        if (y<min) {
            min=y;
        }
        x++;            
    }
    for (int i = lBound; i <= uBound; i++) {
        y = lBound * lBound - 12 * lBound + 40;
        if (y==min) {
            y = lBound;
            i=uBound; // terminates the loop
        }
        lBound++;
    }               
    cout << "smallest value of the function is " << min << " for x = " <<  y << endl;                
    return 0;
}
4

2 に答える 2

3

ここにヒントがあります: プログラムに「何かを保持する」必要があるときはいつでも、それは変数に格納する必要があることを意味します。その変数がローカル、グローバル、または渡されるかどうかは、それを保持する必要がある期間によって異なります。これを変数の「スコープ」と呼びます。変数のスコープを最小限に抑えることは良い習慣であると考えられているため、ガイドラインはグローバルを思いとどまらせています。

于 2012-06-03T15:13:49.750 に答える
1
        i=uBound; // terminates the loop

これはあまり良いコーディング方法ではありません。ループを終了するには、 のようなフロー制御構造を使用する必要がありますbreak。この場合にそうすると、最小要素のインデックスが保持されます。

編集:iループを存続させたい場合は、外側で宣言するだけです。ウィット:

変化する

for (int i = lBound; i <= uBound; i++) {

int i; // variable exists outside loop
for (i = lBound; i <= uBound; i++) {

さらに、参考までに、データ型の制限を表す潜在的な問題を回避するために、通常、ループ境界は半分開いた間隔として指定されます。これは通常、の代わりに を使用することを意味します。lbounduboundint<<=

代数のクラスなのか CS のクラスなのかはっきりしません…</p>

于 2012-06-03T15:14:21.623 に答える