Skip to content

Instantly share code, notes, and snippets.

@PedroHLC
Created December 13, 2016 19:26
Show Gist options
  • Save PedroHLC/81ac76aa3201a76bb791e984b5a726e4 to your computer and use it in GitHub Desktop.
Save PedroHLC/81ac76aa3201a76bb791e984b5a726e4 to your computer and use it in GitHub Desktop.
Experimento somando matrizes
#include <stdlib.h>
#include <iostream>
using namespace std;
class Matriz {
private:
double *data;
size_t cols;
size_t lins;
public:
Matriz(size_t l, size_t c, double *src) {
data = new double[l*c];
lins = l;
cols = c;
if(src != NULL) {
double *src_end=src+((l-1)*c), *data_i=data;
for(double *src_i=src; src_i < src_end; src_i++){
*src_i = *data_i;
data_i++;
}
} else {
double *data_end=data+((l-1)*c);
for(double *data_i=data; data_i<data_end; data_i++) {
*data_i = 0;
}
}
}
~Matriz() {
delete[] data;
}
void setElem(size_t i, size_t j, double v) {
*(data + (cols * i) + j) = v;
}
double getElem(size_t i, size_t j) {
return *(data + (cols * i) + j);
}
friend Matriz operator+(Matriz m1, Matriz m2) {
size_t l = max(m1.lins, m2.lins),
c = max(m1.cols, m2.cols);
Matriz m3(l, c, NULL);
for(size_t i=0; i<l; i++)
for(size_t j=0; j<c; j++) {
if(i > m1.lins || j > m1.cols)
m3.setElem(i, j, m2.getElem(i,j));
else if(i > m2.lins || j > m2.cols)
m3.setElem(i, j, m1.getElem(i,j));
else
m3.setElem(i, j, m1.getElem(i,j) + m2.getElem(i,j));
}
return m3;
}
};
int main() {
Matriz m1(4, 2, NULL), m2(2, 4, NULL), m3 = m1 + m2;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment