AYUDA: En busqueda del algoritmo en C

Hola a todos no se si será este el lugar correcto, xo necesito que me echeis un rollo entero de cable, xq estoy a punto de pegarme un tiro, necesito un algoritmo, sin punteros, sólo con matrices, para multiplicar dos matrices cuadradas, de dimensión "n", es decir la dimensión de las matrices la mete el usuario, y tengo todo exo muy bonito, xo a la hora de multiplicarlas, no soy capaz de hacer el algoritmo.
La cosa va así, para multiplicar las matrices, por ejemplo una de 2x2, sería así, hay que multiplicar la posición 00 de la primera por la posición 00 de la segunda, después la posición 01 de la primera por la posición 10 de la segunda, y el resultado de ambas multiplicaciones sumarlo, para obtener la posición 00, en la matriz del resultado, que por supuesto sería del mismo tamaño,es decir, se multiplica la fila de la primera matriz, por la columna de la segunda, no se si lo vais pillando...
Lo que no se, es hacer un algoritmo general, para que me haga todo el proceso.
Lo que tengo de la función es sólo el pedir los datos al usuario para rellenar las matrices, después vendría el algoritmo para multiplicarlas y poner el resultado en la matriz final, lo único que le paso a la función es el tamano que van a tener las matrices, para que pida al usuario tantos número como el tamaño de las matrices y poder completarlas para hacer las multiplicaciones.
Si alguien domina de C y me ha entendido, xq no se si me he explicado correctamente, le pido con toda la urgencia del mundo, que me indique al menos la forma para poder hacer el puñetero algoritmo con el mínimo código posible, ya que nos obligan a entregar las prácticas lo más optimizadas posibles.
Gracias a todos, y espero q alguien pueda ayudarme.
Son tres for's, el algoritmo es orden de n^3. A ver si no me lio...
for(i=0; i<N; i++)
  for(j=0; j<N;j++) {
    matR[i][j]=0;  /*Aquí la inicializamos*/
    for(k=0; k<N; k++)
      matR[i][j]=matR[i][j]+matA[i][k]*matB[k][j];
  }


Fijate muy bien en los indices y hazte una traza con mucha paciencia.

Saludos
Changelog xD : Solucionados el [CODE] y el producto :wq
Muxas gracias por el algoritmo, te debo la vida.
He tenido que hacer algunas modificaciones y currarme la secuencia para comprobarlo, xo ya está, lo único que en vez de sumar como tienes las matrices a y b, es multiplicarlas, xo todo perfecto, te quiero tío [inlove], y bueno, yo las matrices se las pido al usuario, no las inicializo yo.
Mira mi función quedó tal que asín, la "t" de las matrices es una variable definida como 20, y las matrices sólo se completarán hasta el tamaño (variable "tamano") que decida el usuario, ya le indico que sea un número entre 2 y 20, xq sino peta, es una movida rara, xq sino el puto borland no me lo cogía bien:

void multiplicacion (int tamano)
{
int i, j, k, matrizuno[t][t], matrizdos[t][t], matrizresult[t][t];

// inicializo la matriz result a cero
for (i=0; i {
for (j=0; j {
matrizresult[i][j]=0;
}
}
//le pido al usuario que introduzca los datos para rellenar las matrices
for (i=0; i {
for (j=0; j {
printf ("Introduce un número para la primera matriz:\n");
fflush(stdin);
scanf ("%i", &matrizuno[i][j]);
}
}
// visualiza primera matriz
for (i=0; i {
for (j=0; j {
printf ("%i\t", matrizuno[i][j]);
}
}
printf("\n\n");

for (i=0; i {
for (j=0; j {
printf ("Introduce un número para la segunda matriz:\n");
fflush(stdin);
scanf ("%i", &matrizdos [i][j]);
}
}
// visualiza segunda matriz
for (i=0; i {
for (j=0; j {
printf ("%i\t", matrizdos[i][j]);
}
}
printf("\n\n");
//multiplicar
for (i=0; i {
for (j=0; j {
for (k=0; k {
matrizresult[i][j]=matrizresult[i][j]+ (matrizuno[i][k]*matrizdos[k][j]);
}
}
} //visualiza
for (i=0; i {
for (j=0; j {
printf ("%i\t", matrizresult[i][j]);
}
}
printf("\n\n");

}

Pues muchas gracias, toy empezando, xo weno, poco a poco.

[tadoramo][tadoramo]Salu2 Oh salvador [tadoramo][tadoramo]
matR[i][j]=matR[i][j]+matA[i][k]+matB[k][j];

¿Esto no deberia ser un producto?

Personalmente yo haria

matR[i][j]+=matA[i][k]*matB[k][j];
(en teoria es más eficiente en la practica el
compilador hace que sea igual)

Si queres que tu codigo quede ya guapo del todo
defience funciones al menos para lo de leer mostrar matriz
asi te ahorras repetir el codigo
Si si, es un producto, se me fué la olla xD
Por cierto, la matriz de resultados si que la tienes que inicializar, puesto que en matR[i][j] puede haber cualquier cosa y la vamos a usar de acumulador. Tu lo haces al empezar el programa, yo lo hago al operar y asi me ahorro un recorrido de la matriz

Saludos
Muxas gracias a los dos. Ya retoqué el código. Lo que tenía para visualizar las matrices era sólo para ver que me las rellenaba correctamente. Y teneis razón en lo de inicializar la matriz resultado. Lo retocaré un poco más.
Gracias.

Salu2
5 respuestas