COBOL Типы данных - PullRequest
       8

COBOL Типы данных

15 голосов
/ 08 июня 2010

У меня путаница с типами данных COBOL. Как и во многих интервью, его просят объяснить разницу между COMP-3 и COMP ... какая точная разница? что означает использование режимов в COBOL и как оно связано с типами данных?

Спасибо и С уважением, Манаси Кулькарни

Ответы [ 4 ]

17 голосов
/ 08 июня 2010

USAGE в COBOL описывает, как должен использоваться элемент данных.Вот несколько примеров использования:

  • DISPLAY.Это идентифицирует элемент, который может быть напечатан на терминале или в отчете.Это может быть или не быть числом (например, может быть текстовым значением).Описание элемента DISPLAY дается предложением PICture.Например: PIC 9(5) USAGE DISPLAY описывает 5-значный номер, который может отображаться (печататься).Часто USAGE DISPLAY пропускается, поскольку подразумевается, если отсутствует.
  • INDEX.Это идентифицирует элемент, используемый в качестве индекса в таблице (OCCURS).
  • COMPsomething указывает, что элемент данных должен использоваться в арифметических операциях (т. Е. Это число некоторого типа).

Существуют различные типы числовых элементов.Два наиболее часто используемых числовых типа данных:

  • COMPUTATIONAL или COMP.Это эквивалентно BINARY
  • COMPUTATIONAL-3 или COMP-3.Это эквивалентно элементам данных PACKED-DECIMAL

COMP (BINARY), как правило, наиболее эффективный способ выполнения вычислений для элементов данных, представляющих целочисленные значения.

COMP-3 (PACKED-DECIMAL) элементы данных используются в COBOL, потому что они поддерживают фиксированное количество десятичных знаков.Все вычисления приводят к результату с заданным количеством десятичных знаков.Это особенно полезно в операциях типа учета.Числа с плавающей точкой задают количество цифр после переменной десятичной запятой (например, десятичная точка может «плавать»), что не является способом представления финансовых операций.

Вы можете найти полный список вычислительных элементов дляIBM Enterprise COBOL здесь

Одна из проблем, с которыми сталкиваются многие программисты, начиная с COBOL, заключается в понимании того, что элемент COMP отлично подходит для выполнения математических операций, но его нельзя отобразить (напечатать), пока он не будет преобразован вОТОБРАЖАЕМЫЙ элемент через оператор MOVE.Если вы поместите элемент COMP в отчет или на экран, он будет отображаться не очень хорошо.Сначала его нужно переместить в элемент DISPLAY.

Еще одна вещь, которую вы, возможно, захотите исследовать немного больше, это взаимосвязь между PICture и ИСПОЛЬЗОВАНИЕМ при определении переменных в COBOL.Вот ссылка на очень хорошее вступительное руководство COBOL от Университета Лимерика.

15 голосов
/ 09 июня 2010

COBOL действительно имеет только два типа данных: числа и строки.

Расположение каждого поля в записи COBOL точно определяется предложением PICTURE (обычно сокращенно PIC). Наиболее распространенные из них:

  • PIC X для строк. PIC X(100) означает 100-байтовую строку.
  • PIC 9 для чисел, необязательно с S (знак) или V (неявная десятичная точка). Например, PIC S9(7)V99 означает число со знаком, состоящее из 7 цифр слева от неявной десятичной точки и 2 цифр справа.

Числовые поля могут содержать предложение USAGE для оптимизации их хранения. Наиболее распространенными USAGE являются DISPLAY, COMP и COMP-3.

DISPLAY сохраняет каждую цифру как символ. Например, PIC 9(4) VALUE 123 хранит номер, как если бы это была строка «0123». И PIC 9(4)V99 VALUE 123.45 сохраняет его как "012345". Обратите внимание, что десятичная точка на самом деле не сохраняется.

Это неэффективный формат, поскольку для представления каждой цифры требуется 8 бит. Но он имеет «оптимизацию» для чисел со знаком, используя половину последнего байта для хранения знака. Как правило, все цифры EBCDIC имеют большой пик F, поэтому 0123 - это F0 F1, F2 F3. Но -0123 - это F0 F1 F2 D3 ; D означает отрицательный. C означает положительный, а F означает беззнаковый (то есть положительный). (Подобные форматы используются в ASCII-версиях COBOL, но не в качестве стандартизированных.)

COMP-3 - десятичное число в двоичном коде с завершающим знаком nybble. PIC 9(3) COMP-3 VALUE 123 становится двумя байтами 12 3F.

COMP или BINARY - это собственный двоичный формат, такой же как short, int или long в C.

2 голосов
/ 21 июля 2010

Что касается решения, какой тип данных использовать, его можно сделать очень сложным - НО - простой набор рекомендаций:

DISPLAY и десятичное значение отредактированной зоны следует использовать только для отображения чисел в отчете или в системном отчете. Переместите поля COMP и COMP-3 в поле DISPLAY / Edited перед тем, как поместить его в отчет или в sysout.

COMP - имеет самую высокую скорость вычисления для целых чисел

COMP-3 (десятичный пакет) - должен использоваться, когда десятичные позиции должны быть сохранены.

Поля COMP и COMP-3 могут использоваться вместе в расчетах. Компилятор определит, какой тип поля будет преобразован (под обложками) в один общий числовой тип данных - на основе правил .

2 голосов
/ 09 июня 2010

Как следует из другого ответа, COMP означает двоичный код с прямым порядком байтов. COMP-3 представляет собой упакованный десятичный знак - это означает, что одна десятичная цифра сопоставляется с каждым полубайтом.

Я не уверен, что в предыдущем ответе проблема с точностью была правильной.

PIC S9 (9) V9 (9) COMP а также PIC S9 (9) V9 (9) COMP-3

Точно такой же точности. Это является частью стандарта ANSI85. Задача компилятора и среды выполнения состоит в том, чтобы гарантировать, что двоичное представление в COMP имеет соответствующие преобразования, помещенные в него, чтобы обеспечить точно те же результаты, которые были бы получены, как если бы использовалось отображение или COMP-3. .

В мэйнфреймах IBM упакованы десятичные вычисления в аппаратном обеспечении. Это очень полезно, потому что преобразование десятичной дробной шкалы в n в квадрате n - это длина числа. Это означает, что COMP-3 часто является самым быстрым форматом мэйнфрейма, но с меньшей вероятностью будет в распределенных системах. Однако, это снова не всегда так. Например, собственное решение COBOL для Micro Focus будет иметь тенденцию быть быстрее в COMP-3, чем в COMP-5 для очень большой десятичной точности (> 18 цифр), но в противном случае наоборот. Управляемая система COBOL от Micro Focus почти всегда самая быстрая в COMP (на самом деле, COMP-5 - самая лучшая - она ​​похожа на COMP, но будет иметь аппаратный порядок байтов, а не принудительное размещение макета памяти с прямым порядком байтов).

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

Чтобы узнать больше о COBOL в распределенном и управляемом COBOL, ознакомьтесь с этим кнолом: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4, а также смело ищите cobol в facebook :)

...