66 libelle renames nom thru prenom.
2.4 Exemples de sous-programmes
2.4.1 Exemple 1 - version 1
Cette première version comporte un programme principal et deux sous-programmes permettant de calculer la somme et le produit de deux nombres. Les 2 nombres et le résultat de leur somme et leur produit apparaissent sous la forme de paramètres.
Le programme principal correspondant au fichier : prog_princ.cbl
program-id. appel-pg-PP. working-storage section. 1 entier1 pic 99 value 0. 1 entier2 pic 99 value 0. 1 entier3 pic 999 value 0. screen section.
1 a-plg-titre line 2 col 20 'Test sur entier'. 1 a-plg-res3.
2 line 18 col 3 'Le resultat dans le pg principal somme : '. 2 a-entier3 pic 999 from entier3.
1 a-plg-res4.
2 line 19 col 3 'Le resultat dans le pg principal produit: '. 2 a-entier4 pic 999 from entier3.
1 a-plg-res1.
2 line 14 col 3 'le 1er nombre : '. 2 a-entier1 pic 99 from entier1. 1 a-plg-res2.
2 line 15 col 3 'le 2eme nombre : '. 2 a-entier2 pic 99 from entier2. procedure division. display a-plg-titre compute entier1=10 compute entier2=20 display a-plg-res1 display a-plg-res2
call 'SPPsomme' using entier1 entier2 entier3 end-call APPEL du sous-prog SPPsomme display a-plg-res3
call 'SPPproduit' using entier1 entier2 entier3 end-call APPEL du sous-prog SPPproduit display a-plg-res4
goback.
end program appel-pg-PP.
Le sous-programme suivant correspondant au fichier : SPPsomme.cbl program-id. somme. linkage section. 1 val1 pic 99. 1 val2 pic 99. 1 val3 pic 999. screen section. 1 a-plg-res.
2 line 12 col 3 'Le resultat somme dans sous prog : '. 2 a-val3 pic 999 from val3.
procedure division using val1 val2 val3. compute val3= val1 + val2
Module Cobol S2
Le sous-programme suivant correspondant au fichier : SPPproduit.cbl
program-id. produit. linkage section. 1 val1 pic 99. 1 val2 pic 99. 1 val3 pic 999. screen section. 1 a-plg-res.
2 line 12 col 3 'Le resultat produit dans sous prog : '. 2 a-val3 pic 999 from val3.
procedure division using val1 val2 val3. compute val3= val1 * val2
display a-plg-res goback.
end program produit.
2.4.2 Exemple1 version 2
Dans cette version les 2 sous-programmes apparaissent dans le même fichier calcul.cbl sous la forme de 2 points d’entrée.
Soit le programme principal suivant dans le fichier pg-principal.cbl :
program-id. appel-pg-PP. working-storage section. 1 entier1 pic 99 value 0. 1 entier2 pic 99 value 0. 1 entier3 pic 999 value 0. screen section.
1 a-plg-titre line 2 col 20 'Test sur entier'. 1 a-plg-res3.
2 line 18 col 3 'Le resultat dans le pg principal somme : '. 2 a-entier3 pic 999 from entier3.
1 a-plg-res4.
2 line 19 col 3 'Le resultat dans le pg principal produit: '. 2 a-entier4 pic 999 from entier3.
1 a-plg-res1.
2 line 14 col 3 'le 1er nombre : '. 2 a-entier1 pic 99 from entier1. 1 a-plg-res2.
2 line 15 col 3 'le 2eme nombre : '. 2 a-entier2 pic 99 from entier2. procedure division. display a-plg-titre compute entier1=10 compute entier2=20 display a-plg-res1 display a-plg-res2
call 'calcul' APPEL au POINT d’entrée PRINCIPAL
call 'somme' using entier1 entier2 entier3 end-call APPEL au POINT d’entrée SECONDAIRE display a-plg-res3
call 'produit' using entier1 entier2 entier3 end-call APPEL au POINT d’entrée SECONDAIRE display a-plg-res4
goback.
Module Cobol S2
et son sous programme dans le fichier calcul.cbl :
program-id. calcul. linkage section. 1 val1 pic 99. 1 val2 pic 99. 1 val3 pic 999. screen section. 1 a-plg-res1.
2 line 12 col 3 'Le resultat somme dans sous prog : '. 2 a-val3 pic 999 from val3.
1 a-plg-res2.
2 line 13 col 3 'Le resultat produit dans sous prog : '. 2 a-val3 pic 999 from val3.
procedure division. goback.
entry 'somme' using val1 val2 val3.
compute val3= val1 + val2 POINT d’entrée SECONDAIRE ‘somme’ display a-plg-res1
goback.
entry 'produit' using val1 val2 val3. compute val3= val1 * val2
display a-plg-res2 POINT d’entrée SECONDAIRE ‘produit’ goback.
end program calcul.
2.4.3 Exemple 2
Soit le programme suivant correspondant au fichier : prog_princ.cbl
identification division. program-id. appel. data division.
working-storage section. copy 'VarPer.txt'.
Module Cobol S2
screen section. 01 a-plg-titre. 02 blank screen.
02 line 6 col 10 value 'Calcul p' & x'82' & 'rimetre'. 01 s-plg-largeur.
02 line 9 col 1 value 'Entrez la largeur :'. 02 s-largeur pic zz9 to largeur.
01 s-plg-longueur.
02 line 10 col 1 value 'Entrez la longueur :'. 02 s-longueur pic zz9 to longueur required. 01 a-plg-erreur.
02 line 19 col 1.
02 a-messErreur pic X(40) from mes-erreur. 01 a-plg-efface.
02 line 19 col 1 blank line. 01 a-plg-cadres.
02 line 17 col 8 value 'perimetre du rectangle : '. 02 col 40 value 'cm '.
01 a-plg-valres. 02 line 17 col 30.
02 a-perimetre pic zzzzz9 from perimetre. 01 s-plg-continuer.
02 line 25 col 5 value "Voulez vous continuer ? (O/N) ". 02 s-continuer pic x to continuer.
procedure division. * Boucle de saisie * ---
* On boucle jusqu'a ce que continuer ne soit plus egal à O perform until ( function upper-case(continuer) not = 'O' ) * Affichage du titre * --- display a-plg-titre * Saisie de la largeur * --- display s-plg-largeur accept s-plg-largeur * Saisie de la longueur * --- display s-plg-longueur accept s-plg-longueur
* Calcul --> dans un sous programme * ---
call nom-ssprog using varperim if code-er = '00' then
* Affichage des résultats * ---
Module Cobol S2 display a-plg-valres display a-plg-efface else display a-plg-erreur end-if
* Test si l'utilisateur veut continuer la saisie display s-plg-continuer
accept s-plg-continuer end-perform
goback.
End program appel.
Complété par le fichier : ssprog.cbl
identification division. program-id. ssprog. working-storage section. linkage section.
copy 'VarPer.txt'.
procedure division using varperim. move '00' to code-er
move spaces to mes-erreur move 0 to perimetre. * Contrôles
if largeur > longueur MOVE '01' to code-er
move 'la largeur est supérieure à la longueur' to mes-erreur
end-if if largeur = 0
MOVE '02' to code-er
move 'la largeur ne peut pas être nulle' to mes-erreur
end-if
if longueur = 0
MOVE '02' to code-er
move 'la longueur ne peut pas être nulle' to mes-erreur
end-if
if code-er = '00'
compute perimetre = 2 * ( longueur + largeur) end-if
goback.
Complété par le fichier : VarPer.txt
01 varperim. 02 var-ent.
04 largeur PIC 999 value 0. 04 longueur PIC 999 value 0. 02 var-sort.
04 code-er PIC XX value '00'. 04 mes-erreur PIC X(40) value spaces. 04 perimetre PIC 9(6) value 0.
Module Cobol S2
CHAPITRE 6 :
LES TABLEAUX
1
Exemples de déclaration de tableaux
A - Tableau à une dimension 1 tab.
2 entier pic 9 occurs 30.
B - Tableau à 2 dimensions 1 tab.
2 ligne occurs 3.
3 element pic 9 occurs 5.
C - Tableau avec structure 1 tab. 2 ligne-carre occurs 30. 3 element occurs 5. 4 entier pic 99. 4 carre pic 9(5).
2
Exemple détaillé n°4
La première version de ce programme permet d’afficher les nombres de 1 à n avec leurs carrés.
1 30
entier(i) accès au ieme élement 1
1
3 2
Ligne(i) : accès à 1 ligne complète Element(i,j) : accès à une cellule
5 2 3 4 1 30 1 5 entier(i,j) carre(i,j)
Module Cobol S2
Cette 2ème version permet une meilleure gestion des écrans d’affichage (25 lignes et 80 caractères maxi).