2016-11-11 30 views
1

ため私は(ユーザによって選択された)値の任意の数の算術平均演習:サイクルとアレイ

を計算することを可能にするプログラムを記述する必要がありますそれを出力:

番号:34

数:36

数:44

番号://と私は

を押して入力を停止することを選択しますの

//出力:

これは、3つの数字を挿入し、avarageは次のとおりです。もちろん38

私は私が何をやったかに投稿するのを忘れました:

for (int x = 0; x < 50; x++){ 
cout << "Number: "; 
cin >> number[x]; 
cout << "You have inserted the " << x << " element of the array;" << endl; 

    sum += number[x]; 
    avarage = sum/number[x]; 
    nEelementi = number[x];} 

ので、私は実行しますいくつかの数字を入力し、ctrl + dのようなものを押すか、コードに何かを追加しようとしています。不条理なavarageとsumを印刷します。

私はこれを行うために配列を必要としないことを知っていますが、エクササイズから必要です。また、ループと配列のforまたはwhileを使用するためのエクササイズのみのリクエストも必要です。 私が必要とするのは、入力を止め、私が書いたものの合計と平均を計算する方法です。

edit1。 私には分かりやすいので、(x = 0; x < n、x ++)と書いてみましたが、結果は0なのでこれを無限に書いたと思います。 (無限に分割された数の限界は0なので)私は怒って始めました。 今はループ中に使いやすいと思っています!書いた

#include <iostream> 
using namespace std; 

int main() { 

    int num[50]; 
    double sum = 0; 
    double average = 0; 
    int cont; 
    int end = 0; 

while (cont < 50) { 
cout << "num: "; 
cin >> num[cont]; 
sum += num[cont]; 
cont++; 
cout << "Want to continue 0 = sì, 1 = no"; 
cin >> end; 

    if (end == 1) {break;} 
} 

    average = sum/cont; 

    cout << "You have insert " << cont << " elements" << endl; 
    cout << "LThe sum is: " << sum << endl; 
    cout << "The avarage is: " << average << endl; 

    return 0; 
    } 

しかし、まだ動作しません。私の教授は、ctrl + dを押して入力番号を止めることができるはずだと言っていますので、私はうまくやっていません。 ご迷惑をおかけして申し訳ありませんが、コードを翻訳する必要があります。

edit2

#include <iostream> 


int main() { 
int sum = 0; 
int num; 

while (std::cin) { 

std::cout << "Number: "; 
std::cin >> num; 

} 

if (std::cin >> num) { 

sum += num; 
num++; 

} 

else { 

std::cin.clear(); 
std::cout << "Input interrupted" << std::endl; 

} 

std::cout << "Sum is " << sum << std::endl; 
std::cout << "You have entered " << num << " numbers" << std::endl; 

return 0; 
} 

私は、私にとって非常にシンプルで理解しやすい、この新しいコードを、大好きですが、私は和演算を追加することができませんでした、それだけで0を出力! (平均を外して) また、入力した数字の数を確定して表示することができませんでした。コードの最後の行は、私がしたいことの一例です。

edit3。

最後に作成しました。

#include <iostream> 
using namespace std; 

int main(){ 

double numero; 
int index = 0; 
double somma = 0.; 


cout << "Inserire un numero: "; 

while(cin)   

{ 
    if (cin >> numero) 

    { 
    somma = somma + numero;  
    index++; 
    cout << "Inserire un numero: "; 
    } 

    else 

    { 
    cout << "Input interrotto" << endl; 
    } 
} 

cout << "Sono stati inseriti " << index << " numeri e la lora media è: 
<< somma/index << endl; 

return 0; 
} 

ありがとうございます!

P.S.結局、配列を使用する必要はありません。単純です。

+1

クリアされていない質問を。 何ですか? – jace

+1

質問がありますか? – pm100

+1

なぜこのための配列が必要でしょうか?ただ数字を読み、それを合計(最初はゼロ)に追加し、読み込んだ数字の数を保持し、完了したときに合計/合計数を使って平均を決定します。 – WhozCraig

答えて

1

ここにはいくつかの問題があります。 1つは、クローズされているか入力が悪いためにストリームエラーが発生した場合、リカバリしないでループを介して料金を請求することです。

まず、ループを必要に応じて早期に終了させます。また、次の部分の準備としてループをwhileに変換します。

int x = 0; 
while(std::cin && x < 50) 
{ 
    std::cin >> number[x++]; 
} 

ストリームエラーが発生した場合、早期終了します。しかし、ユーザーが「こんにちは」と入力したらどうなるでしょうか?これを無視して次のように続けることができます:

if(std::cin >> number[x]) 
    { 
     x++; 
    } 
    else 
    { 
     std::cin.clear(); 
    } 

ループ内の合計や何も計算していないことに注意してください。あなたはすでにそれらを配列に入れているので、必要はありません。あなたはループの後でそれを行うことができます。ここでは、私が今

double sum = std::accumulate(number, number + x, 0.0); 
double average = 0.0; 
if(x > 0) average = sum/x; 

std::accumulateを使用している、あなたはまた、あなたが任意の個数の値をしたいと述べています。元のコードでは最大50まで使用できました。代わりに保存する代わりに、その場で計算して値を破棄することができます。あなたはまだが道に沿って値を格納する場合

double sum = 0.0; 
int count = 0; 

while(std::cin) 
{ 
    double value; 
    if(std::cin >> value) 
    { 
     sum += value; 
     count++; 
    } 
    else 
    { 
     std::cin.clear(); 
    } 
} 

double average = 0.0; 
if(count > 0) average = sum/count; 

、あなたは、ベクターを使用することができます。

std::vector<double> numbers; 

//... 

     numbers.push_back(value); 

そして、あなたは、値の数を選択するようにユーザーをしたい場合:

std::cout << "Enter number of values: " << std::flush; 
std::size_t max_count = 0; 
std::cin >> max_count; 

std::vector<double> numbers; 
numbers.reserve(max_count); 

while(std::cin && numbers.size() < max_count) 
{ 
    // ... 
} 
+0

あなたのコードは私にとって完璧です!しかし、私はまだベクトルを勉強していません(また、練習では納品からそれを必要としませんでした。それは学校の運動です)ので、その部分を理解することは難しいです。 私の候補コードはこのようなものですが、依然として合計演算を追加できません(上記のedit2を参照) – Alberto