-1

一度呼び出されると、データ ファイルから値を読み取り、最大正値、最小正値、最大負値、および最小負値の 4 つの出力を与える関数を作成しようとしています。正の値がない場合は、「正の値はありません」と出力する必要があり、負の場合も同様です。私が直面している主な問題は、正しい最小の負の値を返すことです。

これが私がこれまでに持っているものです。

void maxMinimum (double x[], int n)
{
   int i;
   double posMaximum;
   double posMinimum;
   double negMaximum;
   double negMinimum;
   double max;
   double min;

   posMaximum = x[0];
   for (i=0; i <= n-1; i++)
   {
      if(x[i] > posMaximum)
         posMaximum = x[i];
   }  
   cout << "       Maximum positive value       = " << fixed << setprecision(2) << setw(8) << right << posMaximum << endl;

   posMinimum = x[0];
   for (i=0; i <= n-1; i++)
   {
      if(x[i] < posMinimum)   if(x[i] > 0.0)
         posMinimum = x[i];
   }
   cout << "       Minimum positive value       = " << fixed << setprecision(2) << setw(8) << right << posMinimum << endl;

   negMaximum = x[0];
   for (i=0; i <= n-1; i++)
   {
      if(x[i] < negMaximum)   if(x[i] < 0.0)
         negMaximum = x[i];
   }
   cout << "       Maximum negative value       = " << fixed << setprecision(2) << setw(8) << right << negMaximum << endl;

   negMinimum = x[0];
   for (i=0; i <= n-1; i++)
   {
      if (x[i] < 0.0 && x[i] < negMaximum)
      negMinimum = x[i];
   }

   cout << "       Minimum negative value = " << fixed << setprecision(2) << setw(8) << right << negMinimum << endl << endl;

   max = x[0];
   for (i=0; i <= n-1; i++)
   {
      if(x[i] > max)
         max = x[i];
   }

   min = x[0];
   for (i=0; i <= n-1; i++)
   {
      if(x[i] < min)
         min = x[i];
   }

   if(max < 0.0)
       cout << "       No positive values" << endl;
   if(min >= 0.0)
       cout << "       No negative values" << endl << endl;  

}

実行すると、関数は最小の負の値に対して正の値を返します。のために私には意味がありませんif (x[i] < 0.0 && x[i] < negMaximum)。誰かが私に欠けているものを教えてもらえますか?

注: 負の最小値は、ゼロに最も近い値を指します。負の最大値はゼロから最も離れています。

前もって感謝します!

4

2 に答える 2

1

-5 > -30 のように、negMinimum は negMaximum より大きくなります。また、一時変数を作成する必要があります。そうしないと、negMinimum は最後にチェックされた negMaximum より大きい負の値にのみ等しくなります。たとえば、データは {0,-80,5,-2,6,-8} です。-8 < 0 および -8 > -80 であるため、negMinimum は -8 になります。したがって、x[i] < negMaximum を x[i] > negMaximum に変更し、ループごとに新しいチェック条件として機能する変数を導入する必要があります。

negMinimum = x[0];
double temp = negMaximum
  for (i=0; i <= n-1; i++)
 {
   if ((x[i] < 0.0) && (x[i] > temp))
   {
   negMinimum = x[i];
   temp = negMinimum;
   }
于 2013-10-25T08:21:22.547 に答える