0
{
    // FIRST ARRAY
    int NumberOfXValues;
    double* FirstArray;
    NumberOfXValues = 0;
    FirstArray = new double[NumberOfXValues];
    // END FIRST ARRAY

    // SECOND ARRAY
    int NumberOfProbabilities;
    double* SecondArray;
    NumberOfProbabilities = 0;
    SecondArray = new double[NumberOfProbabilities];
    // END SECOND ARRAY

    // THIRD ARRAY
    int Product;
    double* ThirdArray;
    Product = 0;
    ThirdArray = new double[Product];
    // END THIRD ARRAY

    // OBTAINING THE NUMBER OF X VALUES
    cout << "Please input the number of \"x\" values we will be using: ";
    cin >> NumberOfXValues;
    // END OF OBTAINING THE NUMBER OF X VALUES

    // OBTAINING THE VALUES IN THE FIRST ARRAY
    int x;
    cout << "Please input the \"x\" values in order from least to greatest: " << endl;
    cout << endl;
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << "Enter number: ";
        cin >> FirstArray[x]; 
    }
    cout << endl;
    // END OF OBTAINING THE VALUES IN THE FIRST ARRAY

    // OBTAINING THE VALUES IN THE SECOND ARRAY
    cout << "Please input the probabilities corresponding to their \"x\" values: " << endl;
    cout << endl;
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << "Enter probability in decimal form: ";
        cin >> SecondArray[x];
    }
    cout << endl;
    // END OF OBTAINING THE VALUES IN THE SECOND ARRAY

    // MULTIPLYING THE FIRST TWO ARRAYS TO OBTAIN THE THIRD
    for (int x = 0; x < NumberOfXValues; x++)
    {
        ThirdArray[x] = FirstArray[x] * SecondArray[x];
    }
    // END OF MULTIPLYING THE FIRST TWO ARRAYS TO OBTAIN THE THIRD

    //TEST
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << ThirdArray[x];
        cout << endl;
    }
    //TEST
}

これらの Web サイトにアクセスするのはこれが初めてですが、これを修正するのに 1 時間以上かかりました。3番目の配列に3番目の値が表示されるまで、完全にスムーズに実行されます。いつも変な数字が出ます。

4

2 に答える 2

4

0問題は、配列を作成するときに、サイズに使用する変数が次のように設定されることです。

int NumberOfXValues;
double* FirstArray;
NumberOfXValues = 0;
FirstArray = new double[NumberOfXValues];

ここでFirstArrayは、要素0の配列を作成します。0

要素の数を取得した後、配列を作成する必要があります。

cout << "Please input the number of \"x\" values we will be using: ";
cin >> NumberOfXValues;
FirstArray = new double[NumberOfXValues];
于 2013-11-02T02:38:25.417 に答える
1

あなたが言うときnew Foo[NumItems]、その配列にはアイテムしかありませんNumItems。それ自体は成長しません。後でサイズを変更する場合は、適切なサイズの新しい配列を割り当てて、メンバーをコピーする必要があります。を使用して現在の割り当てを延長することで回避できる場合がありますrealloc

あなたの問題は2つあります:

  • サイズ 0 で配列を初期化していますが、これは意味がありません。必要なアイテムの数がわかったら、その数で配列を割り当てます。
  • アイテムを追加すると、配列が自然に大きくなると想定しています。

2 番目のケースでは、std::vector自動的に拡張して問題を回避する を使用する必要があります。

std::vector<double> firstArray(initialSize);
firstArray.push_back(firstItem);
firstArray.push_back(secondItem);
//...

現在のケースでは、配列に格納する必要があるアイテムの総数がわかるまで、配列の作成を延期することができます。

于 2013-11-02T02:40:48.717 に答える