[C con Clase] LLENAR LA MATRIZ DINAMICA
Steven Richard Davidson
stevenrichard.davidson en gmail.com
Vie Sep 7 22:34:36 CEST 2007
Hola César Andrés,
On 9/7/07, CESAR ANDRES ROMERO <anromartinez en hotmail.com> wrote:
> HOLA AMIGO!! REQUIERO SU GRAN AYUDA, YA QUE TENGO EL SIGUIENTE FRAGMENTO DE CODIGO, PERO NO PUEDO HACER QUE LA LLENE DINAMICAMENTE. ME PODRIAN AYUDAR PORFA
>
Preguntaste acerca de esto hace unos meses, y se te contestó en el
momento. Como recordatorio, consulta el capítulo 17 de nuestro curso
de C++ acerca del uso de punteros y memoria dinámica para varias
dimensiones. El enlace es:
http://c.conclase.net/curso/index.php?cap=017
> /* PROGRAMA QUE MULTIPLICA MATRIZ DINAMICA */
>
Me temo que el siguiente código fuente no usa memoria dinámicamente,
por lo que no podemos asegurar si estas haciendo las cosas
correctamente.
> #include "iostream.h"
>
Esto debería ser:
#include <iostream>
using namespace std;
Si estás usando un compilador "antiguo", entonces seguramente lo
anterior provocará un error.
> void multiplicar(int a[][25],int b[][50], int c[][50],int n,int m,int o)
Supongo que estás intentando multiplicar dos matrices: n x m, y m x
o, dictado por las propiedades matemáticas del álgebra lineal. Si esto
es así, entonces tienes unos cuantos errores en su implementación.
> {
> int i,j,k;
>
> for(i=0;i<n;i++)
> {
> for(j=0;j<o;j++)
> {
>
> for(k=1;k<m;k++)
>
> {
> if(n>=m)
>
No tiene sentido comprobar las dimensiones n y m, ya que la fórmula es la misma.
> c[i][j]=a[i][i-i]*b[i-i][j]+a[i][k]*b[k][j];
Esto no es correcto. En primer lugar, estás usando el índice 'i-i',
que obviamente siempre será 0 (cero). En segundo lugar, lo que tienes
que hacer es usar cada elemento de 'c' como un acumulador de una suma.
Por lo tanto, sugiero asignar 0's a cada elemento previamente a este
tercer bucle 'for' . Esto es,
for( i=0; i<n; i++ )
for( j=0; j<o; j++ )
{
c[i][j] = 0; // Asignar el valor inicial de 0 a cada elemento c[i,j]
for( k=1; k<m; k++ )
c[i][j] += a[i][k] * b[k][j]; // Acumular cada producto
}
> }
> }
>
> if(n<m)
> for(i=0;i<m;i++)
> {
> for(j=0;j<o;j++)
> {
>
> for(k=1;k<n;k++)
> {
> c[i][j]=a[i][i-i]*b[i-i][j]+a[i][k]*b[k][j]+a[i][k+1]*b[k+1][j];
>
> }
> }
> }
> }
Las demás sentencias son superfluas.
> }
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase