< COBOL
fin de la boite de navigation du chapitre

Les variables sont des données que vous stockez en mémoire et auxquelles vous associez un identificateur : un nom pour les référencer dans le programme. Vous pouvez effectuer plusieurs opérations sur les variables : les afficher, les saisir au clavier, en modifier la valeur (contrairement aux constantes), etc.

Définitions

Les variables sont définies dans la WORKING-STORAGE SECTION dans la DATA DIVISION. Voici à quoi ressemble une définition de variable :

Définition
N identificateur PIC image [VALUE [ALL] valeur].


N est un entier qui indique le niveau de la variable, il prend une valeur de 01 à 49 pour les variables complexes ou bien 77 pour les variables simples. identificateur est le nom de la variable, il doit être unique. L'image correspond à la représentation de votre variable en mémoire.

Tout d’abord, il y a 5 types de variables : le type numérique pour stocker des nombres, le type alphabétique qui stocke des lettres de l'alphabet, le type alphanumérique qui peut stocker tous les caractères de votre clavier et le type numérique édité (respectivement alphanumérique édité) qui permet de stocker des valeurs numériques (respectivement alphanumériques) destinées à être affichées à l'écran.

Image d'une variable

L'image (PIC) de la variable est une suite de caractères, les caractères que vous utilisez vont conditionner le type de la variable :

  • numérique : 9 (chiffre) S (signe) V (virgule)
  • alphabétique : A (lettre majuscule, minuscule ou espace)
  • alphanumérique : X (n’importe quel caractère)
  • numérique édité : B (espace) V Z (zéro non affiché) 9 0 (zéro) / + - , .
  • alphanumérique édité : A X B 0 /

Voici quelques exemples d'images de variables pour comprendre le fonctionnement :

  • une note : valeur numérique sur 2 positions entières et pouvant contenir 2 décimales : 99.99 : type numérique ;
  • idem en n'affichant pas les zéros superflus : ZZ.ZZ : type numérique édité ;
  • 7 lettres de l'alphabet (ou espaces) : AAAAAAA : type alphabétique ;
  • chaîne de 4 caractères quelconques : XXXX : type alphanumérique ;
  • chaîne de 10 caractères pouvant stocker une date telle que 01/12/1998 : 99/99/9999 : type numérique édité ;
  • chaîne de 7 caractères contenant 2 mots de 3 caractères séparés par un espace : AAABAAA : type alphanumérique édité

Il existe un raccourci d'écriture pour nous simplifier la vie : mettre le nombre d'occurrences d'un caractère entre parenthèses plutôt que de toutes les écrire. Par exemple, XXXX peut se réécrire X(4), c’est valable pour tous les types de caractères.

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-variables.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 note   PIC ZZ.ZZ.
000007     77 prenom PIC A(20).
000008 
000009 PROCEDURE DIVISION.
000010   main.
000011     STOP RUN.
000012 END PROGRAM ex-variables.
Fin de l'exemple


Initialisation de variables

Lorsque vous définissez vos variables, vous pouvez leur donner une valeur, cette valeur doit être compatible avec leur image. C'est à ça que sert la clause VALUE.

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-variables.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 annee  PIC 9(4)  VALUE 2008.
000007     77 vide   PIC A(20) VALUE "".
000008     77 prenom PIC A(20) VALUE "Aristote".
000009 
000010 PROCEDURE DIVISION.
000011   main.
000012     STOP RUN.
000013 END PROGRAM ex-variables.
Fin de l'exemple


Après ces définitions, annee contient 2008, vide contient une chaîne vide de 20 caractères et prenom contient la chaîne "Aristote" suivie de 12 espaces. Vous pouvez afficher ces variables à l'aide de l'instruction DISPLAY vue précédemment.

Constantes figuratives

Il est également possible d’utiliser des constantes figuratives pour ces initialisations. En voici une liste :

  • ZERO, ZEROS, ZEROES
  • SPACE, SPACES
  • HIGH-VALUE, HIGH-VALUES
  • LOW-VALUE, LOW-VALUES
  • QUOTE, QUOTES

On peut les utiliser comme suit :

Exemple
77 annee PIC 9(4)  VALUE ZERO.
77 vide  PIC A(20) VALUE SPACES.
Fin de l'exemple


Ainsi annee est initialisée à 0000 et vide contient une série d'espaces. Ces constantes figuratives peuvent également être affichées à l'écran via l'instruction DISPLAY.

Représentation numérique en mémoire

Il est également possible de modifier la représentation des types numériques en mémoire, en précisant la clause USAGE lors de la déclaration de variables. Voici la liste des différentes représentations possibles :

  • BINARY : base 2
  • COMP[UTATIONAL] pour faciliter les calculs
  • DISPLAY : par défaut, code ASCII (1 digit sur 8 bits)
  • PACKED-DECIMAL : base 10 (1 digit sur 4 bits)

Cette clause permet d'optimiser la place occupée en mémoire par nos variables.

Saisir les entrées au clavier

L'instruction ACCEPT permet de stocker dans une variable ce qui provient de l'entrée standard, dans notre cas le clavier. Nous pouvons expliciter cette source en ajoutant la clause FROM suivie de l'identifiant console. Voici donc le synopsis de cette instruction :

Définition
ACCEPT variable [FROM console].


La variable réceptrice doit être déclarée et avoir une image compatible avec la donnée entrée.

Variables complexes

Les variables complexes sont des variables qui peuvent avoir plusieurs niveaux de subdivisions. Le niveau d'une variable complexe est 01, le niveau de chaque subdivision doit être supérieur à celui de sa souche (de 01 a 49). Ce type de structure permet de hiérarchiser les données. Voici un exemple de variable complexe :

Exemple
01 personne.
   02 nom    PIC X(20) VALUE "DUPONT".
   02 prenom PIC X(20) VALUE "Martin".
   02 naissance.
     03 annee PIC 9999 VALUE 1954.
     03 mois  PIC 99   VALUE 02.
     03 jour  PIC 99   VALUE 07.
Fin de l'exemple


Une image ne peut être définie que pour le dernier niveau des variables, c’est pourquoi nous n'en définissons pas pour naissance et personne.

Exemple : saisie d'une date de naissance

Voici un programme récapitulatif qui stocke dans une structure complexe une date de naissance composée de l'année, du mois et du jour. On demande tout d’abord à l'utilisateur de rentrer ces données au clavier avant de les afficher.

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. saisie-naissance.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     01 date-naissance.
000007       02 annee PIC 9999.
000008       02 mois  PIC 99.
000009       02 jour  PIC 99.
000010 
000011 PROCEDURE DIVISION.
000012   saisie.
000013     DISPLAY "Année : " NO ADVANCING.
000014     ACCEPT annee.
000015     DISPLAY "Mois : " NO ADVANCING.
000016     ACCEPT mois.
000017     DISPLAY "Jour : " NO ADVANCING.
000018     ACCEPT jour.
000019   affichage.
000020     DISPLAY annee "/" mois "/" jour.
000021     STOP RUN.
000022 END PROGRAM saisie-naissance.
Fin de l'exemple
Cet article est issu de Wikiversity. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.