Autor Tema: Problemas en C

0 Usuarios y 1 Visitante están viendo este tema.

02 Febrero, 2009, 11:41 am
Respuesta #10

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
He creado el siguiente algoritmo para multiplicar matrices. Previamente hice algoritmos para leerlas y escribirlas que posteriormente utilizo, pero tras multiplicar las matrices, no me aparece el resultado de la multiplicación. Lo que tengo es lo siguiente:




Código: [Seleccionar]
:
void multiplica (Matriz *M1, Matriz *M2) {
Matriz M3;
int i,j,k,l;

M3.filas=M1->filas;
M3.columnas=M2->columnas;
k=0;
l=0;
i=0; j=0;

while (k<M3.filas)  {
l=0;
 while (l<M3.columnas) {
     k=0;
     M3.elem[k][l]=0;
 l=l+1;
 }
k=k+1;
}

k=0;
l=0;
while (k<M3.filas)  {
l=0;
 while (l<M3.columnas) {
     k=0;
     M3.elem[k][l]=M3.elem[k][l] + (M1->elem[i][j] * M2->elem[j][i]);
j=j+1;
l=l+1;
 }
i=i+1;
k=k+1;
}

i=0;
j=0;
k=0;
l=0;
while (i<M3.filas)  {
j=0;
 while (j<M3.columnas) {
 M2->elem[i][j]= M3.elem[k][l];
 j=j+1;
 l=l+1;
 }
 i=i+1;
 k=k+1;
 }
return;}




Se me olvidaba explicar que lo que hago al final es asignar a la matriz dos el resultado que obtengo como producto, pues luego el resultado tiene que verse sobre la misma matriz dos.

Gracias,


03 Febrero, 2009, 08:09 pm
Respuesta #11

Emaga

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 1
  • Karma: +0/-0
  • Sexo: Femenino
Hola Lambda,

Sugerencias:
1-¿has probado a hacer que te imprima la matriz M3 desde dentro de la función para comprobar que la multiplicación está bien antes de asignársela a M2?

2-si has comprobado 1, ¿has comprobado a mirar si la matriz M2 antes de salir de la función tiene el resultado de la multiplicación?

3- IMPORTANTE!! ¿M3 y M2 tienen las mismas dimensiones?

4.- Intenta probar a que la función te devuelva directamente M3, o un puntero a ella como te sea más fácil para luego poder recogerlo en tu código.
Haciendo:

Matriz multiplica (Matriz *M1, Matriz *M2){
 //tu código
   return M3;
}

o haciendo:


Matriz* multiplica (Matriz *M1, Matriz *M2){
 //tu código
   return (&M3);
}


5.- Revisa los whiles, sus condiciones de parada y la reutilización de las variables con las que recorres las matrices. Un consejo: mejor utiliza los bucles for.

Espero haberte ayudado en algo :P.

Saludos!

Eva

04 Febrero, 2009, 03:41 pm
Respuesta #12

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
Gracias Emaga, has sido muy clara y concisa.

Saludos,

04 Febrero, 2009, 05:40 pm
Respuesta #13

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
Otra pequeña duda:

Quiero crear un simple programa que lo que haga sea lo siguiente:
-Si el número introducido es menor que 5, entonces imprima por pantalla un 100; sino un 200.

Pero lo quiero hacer mediante una función externa y lo he diseñado de la siguiente manera:

Código: [Seleccionar]
#include <stdio.h>

int debe(int n){
int din;
if (n<5) {
    din=100;
}
else {
    din=200;
}
return din;}


int main(){
int h,s;
printf(" Mete el numero\n");
scanf ("%d",s);
h=debe(s);
printf ("%d",h);
return s;}

Sin embargo no me devuelve el valor que quiero, debe de ser un problema de la función que esté mal hecha, pero no se qué falla.
Si alguien sugiere algo, . . .

Gracias

04 Febrero, 2009, 06:09 pm
Respuesta #14

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
De acuerdo, simplemente era para no abrir tantos temas.