Interrogation de COBOL 1ère année

IUT d'Orsay
Année 1995-96

Tous les documents sont autorisés.

1. Complétez les ________ dans les programmes suivants:

Un mot à chaque fois.
ENVIRONMENT DIVISION.
FILE-CONTROL.
    SELECT F ASSIGN TO DISK
	ORGANIZATION INDEXED
	RECORD KEY K
	FILE STATUS FS.

DATA DIVISION.
FILE SECTION.

FD F DATA RECORD R.

01 R.
    10 K    PIC X(4).
    10 L    PIC 9(10).
DATA DIVISION.
WORKING-STORAGE SECTION.

77 IND-MAX	PIC 9999.
77 NNI		PIC X(15).
77 NOM-ENTREE	PIC X(15).
     
01 TABLE.
    02 SALARIE OCCURS 2 TO 1000
	DEPENDING ON IND-MAX
	INDEXED BY IND
	ASCENDING KEY INSEE.
	10 INSEE	PIC X(15).
	10 NOM		PIC X(15).
	10 PRENOM	PIC X(15).
	10 ADRESSE	PIC X(15).

PROCEDURE DIVISION.
    PERFORM CHARGEMENT-TABLE.
    DISPLAY "ENTREZ LE NOM:"
    ACCEPT NOM-ENTREE.
    SET IND TO 1.
    SEARCH SALARIE
	AT END DISPLAY
	     "SALARIE INCONNU"
	WHEN NOM ( IND ) = NNI
	    DISPLAY NOM PRENOM.
    STOP RUN.

Pour la première question, on peut se rendre compte que le fichier est indexé, et non relatif, parce que la clé est alphanumérique.

2. Questions VRAI / FAUX

  1. Dans un tri COBOL, si l'entrée est un fichier, la sortie est forcément un fichier. Faux, ce peut être une OUTPUT PROCEDURE.

  2. Dans un fichier indexé, les clés secondaires peuvent apparaître en double. Vrai.

  3. Lors de l'appel d'un sous-programme externe en COBOL, les données passées au programme appelé ne peuvent être passées que par valeur (CONTENT). Faux.

  4. Lors de l'appel d'un sous-programme externe en COBOL, les données renvoyées au programme appelant sont toujours passées par valeur (CONTENT). Faux.

  5. Par défaut, les données passées lors de l'appel à un sous-programme externe le sont par REFERENCE. Vrai.

  6. Au cours d'une recherche séquentielle dans une table triée, c'est l'élément de plus petit index satisfaisant la condition de recherche qui est trouvé le premier. Vrai.

  7. Au cours d'une recherche dichotomique dans une table triée, c'est l'élément de plus petit index satisfaisant la condition de recherche qui est trouvé le premier. Faux, l'élément qui va être trouvé dépend du compilateur et de la bibliothèque d'exécution.

  8. Si on lance une recherche dichotomique dans une table non triée, c'est en fait une recherche séquentielle qui est effectuée. Faux.

  9. Après une recherche dichotomique, l'index pointe l'élément suivant l'élément trouvé pour permettre de poursuivre la recherche. Faux, il pointe l'élément trouvé, et poursuivre la recherche est en général impossible.

  10. Après une recherche sequentielle, l'index pointe l'élément suivant l'élément trouvé pour permettre de poursuivre la recherche. Faux, il pointe l'élément trouvé. Pour poursuivre la recherche, il faut faire un SET index UP BY 1.

3. Questions vaches

  1. Quels est le nombre maximal d'éléments dans une table COBOL ? Ça dépend du compilateur, de la machine....

  2. Dans un fichier relatif, les clés secondaires peuvent apparaître en double (VRAI/FAUX). Expliquez (1 phrase). Faux, il n'y a pas de clés secondaires dans les fichiers relatifs.

  3. Quel est le nombre minimal de fichiers mis en oeuvre dans un tri en COBOL ? 1: le fichier de tri (déclaré en SD).

  4. Quel est le nombre maximal de fichiers mis en oeuvre dans un tri en COBOL ? 3: le fichier d'entrée, le fichier intermédiaire, et le fichier de sortie.

  5. Lorsqu'on a une recherche séquentielle dans une table, il est toujours possible de trier la table et de faire la même recherche en dichotomique (VRAI/FAUX). Expliquez (1 phrase). Faux, pour au moins deux raisons: 1) l'élément trouvé par la recherche dichotomique ne sera pas forcément le même que celui de la recherche séquentielle si plusieurs éléments satisfont le critère de recherche et 2) les recherches dichotomiques possibles sont plus restreintes que les recherches séquentielles (seulement = et <).

  6. Après une insertion réussie dans un fichier indexé, le FILE STATUS est toujours "00" (VRAI/FAUX). Expliquez (1 phrase). Faux, le premier caractère est à 0 pour indiquer une insertion réussie, mais le deuxième peut prendre par exemple la valeur 2 dans le cas d'une insertion avec clé dupliquée dans un fichier indexé.

4. Programmes

On a le fichier séquentiel standard ayant la structure suivante:
Code Client Raison sociale Adresse Code Postal Ville
7 24 24 5 24
Les codes clients commencent à 1 sont numériques et se suivent, mais le fichier séquentiel standard n'est pas trié.

Question 1

Proposez une structure de données (DATA DIVISION) pour la représentation de ce fichier sous forme de fichier relatif. Le fichier relatif devra permettre d'accéder rapidement à un enregistrement étant donné un code client. Expliquez votre choix en une phrase. [ 2 points ]

On va utiliser un fichier relatif, puisque toutes les propriétés nécessaires sont réunies (clés numériques, pas trop de trous). L'important est que la clé n'a pas besoin de faire partie de la structure. Elle est encodée implicitement dans la position de l'enregistrement dans le fichier.

	01 rec-rel.
		10 raison-sociale	PIC X(24).
		10 adresse		PIC X(24).
		10 code-postal		PIC X(5).
		10 ville		PIC X(24).

Question 2

Ecrivez le programme qui à partir du fichier séquentiel standard crée le fichier relatif ayant la structure que vous avez choisie à la question 1. Vous devez écrire le programme complet (ENVIRONMENT DIVISION, DATA DIVISION et PROCEDURE DIVISION). [ 4 points ] Indication: il est peut-être nécessaire de trier. Le programme.

Question 3

Ecrivez le programme qui, utilisant votre fichier relatif, lit au clavier un numéro de code client et imprime les autres renseignements. Vous devez écrire le programme complet (ENVIRONMENT DIVISION, DATA DIVISION et PROCEDURE DIVISION). [ 4 points ] Le programme.

Vous vous efforcerez d'écrire lisiblement.


Christophe Tronche, ch@tronche.com