-1

私は C++ が初めてで、引数を関数に渡す方法がわかりません。

関数Distance()を使用して、2 つのノード間の距離を計算しています。次のように関数を宣言します。

int Distance(int x1, int y1, int x2 , int y2)
{   
    int distance_x = x1-x2;
    int distance_y = y1- y2; 
    int distance = sqrt((distance_x * distance_x) + (distance_y * distance_y));
    return distance; 
}

メインメモリには2つのforループがあります。私が知る必要があるのは、次のような値を渡すことができるかどうかです: Distance (i, j, i+1, j+1).

for(int i = 0; i < No_Max; i++)
{
    for(int j = 0; j < No_Max; j++)
    {
        if(Distance(i, j, i+1, j+1) <= Radio_Range) // the function 
            node_degree[i] = node_degree[i] + 1;

        cout << node_degree[i] << endl;
    }  
}
4

3 に答える 3

3

関数への引数は、その引数の型に一致するか、それにキャストできる任意の式として提供できます。

于 2012-10-30T21:10:03.020 に答える
2

Distance(int, int, int, int)関数を正しく呼び出しているように見えます。次のステートメントは次のように呼び出しますDistance()

Distance (i, j, i+1, j+1);

これにより、によって返される値がDistance()変数に格納されます。

int dist = Distance (i, j, i+1, j+1);

Distance()これにより、 (左のオペランド)から返された値がRadio_Range(右のオペランド)と比較されます。左のオペランドが右のオペランド以下の場合、1(true)と評価されます。それ以外の場合は0(false)になります。ステートメント内の式の全体的な値がifゼロ以外の場合、ステートメントまたはステートメントの直後のブロックifが実行されます。

if(Distance(i, j, i+1, j+1) <= Radio_Range)
   //Statement;

また:

if(Distance(i, j, i+1, j+1) <= Radio_Range){
   //Statement;
   //Statement;
   //...
}

ただし、によって返される値はDistance()整数に切り捨てられます。したがって、完全な正方形でdistanceない限り、実際の距離と等しくなりません。(distance_x * distance_x) + (distance_y * distance_y)精度を上げるには、を使用することを検討してdoubleください。関数にを返すようにする場合intは、明示的な型キャストを行うのが賢明です。例:

int distance = (int)sqrt((distance_x * distance_x) + (distance_y * distance_y));

これにより、あなたや他の誰かが後でコードを見た場合に、関数が間違ったデータ型を使用しているとは思わないようになります。

于 2012-10-31T00:23:27.843 に答える
2

ヒント: sqrt を使用する場合は、int ではなく double を使用する必要があります。

http://www.cplusplus.com/reference/clibrary/cmath/sqrt/

于 2012-10-30T21:31:26.020 に答える