2015-09-28 1 views
0

У меня есть задание, где? Мне нужно взять валовую оплату, которая выплачивается наличными, и отображать, сколько 100, 50, 20, 10, 5, 1, сотрудник оплачивается. Я уверен, что его просто моя математика, не работает, но вот мой кодУ вас возникли проблемы с «простой математикой»

 COMPUTE W02-PAY-100S = W02-GROSS-PAY/100 
     COMPUTE PAY = W02-GROSS-PAY - (W02-PAY-100S * 100) 
     COMPUTE W02-PAY-50S = PAY/50 
     COMPUTE PAY = PAY - (W02-PAY-50S * 50) 
     COMPUTE W02-PAY-20S = PAY/20 
     COMPUTE PAY = PAY - (W02-PAY-20S * 20) 
     COMPUTE W02-PAY-10S = PAY/10 
     COMPUTE PAY = PAY - (W02-PAY-10S * 10) 
     COMPUTE W02-PAY-5S = PAY/5 
     COMPUTE PAY = PAY - (W02-PAY-5S * 5) 
     COMPUTE W02-PAY-1S = PAY/1 
     . 

Что в конечном итоге происходит в первые 100s отображаются в виде 3, то все остальное 0-х.

+2

Необходимо указать определения полей. –

ответ

2

Я подозреваю, что PAY определяется как PIC 9, а не PIC 9(7) (или что-то еще), или что существует некоторая проблема с определениями других полей, которые вы используете (например, целых чисел).

Тем не менее, вы делаете это «неправильным» способом для COBOL, используя тот факт, что COMPUTE похож на инструкцию присваивания на других языках.

Вместо этого COBOL предлагает больше нюансов с глаголами для математики. Взгляните на DIVIDE с GIVING и REMAINDER.

DIVIDE W02-GROSS-PAY  BY 100 
    GIVING     NOTES-100 
    REMAINDER     W-RUNNING-BALANCE-LESS-100S 
DIVIDE W-RUNNING-BALANCE-LESS-100S 
          BY 50 
    GIVING     NOTES-50 
    REMAINDER     W-RUNNING-BALANCE-LESS-50S 
DIVIDE W-RUNNING-BALANCE-LESS-50S 
          BY 20 
    GIVING     NOTES-20 
    REMAINDER     W-RUNNING-BALANCE-LESS-20S 
DIVIDE W-RUNNING-BALANCE-LESS-20S 
          BY 10 
    GIVING     NOTES-10 
    REMAINDER     W-RUNNING-BALANCE-LESS-10S 
DIVIDE W-RUNNING-BALANCE-LESS-10S 
          BY 05 
    GIVING     NOTES-05 
    REMAINDER     COINS-01 

Если вы получаете ваши Вычисляет работать, вам не нужно последний (разделить на один дает вам как ответ на первоначальный номер). С помощью COMPUTE вы делаете намного больше работы, чем необходимо в COBOL.

Теперь, когда вы знаете о DIVIDE, также смотрите MULTIPLY, ADD и SUBTRACT.

Чтобы закончить картинку, просмотрите основные функции, например INTEGER и MOD. MOD и многое другое, у вас есть выше. INTEGER не нужен, потому что туда попадет простой MOVE в поле без дробной части. MOVE в поле без целочисленной части даст вам долю.

Не обязательно искать что-то, что позволяет делать это так, как на другом языке. Вы можете «передать» ваш модуль COBOL таким образом, но вы не будете действительно изучать COBOL.