Нахождение суммы из одномерного массива - COBOL - PullRequest
0 голосов
/ 24 апреля 2018

Мне нужно перебрать 1D массив и сложить все элементы вместе, чтобы найти итог.Я должен использовать выражение Perfrom ... Varying, это то, что я до сих пор придумал.

 perform 100-read-input-file  
           varying emp-rec-calls(ws-emp-total)
           from 1 by ws-emp-total 
           until (ws-eof-flag = 'Y'
                  OR ws-array-counter > ws-array-max)
       add emp-rec-calls(ws-emp-total) to ws-total-temp

Код для 100-read-input-file просто

read input-file at end move 'y' to found-eof.

Проблема, которую я сейчас получаю, заключается в том, что «Subscript out of range:» в этой строке «выполнить 100-read-input-file».Вся помощь оценена, спасибо!

1 Ответ

0 голосов
/ 24 апреля 2018

Давайте проанализируем код, который вы предоставили:

perform 100-read-input-file  
        varying emp-rec-calls(ws-emp-total)
           from 1 by ws-emp-total 
            until (ws-eof-flag = 'Y'
                  OR ws-array-counter > ws-array-max)
       add emp-rec-calls(ws-emp-total) to ws-total-temp

Этот цикл не имеет никакого смысла. Вы говорите, что выполняйте этот цикл, изменяя вхождение X массива EMP-REC-CALLS от 1 до X, пока флаг, который никогда не устанавливается в цикле, не станет равным yes ИЛИ счетчик, который вы не увеличиваете, больше размера массива.

Я думаю, вы пытаетесь достичь чего-то вроде этого:

PERFORM VARYING WS-ARRAY-COUNTER
           FROM 1 BY 1
          UNTIL WS-ARRAY-COUNTER > WS-ARRAY-MAX
   ADD EMP-REC-CALLS(WS-COUNTER) TO WS-TOTAL-TEMP
END-PERFORM

Это будет изменять счетчик WS-ARRAY-COUNTER на 1 на каждой итерации цикла (начиная с 1), пока этот счетчик не превысит установленный максимум.

...