1

Perl に 2 次元配列があります。配列をサブルーチンに渡し、2 次元配列のすべての要素を変更してから返し、配列を出力したいと考えています。これまでのコードを以下に添付しました。私が抱えている問題は、実際には個々の要素をそれぞれ変更し、配列をサブルーチンに渡すことです。

オリジナルマトリックス+コード

       x            y       z
CG  -3.74900 -4.89100 -3.45400 
OD1 -6.45900 -6.29100 -6.08000 
OD2 -1.31600 -1.83300 -0.17600   

sub translateMatrixOperation
{
my (@translatematrix, $x, $y, $z) = @_;
print "PRINTING FIRST\n";
my $arrsize = scalar @translatematrix;
for(my $i = 0; $i <= $arrsize; $i++)
{
    for(my $j = 0; $j <= $arrsize; $j++)
    {
        if ($j == 0)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
            $_ = $_ - $x;
        }
        elsif ($j == 1)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
           $_ = $_ - $y;
        }
        elsif ($j == 2)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
            $_ = $_ - $z;
        }
    }
}
print "PRINTING\n";
for(my $i = 0; $i <= $arrsize; $i++)
{
    for(my $j = 0; $j <= $arrsize; $j++)
    {
        print "$translatematrix[$i][$j] ";
    }
    print "\n";
}
# return (\@translatematrix);

x 値に定数値、y 値に定数値、z 値に定数を追加して、配列全体を編集したいと考えています。どこで私は間違えましたか?

4

1 に答える 1

2
my (@translatematrix, $x, $y, $z) = @_;

@translatematrixからすべての要素を丸呑みするので意味がありません。次のようにする@_必要があります。

my ($translatematrix, $x, $y, $z) = @_;

$translatematrix配列参照です。

        $_ = $_ - $x;

もっと似てるはず

$translatematrix->[$i][$j] -= $x;

$yまた、およびと同様のロジックを$z適用する必要があります。

于 2013-08-12T10:25:29.137 に答える