#include <stdio.h>
#include <stdlib.h>
#ifndef MATRIZ_H
#define MATRIZ_H
#include <stdbool.h>
typedef struct Matriz Matriz;
Matriz* matriz_create(int rows, int cols);
void matriz_destroy(Matriz* matriz);
void matriz_print(Matriz* matriz);
double matriz_get(Matriz* matriz, int row, int col);
void matriz_set(Matriz* matriz, int row, int col, double value);
int matriz_rows(Matriz* matriz);
int matriz_cols(Matriz* matriz);
bool matriz_equals(Matriz* matriz1, Matriz* matriz2);
// New functions
Matriz* matriz_add(Matriz* matriz1, Matriz* matriz2);
Matriz* matriz_sub(Matriz* matriz1, Matriz* matriz2);
Matriz* matriz_scalar_mul(Matriz* matriz, double scalar);
Matriz* matriz_transpose(Matriz* matriz);
bool matriz_is_symmetric(Matriz* matriz);
#endif
struct Matriz {
double** array;
int rows;
int cols;
};
Matriz* matriz_create(int rows, int cols) {
Matriz
* matriz
= malloc(sizeof(Matriz
));
matriz
->array
= malloc(sizeof(double*) * rows
); for (int i = 0; i < rows; i++) {
matriz
->array
[i
] = malloc(sizeof(double) * cols
); }
matriz->rows = rows;
matriz->cols = cols;
return matriz;
}
void matriz_destroy(Matriz* matriz) {
for (int i = 0; i < matriz->rows; i++) {
}
}
void matriz_print(Matriz* matriz) {
for (int i = 0; i < matriz->rows; i++) {
for (int j = 0; j < matriz->cols; j++) {
printf("%.4f ", matriz
->array
[i
][j
]); }
}
}
double matriz_get(Matriz* matriz, int row, int col) {
return matriz->array[row][col];
}
void matriz_set(Matriz* matriz, int row, int col, double value) {
matriz->array[row][col] = value;
}
int matriz_rows(Matriz* matriz) {
return matriz->rows;
}
int matriz_cols(Matriz* matriz) {
return matriz->cols;
}
bool matriz_equals(Matriz* matriz1, Matriz* matriz2) {
if (matriz1->rows != matriz2->rows || matriz1->cols != matriz2->cols) {
return false;
}
for (int i = 0; i < matriz1->rows; i++) {
for (int j = 0; j < matriz1->cols; j++) {
if (matriz1->array[i][j] != matriz2->array[i][j]) {
return false;
}
}
}
return true;
}
int main(void) {
/* code */
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpZm5kZWYgTUFUUklaX0gKI2RlZmluZSBNQVRSSVpfSAoKI2luY2x1ZGUgPHN0ZGJvb2wuaD4KCnR5cGVkZWYgc3RydWN0IE1hdHJpeiBNYXRyaXo7CgpNYXRyaXoqIG1hdHJpel9jcmVhdGUoaW50IHJvd3MsIGludCBjb2xzKTsKdm9pZCBtYXRyaXpfZGVzdHJveShNYXRyaXoqIG1hdHJpeik7CnZvaWQgbWF0cml6X3ByaW50KE1hdHJpeiogbWF0cml6KTsKZG91YmxlIG1hdHJpel9nZXQoTWF0cml6KiBtYXRyaXosIGludCByb3csIGludCBjb2wpOwp2b2lkIG1hdHJpel9zZXQoTWF0cml6KiBtYXRyaXosIGludCByb3csIGludCBjb2wsIGRvdWJsZSB2YWx1ZSk7CmludCBtYXRyaXpfcm93cyhNYXRyaXoqIG1hdHJpeik7CmludCBtYXRyaXpfY29scyhNYXRyaXoqIG1hdHJpeik7CmJvb2wgbWF0cml6X2VxdWFscyhNYXRyaXoqIG1hdHJpejEsIE1hdHJpeiogbWF0cml6Mik7CgovLyBOZXcgZnVuY3Rpb25zCk1hdHJpeiogbWF0cml6X2FkZChNYXRyaXoqIG1hdHJpejEsIE1hdHJpeiogbWF0cml6Mik7Ck1hdHJpeiogbWF0cml6X3N1YihNYXRyaXoqIG1hdHJpejEsIE1hdHJpeiogbWF0cml6Mik7Ck1hdHJpeiogbWF0cml6X3NjYWxhcl9tdWwoTWF0cml6KiBtYXRyaXosIGRvdWJsZSBzY2FsYXIpOwpNYXRyaXoqIG1hdHJpel90cmFuc3Bvc2UoTWF0cml6KiBtYXRyaXopOwpib29sIG1hdHJpel9pc19zeW1tZXRyaWMoTWF0cml6KiBtYXRyaXopOwoKI2VuZGlmCgpzdHJ1Y3QgTWF0cml6IHsKICAgIGRvdWJsZSoqIGFycmF5OwogICAgaW50IHJvd3M7CiAgICBpbnQgY29sczsKfTsKCk1hdHJpeiogbWF0cml6X2NyZWF0ZShpbnQgcm93cywgaW50IGNvbHMpIHsKICAgIE1hdHJpeiogbWF0cml6ID0gbWFsbG9jKHNpemVvZihNYXRyaXopKTsKCiAgICBtYXRyaXotPmFycmF5ID0gbWFsbG9jKHNpemVvZihkb3VibGUqKSAqIHJvd3MpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBtYXRyaXotPmFycmF5W2ldID0gbWFsbG9jKHNpemVvZihkb3VibGUpICogY29scyk7CiAgICB9CiAgICBtYXRyaXotPnJvd3MgPSByb3dzOwogICAgbWF0cml6LT5jb2xzID0gY29sczsKCiAgICByZXR1cm4gbWF0cml6Owp9Cgp2b2lkIG1hdHJpel9kZXN0cm95KE1hdHJpeiogbWF0cml6KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdHJpei0+cm93czsgaSsrKSB7CiAgICAgICAgZnJlZShtYXRyaXotPmFycmF5W2ldKTsKICAgIH0KICAgIGZyZWUobWF0cml6LT5hcnJheSk7CiAgICBmcmVlKG1hdHJpeik7Cn0KCnZvaWQgbWF0cml6X3ByaW50KE1hdHJpeiogbWF0cml6KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdHJpei0+cm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtYXRyaXotPmNvbHM7IGorKykgewogICAgICAgICAgICBwcmludGYoIiUuNGYgIiwgbWF0cml6LT5hcnJheVtpXVtqXSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KfQoKZG91YmxlIG1hdHJpel9nZXQoTWF0cml6KiBtYXRyaXosIGludCByb3csIGludCBjb2wpIHsKICAgIHJldHVybiBtYXRyaXotPmFycmF5W3Jvd11bY29sXTsKfQoKdm9pZCBtYXRyaXpfc2V0KE1hdHJpeiogbWF0cml6LCBpbnQgcm93LCBpbnQgY29sLCBkb3VibGUgdmFsdWUpIHsKICAgIG1hdHJpei0+YXJyYXlbcm93XVtjb2xdID0gdmFsdWU7Cn0KCmludCBtYXRyaXpfcm93cyhNYXRyaXoqIG1hdHJpeikgewogICAgcmV0dXJuIG1hdHJpei0+cm93czsKfQoKaW50IG1hdHJpel9jb2xzKE1hdHJpeiogbWF0cml6KSB7CiAgICByZXR1cm4gbWF0cml6LT5jb2xzOwp9Cgpib29sIG1hdHJpel9lcXVhbHMoTWF0cml6KiBtYXRyaXoxLCBNYXRyaXoqIG1hdHJpejIpIHsKICAgIGlmIChtYXRyaXoxLT5yb3dzICE9IG1hdHJpejItPnJvd3MgfHwgbWF0cml6MS0+Y29scyAhPSBtYXRyaXoyLT5jb2xzKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF0cml6MS0+cm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtYXRyaXoxLT5jb2xzOyBqKyspIHsKICAgICAgICAgICAgaWYgKG1hdHJpejEtPmFycmF5W2ldW2pdICE9IG1hdHJpejItPmFycmF5W2ldW2pdKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRydWU7Cn0KCgppbnQgbWFpbih2b2lkKSB7CiAgICAvKiBjb2RlICovCiAgICByZXR1cm4gMDsKfQo=