どのように私はdo whileループを使用して最高値と最低値を決定するのですか

私は現在私の宿題で行き詰まっています、そして問題は私が5つの整数を尋ねるプログラムを作成する必要があるということです、そして私は最高と最低の値を決定するべきです。私は今のところかなり混乱しています、そして私の最初のコードはこれです。

#include
using namespace std;

int main(){

 int num1,num2,num3,num4,num5,min=0,max=0;

 cout << " Enter 1st number : ";
 cin >> num1;
 cout << " Enter 2nd number : ";
 cin >> num2;
 cout << " Enter 3rd number : ";
 cin >> num3;
 cout << " Enter 4th number : ";
 cin >> num4;
 cout << " Enter 5th number : ";
 cin >> num5;
 do{
    if(num10);
 cout << " The highest number is : " <

任意の助けがいただければ幸いです。前もって感謝します!

3
std :: max 、あなたの割り当てがそれを許可すると仮定します。
追加された 著者 Cornstalks,
あなたは配列が何であるか知っていますか?
追加された 著者 NathanOliver,
配列、またはc ++で呼び出されるベクトルは、この作業をはるかに簡単にします。このこちらのチュートリアルを見ることができます。あなたがもっと簡単な解決策を考え出しても、教授は気にしないでしょう。
追加された 著者 K1ngjulien_,
@NathanOliver私の教授は、doを使っている間だけ、そしてまだ配列にいない場合にだけ使うように私たちに言った
追加された 著者 james,

6 答え

std :: maxstd :: min の使用が許可されている場合は、

max = std::max({num1, num2, num3, num4, num5});
min = std::min({num1, num2, num3, num4, num5});

ループ内のコードを単純化するため。

1
追加された

毎回すべての数字を比較するのではなく。現在の最小値を順番に番号と比較するだけです。

int data[5];
// read numbers into data.

int min = data[0];  //Guess that number 0 is the smallst number.

// Now check if the guess is correct and update if you are wrong.
for(int loop = 0; loop < 5; ++loop)
{
    //check if data[loop] is smaller than your current guess.
    //if it is smaller than update your guess.
    //when you have checked all the values exit the loop.
}
std::cout << "Smallest: " << min << "\n";
0
追加された

You should store your numbers into a std::vector or std::array and then use the std::minmax_element algorithm to obtain the largest and smallest number.

0
追加された

これを行うためにループを使用する必要はありません。ループを使用する必要がある場合は、配列または他のデータ構造を使用する必要があります。

0
追加された

これは配列を使わずに私の解決策になるでしょう。 以前に自分で試してみることをお勧めします。コードをコピーするだけでは習得できません。

#include 

int main() {
    int i=0, num, min=FP_INFINITE, max=-FP_INFINITE;

    do {
        std::cout << "Enter number: ";
        std::cin >> num;
        if (num < min) {
            min = num;
        }
        if (num > max) {
            max = num;
        }
        i++;
    } while (i < 5);

        std::cout << "The max number is: " << max << std::endl;
        std::cout << "The min number is: " << min << std::endl;

    return 0;
}
0
追加された
これは {-1、-2、-3} に対して間違った最大値を与えるでしょう
追加された 著者 NathanOliver,
値として INT_MININT_MAX を使用しないでください。 FP_INFINITE があなたに正しい価値をもたらすとは思わない。
追加された 著者 NathanOliver,
値がこちらの場合、1が得られるので、移植性のあるソリューションではありません。
追加された 著者 NathanOliver,
@NathanOliverありがとうございます。 maxを最初の0から-FP_INFINITEに変更しました。今ではうまくいくはずです
追加された 著者 Uli Sotschok,
私は両方(FP_INFINITEとINT_MAX/INT_MIN)をテストしました、そして私のために、両方ともちょうどうまく働いた。しかし、私はまた、C ++の初心者でもあるので、どちらがより適しているのか私にはよくわかりません。
追加された 著者 Uli Sotschok,

覚えておく必要がない場合は、次のようにループできます。 5回、それから次の数を尋ねる前に比較をしなさい。

そう一般的に(考え、それをあなた自身で書き、学びなさい):

for (5 times)
ask user input, save as input
if largest number is null, then equal to input
else if largest number is smaller, then set input equal to largest number

ループ時間続けます。

0
追加された
最大数をnullに設定する代わりに、それが最初の反復であるかどうかを確認してください。その場合は、最初に入力した番号が最大の番号になります。それ以外の場合は、入力した番号と最大の番号を比較します。それに加えて、これは素晴らしい答えです。それは実際に最も効率的に問題を解決します。
追加された 著者 NathanOliver,
最大数に初期値を与えることの問題は、ユーザーがそれより低い数のすべての数を入力すると、間違った数を与えることです。これを "null"(0)に設定して -1、-2、-3 と入力すると、最大値として0が返され、-1は返されません。ですから、それが最初の繰り返しであるかどうかをチェックするか、ループの前に最初の数を求めてから4回だけループするか、または最大数をできるだけ小さい数に設定する必要があります。
追加された 著者 NathanOliver,
以前は最大の数を設定するようにしたいのですが、この場合は起こらないので、どちらも正しいです。 /肩をすくめる
追加された 著者 Marco,
いいえ、それはつまり、以前に保存した場合です。あなたはいくつかのストレージや以前に入力した番号からそれを取る、あなたは新しい番号を取得し、古いものと比較することができます。戻ってきて機能を追加しても、古いものを編集することについて心配する必要はまったくありません。私はそれに最初に価値を与えることを意味するのではありません。上記の別の方法は、ループに入る前に最初の番号を尋ねることで、それによって空のチェックを回避することです。
追加された 著者 Marco,