• Lenguaje

    Pascal

  • Descripción

    Multiplica dos matrices (A y B) de cualquier tamaño y guarda en resultado en otra matriz (C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
program multiplicamatrices;
uses crt;

type
    realarray   = array[0..0] of real;
    prealarray  = ^realarray;
    realmatrix  = array[0..0] of prealarray;
    prealmatrix = ^realmatrix;
var i, j, k, filas_a, columnas_a, filas_b, columnas_b : integer;
var a, b, c : prealmatrix;
var tecla : char;

begin
    write ('Ingrese el n'#163'mero de filas de la matriz A   : ');
    readln (filas_a);
    write ('Ingrese el n'#163'mero de columnas de la matriz A: ');
    readln (columnas_a);
    write ('Ingrese el n'#163'mero de filas de la matriz B   : ');
    readln (filas_b);
    write ('Ingrese el n'#163'mero de columnas de la matriz B: ');
    readln (columnas_b);
    if (filas_a<1) or (columnas_a<1) or (filas_b<1) or (columnas_b<1) or (columnas_a<>filas_b) then
        writeln (#10#13'Las matrices no se pueden multiplicar.')
    else
        begin
            getmem (a, sizeof (prealarray) * filas_a);
            getmem (b, sizeof (prealarray) * filas_b);
            getmem (c, sizeof (prealarray) * filas_a);
            writeln;
            for i := 0 to filas_a - 1 do
                begin
                    getmem (a^[i], sizeof (real) * columnas_a);
                    for j := 0 to columnas_a - 1 do
                        begin
                            write ('Ingrese el elemento A[', i, '][', j, ']: ');
                            readln (a^[i]^[j]);
                        end;
                end;
            writeln;
            for i := 0 to filas_b - 1 do
                begin
                    getmem (b^[i], sizeof (real) * columnas_b);
                    for j := 0 to columnas_b - 1 do
                        begin
                            write ('Ingrese el elemento B[', i, '][', j, ']: ');
                            readln (b^[i]^[j]);
                        end;
                end;
            for i := 0 to filas_a - 1 do
                begin
                    getmem (c^[i], sizeof (real) * columnas_b);
                    for j := 0 to columnas_b - 1 do
                        begin
                            c^[i]^[j] := 0;
                            for k := 0 to filas_b - 1 do
                                c^[i]^[j] := c^[i]^[j] + a^[i]^[k] * b^[k]^[j];
                        end;
                end;
            writeln (#10#13'Resultado:');
            for i := 0 to filas_a - 1 do
                begin
                    write ('[ ');
                    for j := 0 to columnas_b - 1 do
                        write (c^[i]^[j]:12:6, ' ');
                    writeln ('   ]');
                end;
        end;
    write (#10#13'Presione una tecla para terminar . . . ');
    tecla := readkey;
end.