diff --git a/20221216/a.out b/20221216/a.out new file mode 100755 index 0000000000000000000000000000000000000000..963cc56fc8e17e3ee1584c53c3766e3196e5afb3 Binary files /dev/null and b/20221216/a.out differ diff --git a/20221216/main.c b/20221216/main.c new file mode 100644 index 0000000000000000000000000000000000000000..0a2a2785dcc396a9ed3f91d058f72d05629199d0 --- /dev/null +++ b/20221216/main.c @@ -0,0 +1,119 @@ +#include <stdio.h> + +#define ROWS(a) (sizeof(a) / sizeof(a[0])) +#define COLS(a) (sizeof(a[0]) / sizeof(a[0][0])) + +void input(int rows, int cols, int matrix[][cols]) { + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + printf("[%d][%d]: ", i, j); + scanf("%d", &matrix[i][j]); + } + } +} + +int count_eq(int rows, int cols, int matrix[][cols], int key) { + int ret = 0; + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + if (matrix[i][j] == key) { + ++ret; + } + } + } + return ret; +} + +int sum( + int rows1, int cols1, int a1[][cols1], + int rows2, int cols2, int a2[][cols2], + int rows3, int cols3, int a3[][cols3]) +{ + int ret; + if (rows1 == rows2 && rows2 == rows3 && cols1 == cols2 && cols2 == cols3) { + int rows = rows1; + int cols = cols1; + + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + a3[i][j] = a1[i][j] + a2[i][j]; + } + } + + ret = 0; + } else { + ret = -1; + } + return ret; +} + +void print(int rows, int cols, int matrix[][cols]) { + for (int i = 0; i < rows; ++i) { + for (int j = 0; j < cols; ++j) { + printf("%3d ", matrix[i][j]); + } + puts(""); + } +} + + +int multiply( + int rows1, int cols1, int a1[][cols1], + int rows2, int cols2, int a2[][cols2], + int rows3, int cols3, int a3[][cols3]) +{ + int ret; + if (cols1 == rows2 && rows1 == rows3 && cols2 == cols3) { + for (int i = 0; i < rows1; ++i) { + for (int j = 0; j < cols2; ++j) { + + int sum = 0; + for (int k = 0; k < rows2; ++k) { + sum += a1[i][k] * a2[k][j]; + } + a3[i][j] = sum; + + } + } + + ret = 1; + } else { + ret = -1; + } + + return ret; +} + +int main(void) { + int a1[2][3]; + int a2[3][2]; + + puts("inserimento A"); + input(ROWS(a1), COLS(a1), a1); + puts("inserimento B"); + input(ROWS(a2), COLS(a2), a2); + + int x; + printf("inserire x: "); + scanf("%d", &x); + printf("instanze di %d in A: %d\n", x, count_eq(ROWS(a1), COLS(a1), a1, x)); + + int y; + printf("inserire y: "); + scanf("%d", &y); + printf("instanze di %d in B: %d\n", y, count_eq(ROWS(a2), COLS(a2), a2, y)); + + int s[ROWS(a1)][COLS(a1)]; + if (sum(ROWS(a1), COLS(a1), a1, ROWS(a2), COLS(a2), a2, ROWS(s), COLS(s), s) < 0) { + fputs("somma impossibile\n", stderr); + } else { + print(ROWS(s), COLS(s), s); + } + + int m[2][2]; + if (multiply(ROWS(a1), COLS(a1), a1, ROWS(a2), COLS(a2), a2, ROWS(m), COLS(m), m) < 0) { + fputs("prodotto impossibile\n", stderr); + } else { + print(ROWS(m), COLS(m), m); + } +}