矢量找到中位数 - 作业

时间:2015-02-16 00:24:24

标签: c++

我是一个相对较新的C ++学习者,而且我遇到了一些麻烦。如果你们看过这个标题,这是一个家庭作业问题(只是让你们知道那里),而且我不确定我的错误在哪里。使用GIT Bash,我无法理解为什么这不是编译(或者我可能只是不知道如何阅读它)。我觉得我已经触及了所有的基础,并希望快速查看一下,看看我的错误是否明显。我已经通过stackoverflow完成了一对外观,因此从另一个帖子中使用了向量中的输入值,但我对它进行了一些修改。另外,我添加了从最小到最大的向量。

另外,如何更改for语句以允许向量中的变量#?

#include <iostream>
#include <vector>
using namespace std;


double showMedian(const vector<int> & vecmedian, int size)
{
int middle;
double average, median;

middle = size / 2.0;

if (size % 2 == 0)
    {
    median = (vecmedian[middle] + vecmedian[middle + 1]) / 2.0;
    cout << "The median is: " << average << endl;
    }
else
    {
    median = vecmedian[middle + 0] / 1.0;

    cout << "The median is: " << median << endl;
    }
return median;
}

int main()
{
int n,input, i;
vector<int> vecmedian;
vector<int>::iterator itr;
cout << "Enter the amount of numbers: ";
cin >> n;
cout << "Enter your numbers to be evaluated: " << endl;
while (vecmedian.size() < n && cin >> input){
vecmedian.push_back(input);
}
for(i = 1;  i < 10;  ++i){
  for(itr = vecmedian.begin();  itr != vecmedian.end();  ++itr){
     if(vecmedian[i] < *itr){
    vecmedian.insert(itr, vecmedian[i]);
    break;
 }
  }
  if(itr == vecmedian.end())
     vecmedian.push_back(vecmedian[i]);
}   
showMedian();
return 0;

}

1 个答案:

答案 0 :(得分:2)

第1点

制作function prototypes时,您需要使它们与function的实际定义保持一致。

你有:

void showMedian();

作为function-prototype但你有:

double showMedian(int *vecmedian, int size)

作为实际定义。 他们都需要保持一致

由于您尚未声明数组,因此可能会将showMedian的参数更改为:

double showMedian(const vector<int> & vecmedian, int size)

第2点

if(nums[i] < *itr)

nums在哪里宣布?

第3点

如果您想使用showMedian的定义,那么假设您进行了上述更改(假设n是大小),请使用它使用的参数。

showMedian(vecmedian, n);

修改

通过评论部分中的所有咨询和新更新的OP问题,这是一个相当可靠的程序,可在median中找到vector

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

double showMedian(const vector<double> & vecmedian, int num);

int main()
{
    unsigned int n;
    double input;
    vector<double> vecmedian;

    // cout << "Enter the amount of numbers: ";

    do {
        cout << "Enter the amount of numbers: ";

        while(!(cin >> n)){
            cout << "Wrong input" << endl;
            cout << "Enter the amount of numbers: ";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }

        if (n == 0)
        {
            cout << "Invalid, size must be greater than 0" << endl;
        }

    } while (n == 0);

    // cout << "Enter your numbers to be evaluated: " << endl;

    for (int i  = 1; i <= n; ++i)
    {
        cout << "Enter number here (" << ((n + 1) - i) << " number/s remaining): ";
        while(!(cin >> input)){
            cout << "Wrong input" << endl;
            cout << "Enter number here (" << ((n + 1) - i) << " number/s remaining): ";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }

        vecmedian.push_back(input);
    }

    //        while (vecmedian.size() < n && cin >> input){
    //            vecmedian.push_back(input);
    //        }

    sort(vecmedian.begin(), vecmedian.end());

    showMedian(vecmedian, vecmedian.size());
    return 0;

}

double showMedian(const vector<double> & vecmedian, int num)
{
    int middle;
    double median;

    middle = (num / 2);
    if (num % 2)
        median = vecmedian[middle];
    else
        median = (vecmedian[middle - 1] + vecmedian[middle]) / 2.0;
    cout << "The median is: " << median << endl;
    return median;
}