#include <stdio.h>
#include <stdlib.h>
typedef struct matrix{
double **data;
int lines;
int columns;
}matrix;
// Returns an empty matrix ready for use. Should be called in every matrix initialization;
matrix emptyMatrix()
{
matrix var;
var.data = NULL;
var.lines = 0;
var.columns = 0;
return var;
}
// Starts a matriz by dynamic allocation
matrix startMatrix(int lin, int col)
{
matrix var;
// Make the atribuition of the matrix lines and columns size
var.lines = lin;
var.columns = col;
// Starts the matrix lines
var.
data = (double **) malloc( lin
* sizeof(double *) );
for(int i = 0 ; i < lin ; i++)
{
*(var.
data + i
) = (double *) malloc( col
* sizeof(double) ); }
return var;
}
// Frees the dynamically allocated memory
void endMatrix(matrix mat)
{
for(int i = 0 ; i < mat.lines ; i++)
{
}
mat.lines = 0;
mat.columns = 0;
return;
}
int main()
{
matrix var = emptyMatrix();
var = startMatrix(3, 3);
for(int i = 0 ; i < var.lines ; i++)
for(int j = 0 ; j < var.columns ; j++)
var.data[i][j] = i+j;
for(int i = 0 ; i < var.lines ; i++)
{
for(int j = 0 ; j < var.columns ; j++)
printf("%lf ", var.
data[i
][j
]);
}
endMatrix(var);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG1hdHJpeHsKCWRvdWJsZSAqKmRhdGE7CglpbnQgbGluZXM7CglpbnQgY29sdW1uczsKfW1hdHJpeDsKCi8vIFJldHVybnMgYW4gZW1wdHkgbWF0cml4IHJlYWR5IGZvciB1c2UuIFNob3VsZCBiZSBjYWxsZWQgaW4gZXZlcnkgbWF0cml4IGluaXRpYWxpemF0aW9uOwptYXRyaXggZW1wdHlNYXRyaXgoKQp7CgltYXRyaXggdmFyOwoJCgl2YXIuZGF0YSA9IE5VTEw7Cgl2YXIubGluZXMgPSAwOwoJdmFyLmNvbHVtbnMgPSAwOwoJCglyZXR1cm4gdmFyOwkKfQoKLy8gU3RhcnRzIGEgbWF0cml6IGJ5IGR5bmFtaWMgYWxsb2NhdGlvbgptYXRyaXggc3RhcnRNYXRyaXgoaW50IGxpbiwgaW50IGNvbCkKewoJbWF0cml4IHZhcjsKCQoJLy8gTWFrZSB0aGUgYXRyaWJ1aXRpb24gb2YgdGhlIG1hdHJpeCBsaW5lcyBhbmQgY29sdW1ucyBzaXplCgl2YXIubGluZXMgPSBsaW47Cgl2YXIuY29sdW1ucyA9IGNvbDsKCQoJLy8gU3RhcnRzIHRoZSBtYXRyaXggbGluZXMKCXZhci5kYXRhID0gKGRvdWJsZSAqKikgbWFsbG9jKCBsaW4gKiBzaXplb2YoZG91YmxlICopICk7CgkKCWZvcihpbnQgaSA9IDAgOyBpIDwgbGluIDsgaSsrKQoJewoJCSoodmFyLmRhdGEgKyBpKSA9IChkb3VibGUgKikgbWFsbG9jKCBjb2wgKiBzaXplb2YoZG91YmxlKSApOwoJfQoJCglyZXR1cm4gdmFyOwoJCn0KCi8vIEZyZWVzIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5CnZvaWQgZW5kTWF0cml4KG1hdHJpeCBtYXQpCnsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbWF0LmxpbmVzIDsgaSsrKQoJewoJCWZyZWUoICoobWF0LmRhdGEgKyBpKSApOwoJfQoJCglmcmVlKCBtYXQuZGF0YSApOwoJCgltYXQubGluZXMgPSAwOwoJbWF0LmNvbHVtbnMgPSAwOwoKCXJldHVybjsKfQoKaW50IG1haW4oKQp7CgltYXRyaXggdmFyID0gZW1wdHlNYXRyaXgoKTsKCQoJdmFyID0gc3RhcnRNYXRyaXgoMywgMyk7CQoKCWZvcihpbnQgaSA9IDAgOyBpIDwgdmFyLmxpbmVzIDsgaSsrKQoJCWZvcihpbnQgaiA9IDAgOyBqIDwgdmFyLmNvbHVtbnMgOyBqKyspCgkJCXZhci5kYXRhW2ldW2pdID0gaStqOwoJCQkKCQoJZm9yKGludCBpID0gMCA7IGkgPCB2YXIubGluZXMgOyBpKyspCgl7CgkJZm9yKGludCBqID0gMCA7IGogPCB2YXIuY29sdW1ucyA7IGorKykKCQkJcHJpbnRmKCIlbGYgIiwgdmFyLmRhdGFbaV1bal0pOwoJCQkKCQlwdXRjaGFyKCdcbicpOwoJfQkJCgkKCWVuZE1hdHJpeCh2YXIpOwoJCglyZXR1cm4gMDsKfQ==