Las arrays son arrays multidimensionales que almacenan datos en forma de filas y columnas. Perl permite realizar varias operaciones en estas arrays, como suma, resta, división y multiplicación. Perl es muy similar a C sintácticamente y es fácil para los usuarios que tienen conocimientos de C, C++.
Dado que son dos arrays, la tarea es multiplicarlas. Las arrays pueden ser cuadradas o rectangulares.
Ejemplo:
Input : mat1[][] = {{2, 4}, {3, 4}} mat2[][] = {{1, 2}, {1, 3}} Output : {{6, 16}, {7, 18}}
En primer lugar, el usuario debe proporcionar las dimensiones de las dos arrays con la ayuda de <STDIN> .
Perl
print "Enter the Dimensions of matrices: "; my $a = <STDIN>, my $b = <STDIN>, my $c = <STDIN>, my $d = <STDIN>;
Para multiplicar dos arrays, el número de columnas de la primera array debe ser igual al número de filas de la segunda array. Para verificar si las arrays son multiplicativas , se usa el bucle condicional if-else en el código.
Perl
if($b != $c) { print "Matrix multiplication can't happen\n"; }
Ahora, si la condición anterior no se cumple, entonces sabemos que tenemos que implementar la multiplicación de arrays en nuestra condición else y para eso, primero tomaremos los valores dentro de las dos arrays con la ayuda de bucles for anidados . El primer ciclo for se usará para cambiar la fila y el segundo se usará para acceder a todas las columnas en esa fila en particular.
Perl
#!/usr/bin/perl else { my @matrix1, my @matrix2, my @matrix3; # Filling up matrix 1 with user input print "Enter values for Matrix 1: "; for(my $i = 0; $i < $a; $i++) { for(my $j = 0; $j < $b; $j++) { # Taking user input $matrix1[$i][$j] = <STDIN>; } } # Filling up matrix 2 with user input print "Enter values for Matrix 2: "; for(my $i = 0; $i < $c; $i++) { for(my $j = 0; $j < $d; $j++) { # Taking user input $matrix2[$i][$j] = <STDIN>; } } }
Después de esto, se realiza el proceso de multiplicación en el que la i-ésima columna de la primera array se multiplica con la j-ésima fila de la segunda array y se suman los productos respectivos para encontrar el valor en la posición [i][j] de la array producto. Para ejecutar esto, se utilizan tres bucles anidados en el código de la siguiente manera:
Perl
#!/usr/bin/perl # Nested loops to multiply matrices # Initializing temporary variable my $temp = 0; for(my $i = 0; $i < $a; $i++) { for(my $j = 0; $j < $d; $j++) { for(my $g = 0; $g < $b; $g++) { # Multiplying the matrix values and # adding them to temp $temp += $matrix1[$i][$g] * $matrix2[$g][$j]; } $matrix3[$i][$j] = $temp; chomp $matrix3[$i][$j]; # Printing resultant matrix print $matrix3[$i][$j]; print "\t"; $temp = 0; } print "\n"; } }
En el código escrito anteriormente, una variable temporal (temp) se inicia como 0. Después de la multiplicación de la i-ésima columna de la primera array y la j-ésima fila de la segunda array, el producto se suma a la temporal, de esta manera podremos para sumar todos los productos encontrados al multiplicar dos números a la vez. Aquí el bucle for de la variable $g nos ayuda a acceder a todas las posiciones de las dos arrays definidas previamente. Para entender la lógica, considere que para la array 1 estamos arreglando la columna con i y luego pasando a varias filas usando ‘ g ‘ y en la array 2 estamos arreglando la fila con j y luego cambiando de columna usando g . Como sabemos que $b = $c , no importa si $gva de 0 a $b o de 0 a $c . Finalmente, ponemos el valor en temp en su posición respectiva y ponemos temp nuevamente en 0 y encontramos el valor en las otras posiciones. Esto dará como resultado la formación de una array de producto que se requería.
A continuación se muestra el código final para realizar el proceso de multiplicación de arrays:
Perl
# Perl program for matrix multiplication use strict; use warnings; # Taking Matrix dimensions from the user print "Enter the Dimensions of matrices: "; my $a = <STDIN>, my $b = <STDIN>, my $c = <STDIN>, my $d = <STDIN>; # Checking if the matrices # are multiplicative if($b != $c) { print "Matrix multiplication can't happen\n"; } # Getting values for the matrix else { my @matrix1, my @matrix2, my @matrix3; # Taking values for the First matrix print "Enter the values for Matrix 1: "; for(my $i = 0; $i < $a; $i++) { for(my $j = 0; $j < $b; $j++) { # Taking user input $matrix1[$i][$j] = <STDIN>; } } # Taking values for the Second matrix print "Enter the values for Matrix 2: "; for(my $i = 0; $i < $c; $i++) { for(my $j = 0; $j < $d; $j++) { # Taking user input $matrix2[$i][$j] = <STDIN>; } } # Initializing temporary variable my $temp = 0; print "\nResultant matrix:\n"; # Nested-loops for multiplication process for(my $i = 0; $i < $a; $i++) { for(my $j = 0; $j < $d; $j++) { for(my $g = 0; $g < $b; $g++) { # Multiplying the matrix values and # adding them to temp $temp += $matrix1[$i][$g] * $matrix2[$g][$j]; } # Assigning the value of temp # into the matrix 3 $matrix3[$i][$j] = $temp; chomp $matrix3[$i][$j]; # printing matrix values print $matrix3[$i][$j]; print "\t"; # Setting temporary variable # back to zero $temp = 0; } print "\n"; } }
Producción: