-4

このウィキペディアの記事のこのコードを C から Delphiに変換しようとしています。

//convert (x,y) to d
int xy2d (int n, int x, int y) {
    int rx, ry, s, d=0;
    for (s=n/2; s>0; s/=2) {
        rx = (x & s) > 0;
        ry = (y & s) > 0;
        d += s * s * ((3 * rx) ^ ry);
        rot(s, &x, &y, rx, ry);
    }
    return d;
}

そこで使用されている rot 関数に相当するものを見つけることができません

4

2 に答える 2

2

Varキーワードを使用して、Delphi で参照によって関数を渡すことができます。これにより、リンクされた C コードで int へのポインタを渡すのと同じ結果が得られます。

procedure Rot(N : Integer; RX, RY : Boolean; Var X, Y : Integer);
 var
   T : Integer;
 begin
   If Not RY then
   begin
     If RX then
     begin
       X := N - 1 - X;
       Y := N - 1 - Y;
     end;
       T := X;
       X := Y;
       Y := T;
   end;
 end;

パラメータの順序が変更されていることに注意してください。参照渡しのパラメーターと値渡しのパラメーターをグループ化しました。RX と RY には、整数の代わりにブール値を使用できます (ただし、呼び出しコードを適切に調整してください)。

于 2015-08-13T06:12:40.830 に答える