Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No genera el resultado correcto.

Estas en el tema de No genera el resultado correcto. en el foro de C/C++ en Foros del Web. 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). ...
  #1 (permalink)  
Antiguo 02/08/2009, 20:32
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta No genera el resultado correcto.

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.
  #2 (permalink)  
Antiguo 03/08/2009, 06:55
 
Fecha de Ingreso: febrero-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: No genera el resultado correcto.

Cita:
Iniciado por kcharpas2009 Ver Mensaje
elemento(a, columnas, i, j) = i * (j + 1);
elemento(b, columnas, i, j) = (i + 2) * (j + 3);
Estas asignandole una variable a una funcion no entiendo como funcionaria eso.
  #3 (permalink)  
Antiguo 05/08/2009, 21:35
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: No genera el resultado correcto.

Cita:
Iniciado por haidion Ver Mensaje
Estas asignandole una variable a una funcion no entiendo como funcionaria eso.
Bueno, lo que sucede es que se esta pasando la funcion "elemento" como referencia, de la siguiente forma:

double &elemento(double a[][100], int columnas, int fila, int columna);

gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.