[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