Autor
|
Tema: Matriz Triangular Superior (Leído 25,924 veces)
|
m@o_614
Desconectado
Mensajes: 389
|
Saludos tengo el siguiente codigo que me tiene que decir si una matriz es triangular superior ( o sea que todos los elementos por debajo de la diagonal sean 0) // Matriz Triangular Superior int tri_sup = 1; for(i=0;i < n-1;i++) { for(j=n-1;j > 0+i;j--) { if(matriz[j][i] == 0) tri_sup = 1; else tri_sup = 0; } }/*
pero el problema es que cuando le ingreso una matriz que no es Triangular Sup, me aparece que si lo es. Y no tengo idea de donde podria estar el error de antemano gracias
|
|
|
En línea
|
|
|
|
engel lex
|
asumo que n es el lado de la matriz... un ejercicio mental para ver como corre 1 2 3 0 1 2 0 0 1 tu algoritmo solo recorre los valores [2][0] [1][0] [2][1] es decir si el valor m(2,1) es 0 eso es correcto... los otros no importan, esto sin importar el tamaño de la matriz... ya que si la matriz es 1 2 3 1 2 3 1 0 3 eso será valido, eso pasa porque no arrastras una valor para medir, sino que simplemente lo alteras como quieres... mejor has int tri_sup = 1; for(i=0;i < n-1;i++) { for(j=n-1;j > 0+i;j--) { if(matriz[j][i] == 0) tri_sup *= 1; else tri_sup *= 0; } }
(a*=b, quiere decir a=a*b) en ese caso si algún valor es incorrecto tri_sup se multiplicará por 0, y todo lo consecuente será 0
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
Hola m@o_614. ... #define MAX_COL ... #define MAX_ROW ... int IsTriangSup(int mat[][MAX_COL]) { int f, r, sup = 1; for(f = 0; f < MAX_ROW; f++) for(r = 0; r < MAX_COL; r++) if(f > r && mat[f][r] != 0) sup = 0; return sup; } int main() { int mat[MAX_ROW][MAX_COL]; ... if (IsTriangSup(mat)) { ... }
Saludos
|
|
|
En línea
|
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
Muchas gracias ya pude averiguar cual era el fallo del codigo int tri_sup =1; for(i=0;i < n-1;i++) { for(j=n-1;(j > 0+i)&&(tri_sup);j--) { if(matriz[j][i] == 0) tri_sup = 1; else tri_sup = 0; } }
el problema de que no me marcaba bien si era triangular superior o no era porque aunque el ciclo ya me habia indicado que no era triangular superior por que algun miembro (matriz[j] ) que esta debajo de la diagonal no era 0, el ciclo no se terminaba seguia y seguia, la manera que encontre de solucionarlo ps fue poniendo una bandera en la condicion de que terminara el ciclo cuando tri_sup == 0
engelx n significaba el tamanio de la matriz
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Buenas!! m@o_614 tu código se puede mejorar un pelín: int tri_sup =1; for(i=0;i < n-1;i++) { for(j=n-1;(j > 0+i)&&(tri_sup);j--) { if(matriz[j][i] != 0) tri_sup = 0; } }
Ya estás asumiendo al principio que es triangular superior (tri_sup = 1), entonces solo debes controlar el caso que cambie eso (matriz[ j][ i] != 0) Saludetes
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
A mi me rechina un poco en el segundo for la instrucción (j > 0+i)
Funcionar funcionará... pero ese for no queda más claro así? for(j=n-1;(j > i)&&(tri_sup);j--)
y luego lo que dice satu, ese if else sobra también. Dado que tri_sup tiene un valor inicial 1, el bucle solo debería preocuparse de darle valor 0 cuando proceda... volver a poner un 1 es absurdo, te hace poner más líneas de código que no solo no aportan nada sino que a la larga dificultan la lectura del código.
|
|
|
En línea
|
|
|
|
engel lex
|
en ese caso en vez de poner tantas condiciones al for no es más facil un break y listo? XD
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Otra forma de verificar si una matriz cuadrada es triangular superior: #include <stdio.h> #include <stdlib.h> int main(void) { int num [3][3] = { {1, 2, 3}, {0, 5, 6}, {0, 0, 9} }; int N = 3; int i; int j; i = 1; j = 0; while (i < N && num[i][j] == 0) if (++j == i){ i++; j = 0; } printf("Es triangular superior? %s\n", i == N ? "Si" : "No"); return EXIT_SUCCESS; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
engel lex
|
rir3760
me gustó mucho tu solucion, es un poco rara a primera vista, pero se ve perfecta... pocas lineas, un solo ciclo...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
muchas gracias, ya le hice los cambios que me dijeron y funciona perfecto
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Suma triangulo superior matriz
Programación C/C++
|
Constantinoplero
|
5
|
13,075
|
23 Enero 2012, 00:59 am
por Constantinoplero
|
|
|
[Consulta] Matriz triangular inferior y superior en C++
Programación C/C++
|
romybe
|
1
|
9,521
|
20 Julio 2015, 21:21 pm
por romybe
|
|
|
matriz triangular superior
Programación C/C++
|
openclasroom
|
1
|
2,949
|
24 Octubre 2017, 16:07 pm
por engel lex
|
|
|
[ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C.
« 1 2 »
Programación C/C++
|
dijsktra
|
13
|
6,858
|
3 Mayo 2020, 20:21 pm
por fary
|
|
|
[ALGEBRA DE MATRICES] Matriz triangular INFERIOR DESCENDIENTE en C.
Programación C/C++
|
dijsktra
|
7
|
5,185
|
19 Mayo 2020, 21:18 pm
por dijsktra
|
|