- 论坛徽章:
- 0
|
- #!/usr/bin/perl
- use strict;
- my $matrix_name;
- my $str =<< 'EOF';
- matrixa
- 12 4
- 10 30
- matrixb
- 5 6
- 1 10
- EOF
- \matrix_read_file();
- my @array = \matrix_multiply(\@{$matrix_name->[0]}, \@{$matrix_name->[1]});
- print @array;
- sub matrix_read_file {
- while($str) {
- chomp $str;
- next if $str =~ /^\s*$/;
- if ($str =~ /^([A-Za-z]\w*)/) {
- $matrix_name = $1;
- } else {
- my (@row) = split (/\s+/, $str);
- push (@{$matrix_name}, \@row);
- }
- }
- $matrix_name
- }
- sub matrix_multiply {
- my ($r_mat1, $r_mat2) = @_;
- my $r_product;
- my ($r1, $c1) = matrix_count_rows_cols($r_mat1);
- my ($r2, $c2) = matrix_count_rows_cols($r_mat2);
- die "Matrixs cannot multiply\n" unless ($c1 == $c2);
- for (my $I=0; $I<$r1; $I++) {
- for (my $J; $J<$c2; $J++) {
- my $sum = 0;
- for (my $k=0; $k<$c1; $k++) {
- $sum += $r_mat1->[$I][$k] * $r_mat2->[$k][$J];
- }
- $r_product->[$I][$J] = $sum;
- }
- }
- $r_product;
- }
- sub matrix_count_rows_cols {
- my $r_mat = @_;
- my $num_rows = @$r_mat;
- my $num_cols = @{$r_mat->[0]};
- ($num_rows, $num_cols);
- }
复制代码
帮我改改,学的不好. |
|