Types de données COBOL
j'ai de la confusion concernant les types de données COBOL. Comme dans de nombreuses interviews, il est demandé d'expliquer la différence entre COMP-3 et COMP... quelle est la différence exacte? Quelle est la signification des modes D'utilisation dans COBOL et comment est-elle liée aux types de données?
remerciements et salutations, Manasi Kulkarni
4 réponses
USAGE
dans COBOL décrit comment un élément de données doit être utilisé. Quelques exemples
d'UTILISATION:
- DISPLAY. Cela identifie un article qui peut être imprimé sur un terminal ou
rapport. Il peut s'agir ou non d'un nombre (par exemple, une valeur textuelle). Le
la description de L'élément DISPLAY est donnée par la clause PICture. Exemple:
PIC 9(5) USAGE DISPLAY
décrit un numéro à 5 chiffres qui peut être affiché (imprimé). SouventUSAGE DISPLAY
est laissé de côté parce qu'il est implicite s'il est manquant. - INDEX. Il s'agit d'un élément utilisé comme index dans un tableau (OCCURS).
- COMPsomething indique que l'élément de données doit être utilisé dans opérations arithmétiques (c'est à dire qu'il est un certain nombre d'un certain type).
il existe différents types d'éléments numériques. Deux des plus couramment utilisés les types de données numériques sont:
- COMPUTATIONAL or computational. C'est équivalent à binaire
- COMPUTATIONAL-3 or COMP-3. C'est l'équivalent de PACKED-DECIMAL
COMP (binaire) les éléments de données sont généralement le moyen le plus efficace pour effectuer calculs sur des éléments de données qui représentent des valeurs entières.
COMP-3 (PACKED-DECIMAL) les éléments de données sont utilisés dans COBOL parce que ils maintiennent un nombre fixe de décimales. Tous les calculs conduire à un résultat ayant le nombre prescrit de décimales. Ceci est particulièrement utile dans la comptabilité des opérations. Les nombres à virgule flottante font le nombre de chiffres après le variable de virgule décimale (par exemple la virgule décimale peut "flotter") qui est pas la façon dont les opérations financières sont généralement représentés.
vous pouvez trouver une liste complète des éléments de calcul pour IBM Enterprise COBOL ici
L'un des problèmes de nombreux programmeurs au début de COBOL est comprendre qu'un COMP item est excellent pour faire des maths mais ne peut pas être affiché (imprimé) jusqu'à ce qu'il soit converti en un élément affichable par une déclaration de déménagement. Si vous déplacez un élément COMP dans un rapport ou sur un l'écran ne présente pas très bien. Il doit être placé dans un écran article premier.
l'autre chose que vous pourriez vouloir rechercher un peu plus est le relation entre L'image et L'USAGE lors de la définition des variables en COBOL. Voici un lien vers une très bonne introduction tutorial COBOL de l'Université de Limerick.
COBOL n'a vraiment que deux types de données: les nombres et les chaînes.
la disposition de chaque champ dans un enregistrement COBOL est spécifiée avec précision par un PICTURE
(généralement abrégé PIC
) de la clause. Les plus courantes sont les suivantes:
PIC X
pour les chaînes.PIC X(100)
signifie une chaîne de 100 octets.PIC 9
pour les nombres, éventuellement avecS
(signe) ouV
(virgule décimale implicite). Par exemple,PIC S9(7)V99
signifie un numéro signé avec 7 chiffres à la à gauche de l'implicite point décimal et les 2 chiffres à la droite.
les champs Numériques peuvent avoir un USAGE
l'article d'optimiser leur stockage. La plus courante USAGE
DISPLAY
,COMP
et COMP-3
.
DISPLAY
stocke chaque chiffre comme un caractère. Par exemple, PIC 9(4) VALUE 123
stocke le numéro comme si c'était la chaîne "0123". Et PIC 9(4)V99 VALUE 123.45
la conserve sous la forme "012345". Notez que le point décimal n'est pas réellement stocké.
C'est inefficace format en ce qu'il exige 8 bits pour représenter chaque chiffre. Mais il a une "optimisation" pour les nombres signés en utilisant la moitié du dernier octet pour stocker le signe. Normalement, les chiffres EBCDIC ont tous un nybble élevé de F, donc 0123 est F0 F1 F2 F3. Mais -0123 est F0 F1 F2 D3; le D indique négatif. C signifie positif, et F signifie non signé (c.-à-d. positif). (Des formats similaires sont utilisés dans les versions ASCII du COBOL, mais pas aussi normalisés.)
COMP-3
binaire codé décimal avec le signe Nybble. PIC 9(3) COMP-3 VALUE 123
devient les deux octets 12 3F.
COMP
ou BINARY
est un format binaire natif, tout comme short
,int
, ou long
C.
comme le suggère une autre réponse, COMP signifie big endian binaire. COMP-3 est emballé décimal - ce qui signifie un chiffre décimal est mappé à chaque grignoter.
Je ne suis pas sûr que la réponse précédente a eu le problème autour de la précision correcte cependant.
PIC S9(9) V9 (9) COMP et PIC S9(9)V9 (9) COMP-3
Ont exactement la même précision. Cela fait partie de la norme ANSI85. C'est le travail du compilateur et de l'exécution de s'assurer que la représentation binaire dans le approprié transformations imposées pour assurer exactement on obtient les mêmes résultats que si l'usage était display ou COMP-3.
mainframe IBM ordinateurs ont emballé décimal calculs dans le matériel. Cela est très utile, parce que la conversion des échelles décimales en échelles binaires n au carré est la longueur du nombre. Cela signifie que COMP-3 est souvent le format le plus rapide de l'ordinateur principal, mais est moins susceptible d'être sur les systèmes distribués. Cependant, ce nouveau n'est pas toujours le cas. Par exemple, la solution de COBOL natif Micro Focus aura tendance à être plus rapide dans COMP-3 que COMP-5 pour une très grande précision décimale (>18 chiffres) mais l'inverse pour le reste. Le système COBOL géré par Micro Focus est presque toujours le plus rapide en COMP (en fait, COMP-5 est le meilleur - ce qui est similaire à COMP, mais aura le matériel endian plutôt que l'application big-endian memory layout).
enfin, je suggère que pour les valeurs intermédiaires et générales mathématiques, les nouvelles définitions de données de binaire-long et binaire-double sont un meilleur choix, car alors le compilateur peut prendre les décisions sur la façon de stocker et d'optimiser pour vous.
Pour en savoir plus sur COBOL sur distribuée et Gérée COBOL découvrez ce knol: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4 et aussi n'hésitez pas à regarder jusqu'cobol sur facebook :)
en ce qui concerne le choix du type de données à utiliser, il peut être rendu très compliqué - mais - un simple ensemble de lignes directrices sont:
DISPLAY et Edited zone décimal ne doit être utilisé que pour l'affichage de chiffres dans un rapport ou un sysout. Déplacez les champs COMP et COMP-3 vers un champ DISPLAY / Edited avant de le mettre dans un rapport ou vers sysout.
COMP