
Verificar si una matriz es diagonal
Publicado por Maxi (3 intervenciones) el 17/10/2013 21:03:56
Hola a todos, necesito ayuda para optimizar la solución de un problema. El problema consiste en hacer una función que verifique si una matriz es diagonal o no (matriz diagonal: todos sus elementos excepto los que están situados en la diagonal principal deben ser ceros, pudiendo ser los de la diagonal ceros o no).
Yo hice esta función usando dos ciclos for, la cual devuelve el resultado esperado:
function verificarSiEsDiagonal(rango:integer;var matriz:tmatriz):boolean;
{Esta funcion verifica si la matriz ingresada es diagonal o no; en caso que lo sea devuelve true,
caso contrario devuelve false.}
Pero si quisiera optimizarla, y que no recorra elemento por elemento (de los que no están en la diagonal) para decir si la matriz es diagonal o no, ¿cómo podría hacerlo usando dos while o dos repeat? Algo que sea, mientras i<>j y matriz[i,j]<>0, verificarSiEsDiagonal:=false.
Yo hice este intento pero no funciona:
function verificarSiEsDiagonal(rango:integer;var matriz:tmatriz):boolean;
{Esta funcion verifica si la matriz ingresada es diagonal o no; en caso que lo sea devuelve true,
caso contrario devuelve false.}
Si alguien pudiera ayudarme sería de gran ayuda!
Yo hice esta función usando dos ciclos for, la cual devuelve el resultado esperado:
function verificarSiEsDiagonal(rango:integer;var matriz:tmatriz):boolean;
{Esta funcion verifica si la matriz ingresada es diagonal o no; en caso que lo sea devuelve true,
caso contrario devuelve false.}
1
2
3
4
5
6
7
8
9
var i,j:integer;
begin
for i:=1 to rango do
begin
for j:=1 to rango do
if (i<>j) then
if (matriz[i,j]<>0) then verificarSiEsDiagonal:=false;
end;
end;
Pero si quisiera optimizarla, y que no recorra elemento por elemento (de los que no están en la diagonal) para decir si la matriz es diagonal o no, ¿cómo podría hacerlo usando dos while o dos repeat? Algo que sea, mientras i<>j y matriz[i,j]<>0, verificarSiEsDiagonal:=false.
Yo hice este intento pero no funciona:
function verificarSiEsDiagonal(rango:integer;var matriz:tmatriz):boolean;
{Esta funcion verifica si la matriz ingresada es diagonal o no; en caso que lo sea devuelve true,
caso contrario devuelve false.}
1
2
3
4
5
6
7
8
9
10
11
12
var i,j:integer;
begin
i:=1;
j:=1;
while (i<>j) do
begin
while (i<=rango) and (j<=rango) do
begin
if (matriz[i,j]<>0) then verificarSiEsDiagonal:=false;
end;
end;
end;
Si alguien pudiera ayudarme sería de gran ayuda!
Valora esta pregunta


0