Ejercicio 13

Ejercicio 13

de Camila Loureiro Daher -
Número de respuestas: 2

Buen día! Quería pedir una mano con el ejercicio 13.

Se me ocurrió realizar un código del estilo:


En el código faltaría arreglar la condición de no estar en el bordes, que como puede verse presenta mal los ceros (línea 7), no se me ocurre como hacer esto sin una cantidad excesiva de if. Si además considero matrices que no son cuadradas el problema se agranda.

Tal vez haya una forma más fácil de plantearlo, agradezco  me puedan orientar!

En respuesta a Camila Loureiro Daher

Re: Ejercicio 13

de Eduardo Fernandez -

Hola,

No hay solución única a este problema (ni a ningun otro). 

Tendrías que considerar desde un principio el tema de si la matriz es o no es cuadrada (en la letra aclara que no tiene por qué ser cuadrada). 

Hay que pensar cuáles son las posibles configuraciones que se pueden dar (dependiendo de la forma de la matriz de entrada) y ver cómo solucionarlas: mas filas que columnas; igual nro de filas y columnas; más columnas que filas. 

Una solución "sencilla" puede ser el utilizar tres FOR consecutivos, uno para cada diagonal, analizando de qué elemento a qué elemento va cada diagonal.

Otra solución es un único FOR para construir la matriz tridiagonal de M, que recorra casi todas las diagonales, pero que el "remate" lo resuelva después del for, donde según la configuración de la matriz tendrá que hacer cosas distintas. 

No se recomienda hacer un doble FOR que recorra toda la matriz y vaya viendo si cada elemento cumple con las propiedades de las tridiagonales para copiarlo a la matriz final. Esto no se considera eficiente, porque recorre demasiados elementos que están por fuera de las 3 diagonales. 

Espero haber sido medianamente claro. Si te quedan dudas te aconsejo ir a alguno de los prácticos. 

saludos,

Eduardo