1

私が一日中苦労していたことを誰かが助けてくれるのではないかと思っていました。

以下のコードでは、乱数の配列を口述し、そこから最大、最小、平均を引き出す必要があります。すべてうまくいっているように見えます (非常にコンパクトなソフトウェアです!) が、奇妙な出力が得られます。私は問題が何であるかについて指を持っていると信じています(最初の数値の最大値を見つけているとしますが、次の数値は小さいですが、整数14が大きい場合でも、ソフトウェアはそれが最大の数値であると考えます)しかし、私にはわかりませんこれを修正する方法。最小値がなぜ間違っているのかわかりませんが、それがゼロだと言い続け、平均値が 10 ~ 19 のどこかにとどまることは、乱数の範囲が 1 ~ 1000 になることを考えると不可能です。配列なので、これを修正する方法がわかりません。どんな助けでも超素晴らしいでしょう!

お時間を割いていただきありがとうございます。素晴らしい一日をお過ごしください。

#include <cmath>
#include <iostream>
#include<cstdlib>
#include <ctime>
#include <time.h>
#include <iomanip>


using namespace std;
int main()
{

//Defining variables
//DEFINE SIZE
const int ARRAY_SIZE =20;
//Index variable
int i;
//For finding average
double sum=0;


double max_value;

double min_value;
//Keep all numbers sane
cout.precision(5);

srand((unsigned)time(0));

double main_array[ARRAY_SIZE];

//Header
cout << "Element number \t\t" << "Random Number\n\n" << endl;


//Assigning random values into array.
for (i=0; i< ARRAY_SIZE; i++)
{

max_value=0;
min_value=0;

//Randomizer
double ran = 0 + (rand()/((float)RAND_MAX/(1000-0)));

main_array[i] = ran;
cout << "\t" << i << "\t\t" << main_array[i] << endl;

//Find average
sum= (sum + main_array[i]);
sum= sum/(ARRAY_SIZE+1);



//Initalizing
for (int i = 0; i < ARRAY_SIZE; i++)
{

if ( min_value > ran) 
min_value = main_array[i];
if (max_value < ran)
max_value = main_array[i];
}



}
cout <<"Average Value is: "       << sum << endl;
cout <<"\nThe Minimum Value Is: " << min_value << endl;
cout <<"\nThe Maximum value Is: " << max_value << endl;




system ("pause");
return 0;

}

出力例は次のようになります

要素番号 乱数

    0               791.62
    1               542.04
    2               879.57
    3               875.39
    4               38.057
    5               73.702
    6               973.27
    7               22.431
    8               830.26
    9               444.59
    10              276.89
    11              888.12
    12              827.17
    13              900.45
    14              883.72
    15              201.15
    16              317.64
    17              649.83
    18              443.98
    19              683


Average Value is: 33.603

The Minimum Value Is: 0

The Maximum value Is: 791.62
Press any key to continue . . .
4

2 に答える 2

5

他の方法で行う必要がない限り、 を使用std::min_elementして、最小値、std::max_element最大値、およびstd::accumulate合計を見つけます。

絶対に自分でこれを行う必要がある場合は、通常、最小値と最大値をコレクションの最初の要素に初期化してから、小さい/大きい他の要素を探します。

int mininum = array[0];
int maximum = array[0];

for (int i=1; i<array_size; i++) {
    if (array[i] < minimum)
        minimum = array[i];
    if (array[i] > maximum)
        maximum = array[i];
}
于 2013-04-09T21:54:50.637 に答える