1

私はC++プログラミングの初心者であり、現在プログラミングの入門としてクラスを受講しています。私は現在、10個の整数を入力し、数字が昇順であるかどうかを判断する宿題プロジェクトに取り組んでいます。

私が抱えている問題は、提供された入力に関係なく、プログラムは常にアセンションがあると見なしているということです。問題はIsInOrder()関数のforループにあると思いましたが、正確に機能しない理由や修正方法がわかりません。

もう1つの潜在的な問題は、すべての値のアセンションを決定する方法です。たとえば、コードが機能した場合、[1、2、3、4、5、1、2、3、4、5]はアセンションとしてカウントされると思いますが、そうではありません。

オンラインで検索してみたところ、同様の課題の質問がいくつか見つかりましたが、これらの問題に対する答えはありません。

これが私がこれまでに持っているコードです:

#include <iostream>

using namespace std;

bool IsInOrder (int numHold[]);

//This portion takes the numeral inputs and outputs the answer
int main()

{
int numHold[10];

bool status;

cout << "Welcome to the Ascension detector 5000" << endl;
cout << "This program will detect whether the numbers you input are in ascending   
order" << endl;
cout << "Isn't that neat?" << endl <<endl;

for (int i=0; i < 10;i++)
{
    cout << "Please enter a number: ";
    cin >> numHold[i];
}
cout << endl;

for(int i=0;i < 10;i++)
{
    cout << numHold[i] << endl;
}

status = IsInOrder(numHold);

if (status == true)
{
    cout << "The numbers are in ascending order" << endl;
}
else
{
     cout << "The numbers are not in ascending order" << endl;
}



system("PAUSE");
return 0;
}

//This function determines whether the inputs are in ascending order

 bool IsInOrder (int numHold[])
{
for (int i = 0; i < 10; i++)
{
        if (numHold[i] < numHold [i++])
        {
            return false;
        }
        else
        {
            return true;
        }
}
}  

事前に助けに感謝し、コードが適切にフォーマットされていない場合は申し訳ありませんが、コードはコードサンプルにコピー/貼り付けされていませんでした。

4

4 に答える 4

2

IsInOrder関数で、forループを実行し、elsei<9部分を削除しreturn trueて、ループの外側に配置しforます。

なぜreturn trueforループの外にあるのですか?

true毎回ではなく、すべての要素をチェックしたときにのみ戻るためです。あなたがそれを得るあなたのコードを見てください。

于 2012-12-08T08:04:06.880 に答える
0

ルーチンIsInOrderは配列内のすべての値をチェックするのではなく、2つの異なる数値に遭遇した直後に戻ります。

また、配列全体を実行する場合(つまり、すべての数値が同じ場合)、終了するまでに10個ではなく11個の要素をチェックし、何も返しません。

于 2012-12-08T07:42:58.100 に答える
0
bool IsInOrder(int numHold[])
{
    bool inOrder = true;
    for (int i = 0; i < 9; i++)
    {
        if (numHold[i] > numHold[i+1])
        {
            inOrder = false;
            break;
        }
    }
    return inOrder;
}
于 2012-12-08T07:46:06.527 に答える
0

まず、truefalseブランチは間違った方法です。

次に(true/falseが修正されたと仮定して)、2つの数字が順番に表示されるとすぐに、シーケンス全体が昇順であると結論付けます。それは正しくありません。すべてのペアreturn trueを調べるまではできません。

最後に、ループの終了条件が1つずれています。

bool IsInOrder(int numHold[]) {
    for (int i = 0; i < 9; i++) {
        if (numHold[i] >= numHold[i+1]) {
            return false;
        }
    }
    return true;
}
于 2012-12-08T09:02:46.330 に答える