Matrice Triangolare [Pascal]

friggi195
Salve a tutti,
so di sottoporvi un quesito forse un po' complesso (non perché non ci sia chi lo sa, ma scrivere codice e farlo interpretare non è sempre semplicissimo!)
Io ho creato due funzioni in Pascal (bleah!) per capire se una matrice è triangolare o meno. Il problema è che con la triangolare superiore funziona, con la triangolare inferiore (ovviamente) no!
Gentilmente potete dare un'occhiata e vedere se riuscite a trovare l'errore? GRAZIE MILLE ;)


function TriangolareSuperiore(M: TMAT; R,C: longint):boolean;
var I,J: longint;
TS: boolean;
begin
TS:=false;
for I:=1 to R do
begin
J:=1;
while ((I-J)>0) AND (J<=C) AND TS do
begin
if (M[I,J]=0) then
TS:=true
else
begin
TS:=false;
TriangolareSuperiore:=TS;
end;
J:=J+1;
end;
end;
TriangolareSuperiore:=TS;
end;

function TriangolareInferiore(M: TMAT; R,C: longint):boolean;
var I,J: longint;
TI: boolean;
begin
TI:=false;
for I:=1 to R do
begin
J:=1;
while ((I-J)<0) AND (J<=C) AND TI do
begin
if (M[I,J]=0) then
TI:=true
else
begin
TI:=false;
TriangolareInferiore:=TI;
end;
J:=J+1;
end;
end;
TriangolareInferiore:=TI;
end;

Un saluto a tutti!!

Risposte
adaBTTLS1
non l'ho visto con molta calma, e poi sono secoli che non programmo più, ma mi pare che il problema sia nell'istruzione "while":
nella triangolare superiore scrivi "while (i-j>0)", e j aumenta...
nella triangolare inferiore scrivi "while (i-j<0)", e sempre j aumenta...: quindi o il programma non parte o va all'infinito.
potrei avere anche preso una cantonata, ma ti conviene controllare e rivedere questa parte.
ciao.

apatriarca
Perché scrivi (I-J)>0 e (I-J)<0 invece che i più leggibili I > J e I < J? Una matrice triangolare non dovrebbe anche essere quadrata? Ho sempre pensato che era richiesto dalla definizione.

Il problema è che J parte sempre da uno e invece dovrebbe partire da I + 1 in questo caso. Quando inizia il ciclo la condizione nel while verifica che I sia minore di J e non è mai vero.

lorven
"friggi195":
...
Io ho creato due funzioni in Pascal (bleah!) ... :shock: :( non offendermi così il Pascal!

Queste funzioni mi pare possano scriversi in maniera più semplice, forse più chiara ed efficiente. Ad esempio, quella non funzionante:
function TriangolareInferiore(M: TMAT; R: longint):boolean;
var I,J: longint;
TI: boolean;
begin
TI:=true;
I:=0;
while(I<R) AND TI do
   begin
   I:=I+1;
   J:=I;
   while (J<=R) AND TI do
      if (M[I,J]<>0) then
          TI:=false
          else J:=J+1;
   end;
TriangolareInferiore:=TI;
end;
:wink:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.