UTEK
asked on
About linked variant record's tagfield in Turbo Pascal 7.0
I got a strange problem in my turbo pascal program
I declare something like that:
type
TagField = (term, rowheader, columnheader, polyheader);
ListPointer = ^ListNode;
ListNode = record
NextX : ListPointer;
NextY : ListPointer;
case NodeInfo : TagField of
term:
(Coefficient : integer);
rowheader:
(XDegree : integer);
columnheader:
(YDegree : integer);
polyheader:
(NoOfTerm : integer)
end;
Then I have a var called
var
OtherCoeff : ListPointer
and the code like this
while ((OtherCoeff^.NodeInfo = rowheader) and
(OtherCoeff^.NodeInfo = polyheader)) do
:
:
Somehow this while loop goes into an infinite loop. I check the OtherCoeff
and I am sure it is pointing to the rowheader and not the polyheader
it still doesn't terminate.
it seems that it can't recognize the tagfield
Do you have any idea?
I declare something like that:
type
TagField = (term, rowheader, columnheader, polyheader);
ListPointer = ^ListNode;
ListNode = record
NextX : ListPointer;
NextY : ListPointer;
case NodeInfo : TagField of
term:
(Coefficient : integer);
rowheader:
(XDegree : integer);
columnheader:
(YDegree : integer);
polyheader:
(NoOfTerm : integer)
end;
Then I have a var called
var
OtherCoeff : ListPointer
and the code like this
while ((OtherCoeff^.NodeInfo = rowheader) and
(OtherCoeff^.NodeInfo = polyheader)) do
:
:
Somehow this while loop goes into an infinite loop. I check the OtherCoeff
and I am sure it is pointing to the rowheader and not the polyheader
it still doesn't terminate.
it seems that it can't recognize the tagfield
Do you have any idea?
Hmm in order to be of use...try to state the rest of the while statement....as something there is to stop the while loop....Hmm...but I'm not used to Turbo Pascal 7 the only Pascal i did was on a Unix computer...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Sorry, I have mis-type the while loop expression in my posting.
My original ctrl statement is:
while ((OtherCoeff^.NodeInfo <> rowheader) and
(OtherCoeff^.NodeInfo <> polyheader)) do
:
:
the truth table for that
<> rowheader <>polyheader do the loop
T T T
T F F
F T F
F F F
Since the loop will never go into the situation of (= rowheader) and (= polyheader), so the last line can be ignored.
My original ctrl statement is:
while ((OtherCoeff^.NodeInfo <> rowheader) and
(OtherCoeff^.NodeInfo <> polyheader)) do
:
:
the truth table for that
<> rowheader <>polyheader do the loop
T T T
T F F
F T F
F F F
Since the loop will never go into the situation of (= rowheader) and (= polyheader), so the last line can be ignored.
Are you modifying OtherCoeff^.NodeInfo inside the loop?
Without looking into the code i cannot answer. Try solving
this problem without using variant records, since variant records
are handled in a funnay manner in Pascal.
this problem without using variant records, since variant records
are handled in a funnay manner in Pascal.