Hola a todos, espero me puedan ayudar con un programa que realiza la suma de matrices (suma de elemento por elemento de un arreglo bidimensional). La cuestion es que solo suma bien la primer fila pero las demas ya no. Aqui les va el codigo:
// Suma 2 matrices de N X N elementos.
#include <iostream>
#include <stdlib.h>
using namespace std;
double &elemento(double a[][100], int columnas, int fila, int columna);
void suma_matrices(double matriz_a[][100], double matriz_b[][100], double matriz_c[][100], int filas, int columnas);
void imprime_matriz(double matriz[][100], int filas, int columnas);
int main() {
int filas, columnas;
do {
cout << "Introduce el numero de filas y columnas de las matrices a sumar: ";
cin >> filas >> columnas;
} while(filas < 1 || columnas < 1);
cout << "\n";
double (*a)[100] = new double[filas][100];
double (*b)[100] = new double[filas][100];
double (*c)[100] = new double[filas][100];
// Llena las matrices.
for (int i = 1; i <= filas; ++i) {
for (int j = 1; j <= columnas; ++j) {
elemento(a, columnas, i, j) = i * (j + 1);
elemento(b, columnas, i, j) = (i + 2) * (j + 3);
}
}
// Imprime las matrices.
cout << "Matriz A:\n";
imprime_matriz(a, filas, columnas);
cout << "\nMatriz B:\n";
imprime_matriz(b, filas, columnas);
// Suma las matrices.
suma_matrices(a, b, c, filas, columnas);
// Imprime resultados.
cout << "\nEl resultado de la suma de matrices es:\n";
imprime_matriz(c, filas, columnas);
// Destruye la memoria asignada a las matrices.
delete a;
delete b;
delete c;
return EXIT_SUCCESS;
}
double &elemento(double matriz[][100], int columnas, int fila, int columna) {
double *pt_matriz = &matriz[0][0];
return *(pt_matriz + (fila -1) * columnas + (columna -1)); // Los indices de la funcion toman los valores 1, 2, 3...
} // en lugar de 0, 1, 2.
void suma_matrices(double matriz_a[][100], double matriz_b[][100], double matriz_c[][100], int filas, int columnas){
for (int i = 0; i < filas; ++i)
for (int j = 0; j < columnas; ++j) {
matriz_c[i][j] = matriz_a[i][j] + matriz_b[i][j];
double x = matriz_a[i][j];
double y = matriz_b[i][j];
cout << matriz_c[i][j] << "\t";
}
}
void imprime_matriz(double matriz[][100], int filas, int columnas){
for (int i = 1; i <= filas; ++i) {
for (int j = 1; j <= columnas; ++j) {
cout << elemento(matriz, columnas, i, j) << " ";
}
if (columnas != 1)
cout << "\n";
}
cout << "\n";
}
gracias de antemano por su ayuda.