web-dev-qa-db-ja.com

ベクトルc ++への入力の平均を求める

ユーザーが必要な数の数値を入力し、プログラムが数値の平均を返すプログラムを作成しようとしています。これまでのところ、プログラムは最後に入力された数値のみを出力します。

#include <vector>
#include <iostream>
#include <numeric>


using namespace std;

int main()
{  
    vector<float> v;
    int input;

    cout << " Please enter numbers you want to find the mean of:" <<endl;
    while (cin >> input);
    v.Push_back(input);

float average = accumulate( v.begin(), v.end(), 0.0/ v.size());
cout << "The average is" << average << endl;

return 0;  

}
5
alfiej12

最初にwhileの後にセミコロンを削除します

while (cin >> input);
                    ~~

第二に、あなたの数学は間違っています

std::accumulate の3番目の引数は、合計のinitial値です

代わりに:

float average = accumulate( v.begin(), v.end(), 0.0)/v.size(); 

また、コンテナデータタイプの要素shouldはコンテナタイプと一致します。つまり、float

float input ;を使用

26
P0W

コードにはかなりの数のバグがありますが、実際にデバッグしましたか?ここに作業バージョンがあります:

#include <vector>                                                               
#include <iostream>                                                             
#include <numeric>                                                              


using namespace std;                                                            

int main()                                                                      
{                                                                               
    vector<float> v;                                                            
    float input;                                                                

    cout << " Please enter numbers you want to find the mean of:" <<endl;       
    while (cin >> input)                                                        
        v.Push_back(input);                                                     

    float average = accumulate( v.begin(), v.end(), 0.0)/v.size();              
    cout << "The average is" << average << endl;                                

    return 0;                                                                   

}    
6
swang

_std::accumulate_ の3番目の引数はinitialの値なので、0.0 / v.size()から始めます(これは非常に小さい)、次にすべてのアイテムをベクターに追加します。

代わりに、ゼロの値を初期値として使用し、ベクトル内のすべての値の合計を計算した後、次にサイズで割ります

そして、他の人が指摘したように、最後の値をベクトルに追加するだけです。

Vector_name.size()を使用して、ベクターの要素数を取得できます。これが平均を計算するための私の試みです:

  #include <iostream>
  #include <vector>

   //function to compute average
   double compute_average(std::vector<int> &vi) {

     double sum = 0;

     // iterate over all elements
     for (int p:vi){

        std::cout << "p is " << p << std::endl;
        sum = sum + p;
     }

     return (sum/vi.size());
    }

    int main(){

        std::vector <int>vi =  {5,10};
        double val;

        val = compute_average(vi);

        std::cout << "avg is " << val << std::endl;
        return 0;   
    }
0
Sarvesh