Je serais très reconnaissant pour tout pointeur vers ce que c'est exactement que je fais mal avec le programme COBOL très minime, très trivial ci-dessous. Il arrondit un résultat avec l'outil standard de COBOL, l'élément de langage ROUNDED. L'arrière-pensée consiste à construire une application étendue et à appliquer une métrique temporelle à différents modes d'arrondi, étant donné une longue série d'opérations et des arrondis subséquents pour chaque mode. (Le motif encore plus inavoué est d'apprendre COBOL à rebours, il ne s'agit que d'un projet dans ce plan, puis d'essayer de décrocher un emploi en utilisant et en développant COBOL).Pourquoi la syntaxe d'arrondi de GnuCOBOL ne compile-t-elle pas?
Le programme est répertorié ci-dessous. Il effectue une addition simple, et le résultat est passé à une variable avec une largeur de données plus petite qui impose l'arrondi.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. ROUNDINGTEST.
000300 ENVIRONMENT DIVISION.
000400 DATA DIVISION.
000500 WORKING-STORAGE SECTION.
000600 01 OPERAND01 PIC S9(2)V9(4) VALUE 1.4745.
000610 01 OPERAND02 PIC S9(2)V9(4) VALUE 1.9874.
000610 01 RESULT PIC S9(2)V9(2).
000700 PROCEDURE DIVISION.
000800 PROGRAM-BEGIN.
000900 COMPUTE RESULT ROUNDED MODE NEAREST-EVEN
001000 = OPERAND01 + OPERAND02
001010 END-COMPUTE
001020
001100 PROGRAM-DONE.
001200 STOP RUN.
La compilation avec le compilateur GnuCOBOL, comme ci-dessous, donne les résultats ci-dessous.
[email protected]:~/CobolProjects$ cobc -b ROUNDINGTEST.cob
ROUNDINGTEST.cob: In paragraph 'PROGRAM-BEGIN':
ROUNDINGTEST.cob:11: Error: syntax error, unexpected MODE
[email protected]:~/CobolProjects$
Aucun échange du mode indiqué vers un autre mode, Troncature, Envers-Moins ... produit un changement. Commentant les lignes 000900, 001000 et 001010 donne une réponse sans erreur, donc clairement le problème n'est pas un problème en cascade de plus tôt dans le code ou toute forme de mésaventure syntaxique plus tard - c'est l'arrondi qui ne fonctionne pas.
GNU COBOL 2.0 (Anciennement OpenCobol) [11FEB2012 version] Guide du programmeur 2e édition 21 Novembre 2013
a la syntaxe COMPUTE comme ci-dessous
COMPUTE {identifiant-1 [arrondissement options] } ... = | EQUAL arithmétique-expression-1 [taille-error-clause] [END-COMPUTE]
et la syntaxe du qualificatif arrondi (arrondi au choix ci-dessus) 012 Où le «IS» est une option de lisibilité non obligatoire.
Compact et trivial que cela puisse paraître, aucune quantité de révision ou d'essai ne m'a réussi à réussir. Toute communication significative sur le sujet serait très appréciée.
Un paragraphe/SECTION doit se terminer par un point/une période. Je reçois des résultats différents de votre échec (j'ai utilisé V2,0 du compilateur, pas la version 1.1) mais toujours un échec. Le message pourrait être meilleur (!), Si vous voulez vous connecter à l'espace GnuCOBOL sur SourceForge.net, cela pourrait provoquer une amélioration utile. Hey, vous pourriez même chercher à le coder vous-même. –
Un paragraphe/SECTION doit en effet se terminer par un point/une période, et donc ils le font tous dans mon code, y compris PROGRAM-BEGIN. et PROGRAM-FAIT. le plus proche du point de défaillance. Quel message particulier est-ce qui pourrait être mieux, le message d'erreur du compilateur à travers le shell?Voulez-vous que je mette les options du compilateur pour qu'il y ait plus de viande dans le message d'erreur? Hm. J'ai l'impression que la zone de recherche est bien délimitée. – Titchmarsh
SourceForge est un excellent prochain arrêt, cependant. Bonne suggestion. Soyez regarder dans bientôt. – Titchmarsh