2014-11-22 2 views
-1

도형을 계산하는 코드를 만들었습니다. 모서리 수를 입력하십시오. 그런 다음 각 구석의 협조. 이것으로 각 모서리, 둘레, 면적 및 중심점 사이의 거리를 제공합니다. 나는 지역까지 올라 갔고 그것을 e로 계산할 수있다. 하지만 중심 좌표에서 "e"를 사용하여 xy 좌표를 계산하려고하면 작업이 중단됩니다. 영역에서 나는 e = 0을 초기화합니다. 내 centroid 함수에서 전자를 0으로 취할 때 1을 "e"로 나눌 때 프로그램이 작동을 멈 춥니 다.다른 함수에서 한 함수의 변수 사용

void Area(int x[], int y[], int corners, int e, int g) 
{ 
    e = 0; //Initialise e 

    for (g = 0; g<(corners - 1); g++) 
    { 
     e += ((x[g] * y[g + 1]) - (x[g + 1] * y[g])); 
    } 
    e += ((x[corners - 1] * y[0]) - (x[0] * y[corners - 1])); 
    e *= -0.5; 
    cout << "The Area is" << " " << e << endl; 

} 

void Centroid(int x[], int y[], int wx, int wy,int corners,int g,int e) 
{ 
    wx = 0; 
    wy = 0; 

    for (g = 0; g < (corners-1); g++) 
    { 
     wx += ((x[g] + x[g + 1])*((x[g] * y[g + 1]) - (x[g + 1] * y[g]))); 
     wy += ((y[g] + y[g + 1])*((x[g] * y[g + 1]) - (x[g + 1] * y[g]))); 
    } 

    wx *= ((1/(6 * e))); 
    wy *= ((1/(6 * e))); 

    cout << "The Centroid is" << " " << wx << "," << wy << endl; 
} 

int main() 
{ 
    int g, corners, x[100], y[100], r[100], c, e,wx,wy; 

    cout << "Enter the number of corners"; 
    cin >> corners; 

    for (g = 0; g<corners; g++) 
    { 
     cout << "enter the co ordinates"; 
     cin >> x[g] >> y[g]; 
     cout << "You have entered " << x[g] << " " << y[g] << endl; 
    } 

    Distance(x, y, corners, r, c = 0); 
    Perimeter(r, corners, g, c); 
    Area(x, y, corners, e = 0, g,wx=00.0,wy=00.0); 

    /*Centroid(x,y,wx=0,wy=0,corners,g,e); 

    */ 

    system("pause"); 
} 
+0

인수를 함수에 전달하는 아이디어는 ** 인수를 함수에 전달하기 전에 각 인수의 값을 계산하는 것입니다. 그렇지 않으면 함수 내부에서 로컬 변수로 선언 할 수도 있습니다. –

+0

@barakmanos가 말했듯이 패스 할 필요가없는 매개 변수를 전달하고 있습니다. 변수'e','g','wx' 및'wy'는 모두 지역 int이어야합니다. –

+0

그리고 이러한 기능을 호출하는 코드를 보여주십시오. –

답변

0

해결 방안은 변수에 대한 포인터 또는 참조를 사용하는 것입니다.

는이 같은 첫 번째 줄을 변경해야합니다

void Area(int x[], int y[], int corners, int &e, int g) 
+0

"링크"란 무엇입니까? 나는 당신이 _ 레퍼런스를 의미한다고 생각합니다. –

+0

네, 맞습니다. 나는 영어로 나쁘다 ... –

+0

OK, 나는 그것을 고쳤다. –

1

내가 당신이 원하는 것은 당신의 함수 값을 계산하고이를 반환하는 것입니다 생각합니다. Area 함수의 지점이 영역을 결정하고, 그 결과로 그 생산입니다 :

int Area(int[] x, int[] y, int corners) { 
    int e = 0; 

    for (int g = 0; g < corners - 1; ++g) { // g is local to this loop 
     e += ((x[g] * y[g + 1]) - (x[g + 1] * y[g])); 
    } 
    e += ((x[corners - 1] * y[0]) - (x[0] * y[corners - 1])); 
    e *= -0.5;   

    return e; // give the caller the "answer" 
} 

그 방법은, 주, 당신은 무엇을 e을 결정할 수있는 것은이 : 다음

int e = Area(x, y, corners); // this function does not need g 

그리고 통과 당신의 Centroid 기능에 그 :

: Centroid의 정의는 같아야합니다

int wx = 0, wy = 0; 
Centroid(x, y, corners, e, wx, wy); 

void Centroid(int x[], int y[], int corners, int e, int& wx, int& wy) 

우리는 우리가 두 개의 값을 반환 할 수 참조 그래서 의해 wxwy을 복용하고 있습니다. 심지어 더 나은 Point 객체 반환 Centroid해야하는 것입니다 비록 :

struct Point { 
    int x, y; 
}; 

를 그리고이 지역 자체 계산 한 : 그래서 main에서

Point Centroid(int x[], int y[], int corners) { 
    Point p = {0}; 
    int e = Area(x, y, corners); 
    // replace all code referencing wx and wy with p.x and p.y 

    return p; 
} 

를, 코드도 청소기 같습니다

Point centroid = Centroid(x, y, corners); 
관련 문제