0

ソートされたデータが10進数ではなく整数を出力する場合があることを除いて、すべてが機能しています。これは修正するのが簡単な間違いのようですが、見つけられません!

#include <iostream>

using namespace std;

void input (double x[], int length);
void copy (double source[], double dest[], int length);
void sort (double x[], int length);
void display (double x[], int length);
int main()
{
    double data[20];
    double sdata[20];
    int itemcount;

    cout << "Enter data item count <1-20>" << endl;
    cin >> itemcount;
    if ((itemcount < 1) || (itemcount > 20))
    {
        cout << "Class size is NOT within required range. The required range is 1 to 20." << endl;
        cout << "Bye." << endl;
        return (0);
    }
    input (data, itemcount);
    cout << "Original Data:" << endl;
    copy (data, sdata, itemcount);
    display (sdata, itemcount);
    sort (sdata, itemcount);
    cout << "Sorted Data" << endl;
    display (sdata, itemcount);

}

void input (double x[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        cout << "Enter score" << endl;
        cin >> x[i];
    }
}

void copy (double source[], double dest[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        dest[i] = source[i];
    }
}

void sort (double x[], int length)
{
    int i, temp;
    bool swapdone = true;
    while (swapdone)
    {
        swapdone = false;
        for (i=0; i < length-1; i++)
        {
            if (x[i] > x[i+1])
            {
                temp = x[i];
                x[i] = x[i+1];
                x[i+1] = temp;
                swapdone = true;
            }
        }
    }
}

void display (double x[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        cout << x[i] << " ";
    }
    cout << endl;
}

実行例では、結果は次のようになります。

Enter data item count <1-20>
5
Enter score
30.41
Enter score
63.25
Enter score
62.47
Enter score
40.25
Enter score
310.41
Original Data:
30.41 63.25 62.47 40.25 310.41
Sorted Data
30.41 40.25 62 63 310.41
4

4 に答える 4

4

temp割り当てたものを整数にしたくない場合はdouble、 ではなく にする必要があります。int

于 2012-05-17T18:48:36.473 に答える
1

「i」をカウンターとしてのみ使用する場合は、次のように for ループ内で宣言できます。

for (int i=0;i<length;i++)

これにより、いくつかの手間が省けます。ともかく、

変化する int i, temp;

int i;
double temp;

Double は 10 進数を保持できることを意味し、integer は整数を意味します。バブルソートを行うためにスワップするときは、double 型を integer 型に変換しています。コンパイラは型変換エラーを与えるはずですが、コンパイルする必要があります。

于 2012-12-11T14:52:04.880 に答える
0

これを試して:

 double tmp;
 std::cout << ios_base::setpercision(3) << tmp;
于 2012-05-17T18:49:50.180 に答える
0

小切手

int i, temp;

温度は 2 倍にする必要があります。

于 2012-05-17T18:51:56.607 に答える