Ада для цикла не делает правильное сравнение
Простая программа состоит в том, чтобы сопоставить лучшего кандидата для избирателя с несколькими кандидатами. Есть 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 не будет правильно сравнивать значения. Я не могу понять, почему.
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