/media/sda-magnetic/david/Dokumente-16-2024-08-01/informatikUmathematik/excerpt20240906before/progs2sources20240801/matrixmultiplikationex3.c


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NO_ELEM             -1
#define MAX_LINE_COLUMN     4
#define MIN_LINE_COLUMN     4
#define MAX_VAL             10
#define MIN_VAL             0

int main (void) {
    time_t t;
    int m, n, s, q;
    int i, j;
    int g, h;
    int a [MAX_LINE_COLUMN + MIN_LINE_COLUMN][MAX_LINE_COLUMN + MIN_LINE_COLUMN];
    int b [MAX_LINE_COLUMN + MIN_LINE_COLUMN][MAX_LINE_COLUMN + MIN_LINE_COLUMN];
    int ab [MAX_LINE_COLUMN + MIN_LINE_COLUMN][MAX_LINE_COLUMN + MIN_LINE_COLUMN];

    for (i = 0;  i < MAX_LINE_COLUMN;  i++)
        for (j = 0;  j < MAX_LINE_COLUMN;  j++) {
            a [i] [j] = NO_ELEM;
            b [i] [j] = NO_ELEM;
        }

    srand ((unsigned) time (&t));

    m = (rand () % MAX_LINE_COLUMN) + MIN_LINE_COLUMN;
    n = (rand () % MAX_LINE_COLUMN) + MIN_LINE_COLUMN;
    s = (rand () % MAX_LINE_COLUMN) + MIN_LINE_COLUMN;

    for (i = 0;   i < m;  i++) {
        for (j = 0;  j < n;  j++) {
            a [i] [j] = (rand () % MAX_VAL) + MIN_VAL;
        }
    }

    for (i = 0;   i < n;  i++) {
        for (j = 0;  j < s;  j++) {
            b [i] [j] = (rand () % MAX_VAL) + MIN_VAL;
        }
    }

    for (g = 0;  g < m;  g++) {
        for (h = 0;  h < s;  h++) {
            ab [g][h] = 0;
            for (j = 0;  j < n;  j++)
            ab [g][h] += a [g][j] * b [j][h];
        }
    }

    if (m >= n)
        q = m;
    else
        q = n;

    printf ("\\documentclass[a4paper]{article}\n");
    printf ("\\usepackage{german,amsmath,amsfonts}\n");
    printf ("\\begin{document}\n");
    printf ("$$m = %i,n = %i,s = %i$$", m, n, s);

    printf ("$$\\left(\\begin{array}{");
    for (j = 0;  j <= n;  j++) printf ("c");
    printf ("}");
        for (i = 0;  i < q;   i++) {
            if (i < m) {
                for (j = 0;  j < n;  j++) {
                    printf ("%i&", a [i][j]);
                }
                printf ("\\\\\n");
            }
        }
    printf ("\\end{array}\\right)");
    printf ("\\left(\\begin{array}{");
    for (j = 0;  j <= s;  j++) printf ("c");
    printf ("}");

        for (i = 0;  i < q;   i++) {
            if (i < n) {
                for (j = 0;  j < s;  j++) {
                    printf ("%i&", b [i][j]);
                }
                printf ("\\\\\n");
            }
            printf ("\n");
        }
    printf ("\\end{array}\\right)\n");
    printf ("= \\left(\\begin{array}{");
    for (j = 0;  j <= s;  j++) printf ("c");
    printf ("}");

        for (i = 0;  i < m;   i++) {
                for (j = 0;  j < s;  j++)
                    printf ("%i&", ab [i][j]);
                printf ("\\\\\n");
            }
            printf ("\n");

    printf ("\\end{array}\\right)$$\n");


    printf ("\\end{document}\n");

return 0;
}