简单的程序是将一个选民的最佳候选人与几个候选人进行匹配。假想选民回答了 10 个假想话题;“-1”表示不同意,“0”表示不关心,“1”表示同意。候选人还针对相同的主题进行了相同的调查,并且适用相同的规则。如果选民或候选人对特定主题投了“0”票,则总协议值不受影响。如果选民和候选人之间的值相同,则增加协议值。如果值不同,则减少协议值。最后,将具有最高值的候选人呈现给选民。
这是程序的示例终端输入,包括输出:
输入:
0 0 0 1 1 1 -1 -1 -1 1
7
A
1 1 1 1 1 1 1 1 1 1
B
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
C
1 -1 1 -1 1 -1 1 -1 1 -1
D
1 0 1 0 1 0 1 0 1 0
E
0 -1 0 -1 0 -1 0 -1 0 -1
F
1 1 1 1 0 0 0 0 0 0
G
0 0 0 1 -1 0 0 -1 1 1
输出:A、F、G
使用打印语句,我能够确定一切正常,除了实际将选民值与当前候选值进行比较的 for 循环之外的所有地方:
--inner loop to calculate match value by comparing incoming candidate values with voter array values
COMPARE_Loop :
for J in Integer range 1 .. 10 loop
Get(NextVote);
if NextVote = 0 or VoterList(J) = 0 then
Put(VoterList(J));
--Do nothing
elsif NextVote = VoterList(J) then
Score := Score + 1;
else
Score := Score - 1;
end if;
end loop COMPARE_Loop;
其他所有内容都经过验证被正确采用,并在整个程序中保持正确的值,但 COMPARE_Loop 不会正确比较这些值。我不知道为什么。