в качестве входных данных принимается десятичная дробь и вводится добавление завершающих нулей - PullRequest
0 голосов
/ 09 января 2019

Добрый вечер,

Я только начал изучать Кобол, и на практике я хотел запрограммировать простую программу умножения, работающую с двумя десятичными числами, заданными пользователем.

Итак, я написал следующее

   IDENTIFICATION DIVISION.
   PROGRAM-ID. exo.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   77 a PIC 9(2)V9.
   77 b PIC 9(2)V9.
   77 result PIC 9(4)V99.
   screen section.
   1 pla-title.
          2 blank screen.
          2 line 1 col 1 value 'Multiplication'.
   1 pls-numbers.
          2 line 4 col 2 value 'Number 1 : '.
          2 PIC 9(2)V9 to a required.
          2 line 5 col 2 value 'Number 2 : '.
          2 PIC 9(2)V9 to b required.
   1 pla-result.
          2 line 7 col 2 PIC 9(2)V9 from a.
          2 col 7 value 'x'.
          2 col 9 PIC 9(2)V9 from b.
          2 col 13 value '='.
          2 col 15 PIC 9(4)V99 from result.

   PROCEDURE DIVISION.
   display pla-title.
   accept pls-numbers.
   compute result = a * b.
   display pla-result.

   END PROGRAM exo.

Проблема здесь не в части умножения, которая работает идеально. Проблема заключается в вводе. Каждый раз, когда я нажимаю клавишу Tab или ввод, в конце добавляется 0. Например, введя 9,9,9, tab, 9,9,9, введите умножение 900 на 990, поскольку формат принимает только три последние цифры 99900 (табуляция + ввод) и 9990 (ввод).

Я пробовал ту же программу с целыми числами, она отлично работает. Я попробовал то же самое с реальными десятичными числами (9 (2) .9), и ввод работает, но у меня есть проблема с умножением (не числовое значение), которое я попытаюсь понять позже, одна проблема в то время .

Короче говоря, вопрос заключается в том, чтобы узнать, почему ввод изменяется, набрав tab и введите, что, в моем понимании, используется для навигации по полям принятия.

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 09 января 2019

То, как ввод автоматически корректируется при изменении поля / завершении приема, зависит от фактически используемого компилятора / среды выполнения (в большинстве случаев полезно добавить эту информацию в вопросе), но большинство вариантов COBOL хотят ". " (или в случае DECIMAL-POINT IS COMMA a ",") введено для получения правильной десятичной части.

На самом деле результаты с подразумеваемой десятичной точкой и ACCEPT могут не соответствовать вашим ожиданиям. Я предлагаю попробовать использовать поле с числовым редактированием, например ZZ9.99 (которое автоматически редактируется на MOVE, для поля, в котором вы выполняете вычисления [если сохраненные данные соответствуют символам редактирования] после ACCEPT) или просто PIC X и MOVE FUNCTION NUMVAL (input-field) TO a впоследствии (это должно работать на любом компиляторе, включая эту функцию).

...