• Aucun résultat trouvé

Exemples de sous-programmes

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).

3

Déclaration d’un tableau

Documents relatifs