| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
mar5
Registrado: 18 Ene 2011 Mensajes: 21
| Publicado: 10/03/2011 1:51 pm | | | Título: Problema con un algoritmo |
| Hola me gustaria saber si me podeis hechar una mano con un problema que tengo,es una bobada pero no me sale...
Lo que tengo es una matriz p[i][j] donde i va hasta N componentes y j<3 y lo que quiero es calcular la resta p[i][0]-p[i][0] entendiendo que el segundo indice i no puede ser igual que el primero,es decir si N es 3 quiero saber p[0][0]-p[1][0] p[0][0]-p[2][0]
p[0][1]-p[1][1] p[0][1]-p[2][1]
p[0][2]-p[1][2] p[0][2]-p[2][2] como puedo escribir un algoritmo que me lo escriba? muchas gracias |
|
| Volver arriba | |
 |
Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 961
| Publicado: 10/03/2011 5:05 pm | | | Título: |
| Hola mar5.
i == i tome el valor que tome i. Con lo cual p[i][0] == p[i][0] siempre.
De los ejemplos que pones puedo deducir que lo que realmente quieres obtener es las restas p[i][k] - p[j][k] donde i es distinto de j. También supongo que i y j toman valores entre 0 i N y k toma valores entre 0 i 2.
Así que para encontrar todas las posibles restas hay que usar for's para recorrer cada indice i,j y k en sus respectivos rangos. Hay que evitar hacer la resta cuando i == j. Esto se puede hacer comprobando que i != j dentro de un if.
Un saludo! |
|
| Volver arriba | |
 |
mar5
Registrado: 18 Ene 2011 Mensajes: 21
| Publicado: 11/03/2011 1:11 am | | | Título: |
| Muchas gracias por la respuesta. Efectivamente eso es lo que quiero hacer y lo que me dices es lo que ya habia estado probando pero si suponemos por ejemplo que k<1 y i,j<3
| Código: |
for(i=0;i<3;i++) for(j=0;j<3;j++) for(k=0;k<1;k++){ if(i!=j){ x[i]=(p[i][k]-p[j][k]); } }
|
En teoria ,lo que yo quiero que me salga es lo siguiente pero no me sale
p[0][0]-p[1][0] p[0][0]-p[2][0]
p[1][0]-p[0][0] p[1][0]-p[2][0]
p[2][0]-p[0][0] p[2][0]-p[1][0]
supongo que el error esta en x[i],pero ya he probado a llamar x con otro indice y tampoco salen todos los valores que deberian salir
un saludo |
|
| Volver arriba | |
 |
|
Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 961
| Publicado: 11/03/2011 4:16 am | | | Título: |
| Tomo tu bucle de ejemplo y lo modifico un poco:
| Código: | for(i=0;i<3;i++) for(j=0;j<3;j++) for(k=0;k<1;k++){ if(i!=j){ printf(" p[%d][%d] - p[%d][%d] = %d\n", i,k,j,k, (p[i][k]-p[j][k]); } } |
Si lo sustituyes en tu código verás que las restas las hace todas. Lo que ocurre es que si lo guardas en un vector x recorriendo el indice i, se te superpondrán unas restas encima de las otras y cuando muestres el resultado, no será el deseado. Hay varias maneras de guardar todos los resultado en el vector x pero haciendo x[i] = no es una de ellas.
Edit: piensa que para tu bucle hay 6 restas posibles y tu las guardas en un vector con indices que solo van del 0 al 2.
Un saludo! |
|
| Volver arriba | |
 |
|
|