]]> ]]>

Факториал в COBOL

Пример для версий OpenCOBOL 1.0, TinyCOBOL 0.65.9

Используется итеративное определение факториала.

Тип переменной, в которой хранится значение факториала — 9(15), т.е. число из 15 знаков. Числа, указанные перед именами переменных, — номера уровней; в более сложных программах они позволяют определять переменные как коллекции других переменных, но в данном случае это не используется. Уровень 77 — специальный; переменные этого уровня соответствуют обычным локальным переменным и не могут входить в сложные составные структуры.

Команда MULTIPLY, вопреки интуитивному предположению, умножает первый аргумент на второй и помещает результат во второй аргумент. Команда DISPLAY добавляет перевод строки после аргумента, поэтому элементы вывода приходится приводить к строчному типу (методом сохранения их в строковые переменные соответствующего размера) и конкатенировать. Для умножения добавлена обработка возможного переполнения, хотя это необязательно.

Вывод программы зависит от компилятора: числа всегда выводятся фиксированной ширины (дополненные нулями спереди), в TinyCOBOL — ширины 18, в OpenCOBOL — 15.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

         77 fact pic 9(15) comp.
         77 n pic 99.
         77 i pic 99.
         77 ist pic XX.
         77 factst pic X(18).

       PROCEDURE DIVISION.
         move 16 to n
         move 0 to i
         move 1 to fact
         perform until i greater than n
           move i to ist
           move fact to factst
           display ist "! = " factst
           add 1 to i
           multiply i by fact
             on size error display "value too big"
           end-multiply
         end-perform.
         stop run.

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам