簡単なプログラムは、有権者にとって最良の候補者を複数の候補者と一致させることです。架空の有権者が回答した架空のトピックは 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 は値を正しく比較しません。理由がわかりません。