2016-03-19 11 views
0

基本的に私はintro tpプログラミングクラスを取ります。ループ(if文、変数型など)の基礎を教えています。私は6つの異なる温度値を入力し、6つの値の最大値、平均値、および範囲を出力するようにユーザーに依頼しなければなりません。何らかの配列なしで複数の値を入力する方法

この6つの番号は、どのように、どこに保存する必要がありますか?

cout<< "Enter 6 diff numbers" << endl; 
float numbers; 
cin >> numbers; 

for (.... i_++) 

max = ; 
min = ; 


cout << .. << .... << endl; 

//フロートは、私だけは、配列、関数などの任意の並べ替えを使用せずにこれを行う必要がありますどのように6格納されている1つの数を維持し、することはできませんので、これは助けるべきではないのですか?

私は部分文字列を使用し、文字列または何かのように宣言していましたか?

ご協力いただきありがとうございます。

+2

6百万の数字があり、それらを保存するためのメモリがないことを想像してください。プログラムが実際にあなたであると想像してください。どのようにタスクを解決しますか? – Dialecticus

+0

入力として取得する数字が一意である必要がある場合を除き、実際には各値を保存する*ことはありません。 @Dialecticusが本質的に言っていることは、現在の値だけを必要とし、それを最大値と最小値と比較することです。あなたが必要とするのは、平均と合計です。 –

+0

実行中の総計(入力された値の数、現在の平均、最小のもの、最大のものなど)を保存することができます。 – Galik

答えて

1

私は配列を使用せずに使用できる基本的なアルゴリズムを実装しています。 すべてがケルビンであると仮定します。

float max = 0; // Minimum Value Set for comparing with larger values 
float min; 
float sum = 0; 
float avg = 0; 
float tmp; 
string number, alltheNumbers; 
for(int i = 0; i < 6; i++){ 
    cin>>number; 
    tmp = <float> number; 
    if(tmp > max){ 
     max = tmp; 
    } 
    sum += tmp; 
    alltheNumbers += ',' + number; // Save all the numbers in comma seperated Strings 
} 
min = max; // Maximum Found value set for finding minimum 
std::string delimiter = ","; 
size_t pos = 0; 
while ((pos = alltheNumbers.find(delimiter)) != std::string::npos) { 
    number = alltheNumbers.substr(0, pos); // Use the comma to retrieve all those numbers 
    tmp = <float> number; 
    if(tmp < min){ 
     min = tmp; 
    } 
    alltheNumbers.erase(0, pos + delimiter.length()); 
} 
avg = sum/6; 

したがって、必要なデータには次の変数があります。

+0

2つのもの: 'max'は最初に小さな値に初期化する必要があります。そして、 'min'変数は非常に大きな値に初期化されるべきです。さもなければ、最大の入力がゼロよりも大きくない、または最小の入力がゼロより小さくならない場合、何が起こるかを考えてください。 –

+0

よろしいですか。として、質問は温度を保存することを指します。私は0ケルビンの値を最大値に使うことができました。しかし、分のために沸騰温度で十分です。テストケースのスケールの種類にも依存します。 – zion

+0

@Joachim今はもっと説得力がありますか? – zion

1

これは、残りの宿題を台無しにすることなく配列なしで行う1つの方法です。

cout<< "Enter 6 different numbers" << endl; 

float num1, num2, num3, num4, num5, num6, max, min, sum, avg; 

cin >> num1 >> num2 >> num3 >> 
     num4 >> num5 >> num6; 

Goodluck!

+0

これは単なる別の形式の配列です。配列は、関連するアイテムのコレクションです。これは、関連する変数名の集合、すなわちソースコード内の名前の配列を導入するだけである。入力の数が変わると、これはうまくいきません。良い解決策は、1つの入力または100万人のために働き、達成しやすく、実際にはこのような質問の意図です。この解決策は、百万個の入力が読み出されるならば、「num1」、「num1000000」という百万の変数を必要とする。 – Peter

0

@ Zionの最初の答えが改善されたので、最初の桁にminとmaxを初期化すれば十分だと思います。 forループ入力番号の前に、max = numberとmin = numberを設定し、i = 1からforループを開始します。

関連する問題