Search⌘ K

Solution Review: Print a Matrix

Explore how to print and manipulate a two-dimensional matrix in Perl using arrays and nested loops. Understand how to assign values based on element positions relative to the diagonal, enhancing your skills in array management and Perl subroutines.

We'll cover the following...

Let’s look at the solution first before jumping into the explanation:

Perl
sub printMat {
$n = @_[0];
@arr=();
for ($i=0;$i<$n;$i++) {
for ($j=0;$j<$n;$j++){
if ($i==$j){ # if row=column=> fill the matrix with 0
$arr[$i][$j] = 0;
}
elsif($i>$j){ # if row>columns=> fill matrix with -1
$arr[$i][$j] = -1;
}
else { # if row<columns=> fill matrix with 1
$arr[$i][$j] = 1;
}
}
}
for ($i=0;$i<$n;$i++) {
for ($j=0;$j<$n;$j++){
sub printMat {
$n = @_[0];
@arr=();
for ($i=0;$i<$n;$i++) {
for ($j=0;$j<$n;$j++){
if ($i==$j){ # if row=column=> fill the matrix with 0
$arr[$i][$j] = 0;
}
elsif($i>$j){ # if row>columns=> fill matrix with -1
$arr[$i][$j] = -1;
}
else { # if row<columns=> fill matrix with 1
$arr[$i][$j] = 1;
}
}
}
for ($i=0;$i<$n;$i++) {
for ($j=0;$j<$n;$j++) {
print $arr[$i][$j]." ";
}
print "\n";
}
} }
print "\n";
}
}
printMat(4);

Explanation

We want to create a matrix (two-dimensional array) of size passed from the printMat subroutine. @_[0] is used to get the size as this is the only argument passed to this subroutine. The elements in the array are stored using the following conditions:

  • if $i is equal to $j then store 0, handling diagonal
  • else if $i is greater than $j then store -1, handling all elements below diagonal
  • else store 1, handling all elements above diagonals

We use a nested for loop to print all elements of the array.