2009-07-10 6 views
1

최소, 최대, 평균, 중간 값을 계산하는이 프로그램에서 여러 값을 반환하는 데 문제가 있습니다. 내가 한 첫 번째 일은 참조 인수를 전달하는 것이 었습니다.하지만 구조체 나 클래스를 만드는 것이 여러 값을 반환하는 데 선호되는 방법이라고 읽었습니다.여러 값을 반환하려고 시도했습니다.

그래서 저는 시도했지만 좋은 결과를 얻을 수 없었습니다. 여기 내가 지금까지 얻은 것이 있습니다.

#include "std_lib_facilities.h" 
struct maxv{ 
     int min_value; 
     int max_value; 
     double mean; 
     int median; 
}; 

maxv calculate(vector<int>& max) 
{ 

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

    min_value = max[0]; 

    int m = 0; 
    m = (max.size()-1); 
    max_value = max[m]; 

    for(int i = 0; i < max.size(); ++i) mean += max[i]; 
    mean = (mean/(max.size())); 

    int med = 0; 
    if((max.size())%2 == 0) median = 0; 
    else 
    { 
     med = (max.size())/2; 
     median = max[med]; 
     } 

} 

int main() 
{ 
    vector<int>numbers; 
    cout << "Input numbers. Press enter, 0, enter to finish.\n"; 
    int number; 
    while(number != 0){ 
       cin >> number; 
       numbers.push_back(number);} 
    vector<int>::iterator i = (numbers.end()-1); 
    numbers.erase(i); 
    maxv result = calculate(numbers); 
    cout << "MIN: " << result.min_value << endl; 
    cout << "MAX: " << result.max_value << endl; 
    cout << "MEAN: " << result.mean << endl; 
    cout << "MEDIAN: " << result.median << endl; 
    keep_window_open(); 
} 

분명히 calculate 함수의 변수는 선언되지 않습니다. 올바른 값을 반환하는 올바른 방법으로이를 구현하는 방법을 모르겠습니다. 지금까지 시도한 것과는 거리가 멀었습니다. 어떤 도움을 주시면 감사하겠습니다 - 고마워요.

P. 이 주제에 관한 다른 스레드를 살펴 봤는데 나는 calculate()에 전달해야하는 인수와 maxv 구조체의 변수 사이에 실제로 차이가 없으므로 여전히 혼란 스럽습니다.

+0

왜 완전한 기능을 표시하지 않습니까? 평균을 0으로 초기화하지 않기 때문에 중앙값이 잘못 계산 될 수 있습니다. – Dingo

+0

"지금까지 내가 가지고있는 것이 여기 있습니다."라고 말하는 것이 좋습니다. – ChrisW

답변

8

세 가지 방법이 있습니다.

1) 계산 함수로부터 maxv 인스턴스를 리턴

maxv calculate(vector<int>& max) 
{ 
    maxv rc; //return code 
    ... some calculations ... 
    ... initialize the instance which we are about to return ... 
    rc.min_value = something; 
    rc.max_value = something else; 
    ... return it ... 
    return rc; 
} 

2) 패스의 maxv 인스턴스 참조

void calculate(vector<int>& max, maxv& rc) 
{ 
    ... some calculations ... 
    ... initialize the instance which we were passed as a parameter ... 
    rc.min_value = something; 
    rc.max_value = something else; 
} 

3) 그 계산은 maxv 구조체 방법 받았다고하여 (또는 더 나은, 생성자)

struct maxv 
{ 
    int min_value; 
    int max_value; 
    double mean; 
    int median; 

    //constructor 
    maxv(vector<int>& max) 
    { 
     ... some calculations ... 
     ... initialize self (this instance) ... 
     this->min_value = something; 
     this->max_value = something else; 
    } 
}; 
+0

세 번째 옵션은 값을 참조로 전달할 수 있지만 동적 메모리 할당 문제는 피할 수 있으므로 특히 유용합니다. 또한 객체 지향적이며 깨끗합니다. 좋은 생각. –

+0

대단히 감사합니다. – Alex

관련 문제