简单的计划是将选民的最佳候选人与几名候选人匹配。想象中的选民回答了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
使用print语句,我能够确定一切正常,除了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不会正确地比较这些值。我无法弄清楚原因。
答案 0 :(得分:1)
在Score
开始之前将COMPARE_loop
重置为零,否则您将添加或减去前一候选人的分数。
--inner loop to calculate match value by comparing incoming candidate values with voter array values
Score := 0;
COMPARE_Loop :
for J in Integer range 1 .. 10 loop