Ада для цикла не делает правильное сравнение

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