Matrices Elementales 2x2 : Lectura, Suma, Resta y Multiplicación.







Análisis del problema
Vamos a limitar este estudio a matrices cuadradas 2x2, por sencillez. Se investigará más adelante el problema general. Lo primero va a ser leer las dos matrices en cuestión; una vez leídas se efectuarán los cálculos. Por último hay que imprimir, como resultado, las matrices obtenidas.

Diseño del programa
La suma de dos matrices obedece a la expresión suma(i,j) = a(i,j) + b(i,j). La resta es análoga: resta(i, j) = a(i,j) - b(i, j). El producto es algo más complicado: producto(i,j) = sumatorio en k de a(i,k)*b(k,j) para k desde 1 hasta las dimensiones de las matrices. Evidentemente, en el caso general se pueden tener matrices de dimensiones diferentes, en cuyo caso la operación de suma (o resta) no sería posible.

Implementación
#include<stdio.h>

/* Este programa permite sumar, restar y multiplicar
    matrices cuadradas bidimensionales */


void main(void)
{
    /* Declaración de variables */
    float a11, a12, a21, a22;               /* La primera matriz */
    float b11, b12, b21, b22;               /* La segunda matriz */
    float suma11, suma12, suma21, suma22;         /* La matriz suma */
    float resta11, resta12, resta21, resta22;       /* La matriz diferencia */
    float producto11, producto12, producto21, producto22; /* La matriz producto */
    /* Lectura de datos */
    
    printf("Programa de cálculo matricial");
    
    printf("\n\nEscriba la primera matriz por filas: ");
    scanf("%f %f %f %f", &a11, &a12, &a21, &a22);
    
    printf("\n\nEscriba la segunda matriz por filas: ");
    scanf("%f %f %f %f", &b11, &b12, &b21, &b22);
    
    /* Cálculo */
    
    
    /*
        Suma
    */
    
    suma11 = a11 + b11;
    suma12 = a12 + b12;
    suma21 = a21 + b21;
    suma22 = a22 + b22;

    /*
        Resta
    */
    
    resta11 = a11 - b11;
    resta12 = a12 - b12;
    resta21 = a21 - b21;
    resta22 = a22 - b22;
    
    /*
        Multiplicación
    */
    
    producto11 = a11*b11 + a12*b21;
    producto12 = a11*b12 + a12*b22;
    producto21 = a21*b11 + a22*b12;
    producto22 = a21*b21 + a22*b22;
    
    /* Impresión de resultados */
    
    printf("\n\nLa matriz suma es como sigue:\n\n");
    printf("(suma11 = %f suma12 = %f)\n(suma21 = %f suma22 = %f)",
         suma11, suma12, suma21, suma22);

    printf("\n\nLa matriz resta es como sigue:\n\n");
    printf("(resta11 = %f resta12 = %f)\n(resta21 = %f resta22 = %f)",
         resta11, resta12, resta21, resta22);

    printf("\n\nLa matriz producto es como sigue:\n\n");
    printf("(producto11 = %f producto12 = %f)\n(producto21 = %f producto22 = %f)",
         producto11, producto12, producto21, producto22);

    printf("\n\nTerminación normal del programa.\n");
}


En este caso los cálculos resultan muy sencillos, pero ya se aprecia una cantidad de código relativamente grande. Está claro que el caso de matrices 6x6 se volvería incómodo, por decir algo. Afortunadamente, las estructuras de control (repetitivas) serán de gran ayuda en este sentido.

Comprobación y Depuración
Dada la sencillez de los cálculos, podemos estar bastante seguros de que su implementación es correcta. Con todo, podemos recurrir a un conjunto de datos de prueba para verificar la existencia de posibles errores. La comprobación más sencilla consiste en insertar derivados de la matriz unitaria, para comprobar la suma, resta y multiplicación. Otra posibilidad es utilizar matrices nulas. Por último se puede tomar como primer factor la matriz unidad, y como segundo factor una matriz arbitraria; la comprobación de resultados será elemental.

Documentación
Este programa admite dos matrices reales bidimensionales, y produce como resultado la matriz suma, la matriz resta y la matriz multiplicación. No existen parámetros, subprogramas, variables globales ni posibles casos especiales de uso: en suma, la documentación es necesariamente exigua. En un caso real, sería preciso aportar la información adecuada para que una persona distinta del autor pudiera comprender el funcionamiento del programa y efectuar modificaciones en él. También sería preciso crear un manual del usuario, adecuado para permitir a personas no relacionadas con el programador aplicar el programa para obtener resultados. La documentación de programas es un proceso complejo e imprescindible, a tal extremo que en los lenguajes más avanzados se dispone de herramientas (y convenciones de comentarios) adecuada para generar esta documentación de forma automatizada. La documentaciónes clave para una reutilización eficiente del código, y estees uno de los objetivos prioritarios en la Ingeniería del Software.