Ajout des numéros de lignes

This commit is contained in:
rick 2021-03-17 22:30:41 +01:00
parent 883b2a19e6
commit ddf165db95
Signed by: Rick
GPG key ID: 2B593F087240EE99

View file

@ -1,211 +1,211 @@
IDENTIFICATION DIVISION. 000001 IDENTIFICATION DIVISION.
PROGRAM-ID. jour-cinq. 000002 PROGRAM-ID. jour-cinq.
000003
ENVIRONMENT DIVISION. 000004 ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION. 000005 INPUT-OUTPUT SECTION.
FILE-CONTROL. 000006 FILE-CONTROL.
SELECT FILE1 ASSIGN TO "input" 000007 SELECT FILE1 ASSIGN TO "input"
ORGANIZATION LINE SEQUENTIAL. 000008 ORGANIZATION LINE SEQUENTIAL.
000009
DATA DIVISION. 000010 DATA DIVISION.
FILE SECTION. 000011 FILE SECTION.
FD FILE1. 000012 FD FILE1.
01 INPUT-FILE. 000013 01 INPUT-FILE.
02 STR PIC A(17). 000014 02 STR PIC A(17).
000015
WORKING-STORAGE SECTION. 000016 WORKING-STORAGE SECTION.
01 MY-FILE. 000017 01 MY-FILE.
02 MY-STR PIC A(17). 000018 02 MY-STR PIC A(17).
01 FILE-STATUS PIC X VALUE 'N'. 000019 01 FILE-STATUS PIC X VALUE 'N'.
88 EOF VALUE 'Y'. 000020 88 EOF VALUE 'Y'.
77 NB-NICE-PREM PIC 9(4) VALUE 0. 000021 77 NB-NICE-PREM PIC 9(4) VALUE 0.
77 NB-NICE-DEUX PIC 9(4) VALUE 0. 000022 77 NB-NICE-DEUX PIC 9(4) VALUE 0.
000023
PROCEDURE DIVISION. 000024 PROCEDURE DIVISION.
main. 000025 main.
OPEN INPUT FILE1. 000026 OPEN INPUT FILE1.
PERFORM UNTIL EOF 000027 PERFORM UNTIL EOF
READ FILE1 RECORD INTO MY-FILE 000028 READ FILE1 RECORD INTO MY-FILE
* Lorsquon arrive à la fin du fichier, on met Y pour le signaler 000029* Lorsquon arrive à la fin du fichier, on met Y pour le signaler
AT END MOVE 'Y' TO FILE-STATUS 000030 AT END MOVE 'Y' TO FILE-STATUS
NOT AT END CALL "hub" USING 000031 NOT AT END CALL "hub" USING
BY CONTENT MY-STR, 000032 BY CONTENT MY-STR,
BY REFERENCE NB-NICE-PREM 000033 BY REFERENCE NB-NICE-PREM
BY REFERENCE NB-NICE-DEUX 000034 BY REFERENCE NB-NICE-DEUX
* On passe par référence NB-NICE pour les incrémenter 000035* On passe par référence NB-NICE pour les incrémenter
END-CALL 000036 END-CALL
END-READ 000037 END-READ
END-PERFORM. 000038 END-PERFORM.
DISPLAY "Nombres de bonnes chaines :" END-DISPLAY. 000039 DISPLAY "Nombres de bonnes chaines :" END-DISPLAY.
DISPLAY "Dans la partie 1 : " NB-NICE-PREM END-DISPLAY. 000040 DISPLAY "Dans la partie 1 : " NB-NICE-PREM END-DISPLAY.
DISPLAY "Dans la partie 2 : " NB-NICE-DEUX END-DISPLAY. 000041 DISPLAY "Dans la partie 2 : " NB-NICE-DEUX END-DISPLAY.
CLOSE FILE1. 000042 CLOSE FILE1.
STOP RUN. 000043 STOP RUN.
000044
***************************************************************** 000045*****************************************************************
* hub : exécute les 2 fonctions pour les 2 parties 000046* hub : exécute les 2 fonctions pour les 2 parties
* STR : la chaine à passer en paramètre aux deux fonctions 000047* STR : la chaine à passer en paramètre aux deux fonctions
* NB-PREM : (REFERENCE) nombre bonnes chaines partie 1 000048* NB-PREM : (REFERENCE) nombre bonnes chaines partie 1
* NB-DEUX : (REFERENCE) nombre bonnes chaines partie 2 000049* NB-DEUX : (REFERENCE) nombre bonnes chaines partie 2
* Ces 2 variables seront incrémentées 000050* Ces 2 variables seront incrémentées
***************************************************************** 000051*****************************************************************
000052
IDENTIFICATION DIVISION. 000053 IDENTIFICATION DIVISION.
PROGRAM-ID. hub. 000054 PROGRAM-ID. hub.
000055
DATA DIVISION. 000056 DATA DIVISION.
LINKAGE SECTION. 000057 LINKAGE SECTION.
77 STR PIC A(17). 000058 77 STR PIC A(17).
77 NB-PREM PIC 9(4). 000059 77 NB-PREM PIC 9(4).
77 NB-DEUX PIC 9(4). 000060 77 NB-DEUX PIC 9(4).
000061
PROCEDURE DIVISION USING STR, NB-PREM, NB-DEUX. 000062 PROCEDURE DIVISION USING STR, NB-PREM, NB-DEUX.
route. 000063 route.
CALL "parse-prem" USING 000064 CALL "parse-prem" USING
BY CONTENT STR, 000065 BY CONTENT STR,
BY REFERENCE NB-PREM 000066 BY REFERENCE NB-PREM
END-CALL. 000067 END-CALL.
000068
CALL "parse-deux" USING 000069 CALL "parse-deux" USING
BY CONTENT STR, 000070 BY CONTENT STR,
BY REFERENCE NB-DEUX 000071 BY REFERENCE NB-DEUX
END-CALL. 000072 END-CALL.
EXIT PROGRAM. 000073 EXIT PROGRAM.
000074
****************************************************************** 000075******************************************************************
* parse-prem : parse la chaine de caractères pour voir le nombre de 000076* parse-prem : parse la chaine de caractères pour voir le nombre de
* bonnes chaines pour la partie 1. Prend en paramètres 2 arguments : 000077* bonnes chaines pour la partie 1. Prend en paramètres 2 arguments :
* STR : chaine de caractères de taille 17 à analyser. 000078* STR : chaine de caractères de taille 17 à analyser.
* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter. 000079* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
***************************************************************** 000080*****************************************************************
000081
IDENTIFICATION DIVISION. 000082 IDENTIFICATION DIVISION.
PROGRAM-ID. parse-prem. 000083 PROGRAM-ID. parse-prem.
000084
DATA DIVISION. 000085 DATA DIVISION.
WORKING-STORAGE SECTION. 000086 WORKING-STORAGE SECTION.
77 CHAR PIC A. 000087 77 CHAR PIC A.
88 VOY VALUE 'a','e','i','o','u'. 000088 88 VOY VALUE 'a','e','i','o','u'.
77 I PIC 99. 000089 77 I PIC 99.
88 END-P VALUE 17. 000090 88 END-P VALUE 17.
77 NB-VOY PIC 99. 000091 77 NB-VOY PIC 99.
77 PRED PIC A. 000092 77 PRED PIC A.
77 TMP PIC AA. 000093 77 TMP PIC AA.
88 BAD VALUE 'ab', 'cd', 'pq', 'xy'. 000094 88 BAD VALUE 'ab', 'cd', 'pq', 'xy'.
77 DOUBLE PIC X. 000095 77 DOUBLE PIC X.
000096
***************************************************************** 000097*****************************************************************
* NB-VOY contient le nombre de voyelles 000098* NB-VOY contient le nombre de voyelles
* PRED le caractère précédent 000099* PRED le caractère précédent
* TMP forme la chaine contenant le caractère précédent et courant 000100* TMP forme la chaine contenant le caractère précédent et courant
* BAD les mauvaises formes de chaines 000101* BAD les mauvaises formes de chaines
* DOUBLE est mit à Y lorsque CHAR = PRED 000102* DOUBLE est mit à Y lorsque CHAR = PRED
* 000103*
* LINKAGE SECTION contient les paramètres du programme parse-str 000104* LINKAGE SECTION contient les paramètres du programme parse-str
***************************************************************** 000105*****************************************************************
000106
LINKAGE SECTION. 000107 LINKAGE SECTION.
77 STR PIC A(17). 000108 77 STR PIC A(17).
77 NB PIC 9(4). 000109 77 NB PIC 9(4).
000110
PROCEDURE DIVISION USING STR, NB. 000111 PROCEDURE DIVISION USING STR, NB.
parse. 000112 parse.
MOVE 0 TO NB-VOY. 000113 MOVE 0 TO NB-VOY.
MOVE 'N' TO DOUBLE. 000114 MOVE 'N' TO DOUBLE.
PERFORM VARYING I FROM 1 BY 1 UNTIL END-P 000115 PERFORM VARYING I FROM 1 BY 1 UNTIL END-P
MOVE STR(I:1) TO CHAR 000116 MOVE STR(I:1) TO CHAR
IF VOY THEN 000117 IF VOY THEN
ADD 1 TO NB-VOY END-ADD 000118 ADD 1 TO NB-VOY END-ADD
END-IF 000119 END-IF
IF I >= 2 000120 IF I >= 2
THEN 000121 THEN
STRING PRED CHAR INTO TMP END-STRING 000122 STRING PRED CHAR INTO TMP END-STRING
IF BAD THEN 000123 IF BAD THEN
EXIT PERFORM 000124 EXIT PERFORM
END-IF 000125 END-IF
IF PRED = CHAR THEN 000126 IF PRED = CHAR THEN
MOVE 'Y' TO DOUBLE 000127 MOVE 'Y' TO DOUBLE
END-IF 000128 END-IF
END-IF 000129 END-IF
MOVE CHAR TO PRED 000130 MOVE CHAR TO PRED
END-PERFORM. 000131 END-PERFORM.
IF NOT BAD AND NB-VOY >= 3 AND DOUBLE = 'Y' THEN 000132 IF NOT BAD AND NB-VOY >= 3 AND DOUBLE = 'Y' THEN
ADD 1 TO NB END-ADD 000133 ADD 1 TO NB END-ADD
END-IF. 000134 END-IF.
EXIT PROGRAM. 000135 EXIT PROGRAM.
END PROGRAM parse-prem. 000136 END PROGRAM parse-prem.
000137
****************************************************************** 000138******************************************************************
* parse-deux : parse la chaine de caractères pour voir le nombre de 000139* parse-deux : parse la chaine de caractères pour voir le nombre de
* bonnes chaines pour la partie 2. Prend en paramètres 2 arguments : 000140* bonnes chaines pour la partie 2. Prend en paramètres 2 arguments :
* STR : chaine de caractères de taille 17 à analyser. 000141* STR : chaine de caractères de taille 17 à analyser.
* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter. 000142* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
***************************************************************** 000143*****************************************************************
000144
IDENTIFICATION DIVISION. 000145 IDENTIFICATION DIVISION.
PROGRAM-ID. parse-deux. 000146 PROGRAM-ID. parse-deux.
000147
DATA DIVISION. 000148 DATA DIVISION.
WORKING-STORAGE SECTION. 000149 WORKING-STORAGE SECTION.
77 CHAR PIC A. 000150 77 CHAR PIC A.
77 I PIC 99. 000151 77 I PIC 99.
88 STR-LENGTH VALUE 17. 000152 88 STR-LENGTH VALUE 17.
77 J PIC 99. 000153 77 J PIC 99.
77 K PIC 99. 000154 77 K PIC 99.
88 DOUBLE-STR-LENGTH VALUE 16. 000155 88 DOUBLE-STR-LENGTH VALUE 16.
77 PRED PIC A. 000156 77 PRED PIC A.
77 MYNEW PIC A. 000157 77 MYNEW PIC A.
77 DOUBLE-CHAR PIC AA. 000158 77 DOUBLE-CHAR PIC AA.
77 DOUBLE-CHAR-NEXT PIC AA. 000159 77 DOUBLE-CHAR-NEXT PIC AA.
77 BETWEEN PIC X. 000160 77 BETWEEN PIC X.
77 DOUBLE PIC X. 000161 77 DOUBLE PIC X.
000162
****************************************************************** 000163******************************************************************
* PRED le caractère précédent 000164* PRED le caractère précédent
* MYNEW le caractère suivant 000165* MYNEW le caractère suivant
* DOUBLE-CHAR la paire à vérifier 000166* DOUBLE-CHAR la paire à vérifier
* DOUBLE-CHAR-NEXT les paires suivantes 000167* DOUBLE-CHAR-NEXT les paires suivantes
* DOUBLE est mit à Y lorsque 2 pairs sont trouvées 000168* DOUBLE est mit à Y lorsque 2 pairs sont trouvées
* BETWEEN est mit à Y lorsque 2 memes lettres en encadrent une 000169* BETWEEN est mit à Y lorsque 2 memes lettres en encadrent une
****************************************************************** 000170******************************************************************
000171
LINKAGE SECTION. 000172 LINKAGE SECTION.
77 STR PIC A(17). 000173 77 STR PIC A(17).
77 NB PIC 9(4). 000174 77 NB PIC 9(4).
000175
PROCEDURE DIVISION USING STR, NB. 000176 PROCEDURE DIVISION USING STR, NB.
deuxieme-part. 000177 deuxieme-part.
MOVE 'N' TO BETWEEN. 000178 MOVE 'N' TO BETWEEN.
MOVE 'N' TO DOUBLE. 000179 MOVE 'N' TO DOUBLE.
PERFORM VARYING I FROM 1 BY 1 UNTIL STR-LENGTH 000180 PERFORM VARYING I FROM 1 BY 1 UNTIL STR-LENGTH
COMPUTE J = I + 1 END-COMPUTE 000181 COMPUTE J = I + 1 END-COMPUTE
MOVE STR(I:1) TO CHAR 000182 MOVE STR(I:1) TO CHAR
IF I > 1 AND I < (LENGTH OF STR - 1) THEN 000183 IF I > 1 AND I < (LENGTH OF STR - 1) THEN
MOVE STR(J:1) TO MYNEW 000184 MOVE STR(J:1) TO MYNEW
IF PRED = MYNEW THEN 000185 IF PRED = MYNEW THEN
MOVE 'Y' TO BETWEEN 000186 MOVE 'Y' TO BETWEEN
END-IF 000187 END-IF
END-IF 000188 END-IF
000189
IF I < ((LENGTH OF STR) - 2) AND DOUBLE = 'N' THEN 000190 IF I < ((LENGTH OF STR) - 2) AND DOUBLE = 'N' THEN
MOVE STR(I:2) TO DOUBLE-CHAR 000191 MOVE STR(I:2) TO DOUBLE-CHAR
ADD 1 TO J END-ADD 000192 ADD 1 TO J END-ADD
PERFORM VARYING K FROM J BY 1 UNTIL DOUBLE-STR-LENGTH 000193 PERFORM VARYING K FROM J BY 1 UNTIL DOUBLE-STR-LENGTH
MOVE STR(K:2) TO DOUBLE-CHAR-NEXT 000194 MOVE STR(K:2) TO DOUBLE-CHAR-NEXT
IF DOUBLE-CHAR = DOUBLE-CHAR-NEXT THEN 000195 IF DOUBLE-CHAR = DOUBLE-CHAR-NEXT THEN
MOVE 'Y' TO DOUBLE 000196 MOVE 'Y' TO DOUBLE
END-IF 000197 END-IF
END-PERFORM 000198 END-PERFORM
END-IF 000199 END-IF
MOVE CHAR TO PRED 000200 MOVE CHAR TO PRED
END-PERFORM. 000201 END-PERFORM.
000202
IF BETWEEN = 'Y' AND DOUBLE = 'Y' 000203 IF BETWEEN = 'Y' AND DOUBLE = 'Y'
THEN 000204 THEN
ADD 1 TO NB END-ADD 000205 ADD 1 TO NB END-ADD
END-IF. 000206 END-IF.
EXIT PROGRAM. 000207 EXIT PROGRAM.
END PROGRAM parse-deux. 000208 END PROGRAM parse-deux.
000209
END PROGRAM hub. 000210 END PROGRAM hub.
END PROGRAM jour-cinq. 000211 END PROGRAM jour-cinq.