aoc-2015/jour05/jour5-prem.cob
rick 1f25b3f040
Débug & Ajout de commentaires
JPP j’avais juste mal lu l’énoncé.
2021-03-07 15:07:19 +01:00

113 lines
3.7 KiB
COBOL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

IDENTIFICATION DIVISION.
PROGRAM-ID. jour-cinq-prem-part.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE1 ASSIGN TO "input"
ORGANIZATION LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FILE1.
01 INPUT-FILE.
02 STR PIC A(17).
WORKING-STORAGE SECTION.
01 MY-FILE.
02 MY-STR PIC A(17).
01 FILE-STATUS PIC X VALUE 'N'.
88 EOF VALUE 'Y'.
77 NB-NICE PIC 9(4) VALUE 0.
PROCEDURE DIVISION.
main.
OPEN INPUT FILE1.
PERFORM UNTIL EOF
READ FILE1 RECORD INTO MY-FILE
* Lorsquon arrive à la fin du fichier, on met Y pour le signaler
AT END MOVE 'Y' TO FILE-STATUS
NOT AT END CALL "parse-str" USING
BY CONTENT MY-STR,
BY REFERENCE NB-NICE
* On passe par référence NB-NICE pour lincrémenter
END-CALL
END-READ
END-PERFORM.
DISPLAY "Nombre de bonnes chaines : " NB-NICE.
CLOSE FILE1.
STOP RUN.
******************************************************************
* parse-str : parse la chaine de caractères pour voir le nombre de
* bonnes chaines. Prend en paramètres 2 arguments :
* STR : chaine de caractères de taille 16. Sera parser.
* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
IDENTIFICATION DIVISION.
PROGRAM-ID. parse-str.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CHAR PIC A.
88 VOY VALUE 'a','e','i','o','u'.
77 I PIC 99.
88 END-P VALUE 17.
77 NB-VOY PIC 99.
77 PRED PIC A.
77 TMP PIC AA.
88 BAD VALUE 'ab', 'cd', 'pq', 'xy'.
77 DOUBLE PIC X.
* NB-VOY contient le nombre de voyelles
* PRED le caractère précédent
* TMP forme la chaine contenant le caractère précédent et courant
* BAD les mauvaises formes de chaines
* DOUBLE est mit à Y lorsque CHAR = PRED
*
* LINKAGE SECTION contient les paramètres du programme parse-str
LINKAGE SECTION.
77 STR PIC A(17).
77 NB PIC 9(4).
PROCEDURE DIVISION USING STR, NB.
parse.
MOVE 0 TO NB-VOY.
MOVE 'N' TO DOUBLE.
d DISPLAY STR.
d DISPLAY "=================".
PERFORM VARYING I FROM 1 BY 1 UNTIL END-P
MOVE STR(I:1) TO CHAR
d DISPLAY "ACT. CHAR : " CHAR
d DISPLAY "ACT. PRED : " PRED
d DISPLAY "I : " I
IF VOY
THEN ADD 1 TO NB-VOY
END-IF
IF I >= 2
THEN
STRING PRED CHAR INTO TMP
d DISPLAY "TMP STR : " TMP
IF BAD
THEN
EXIT PERFORM
END-IF
IF PRED = CHAR
THEN
MOVE 'Y' TO DOUBLE
END-IF
d DISPLAY "DOUBLE : " DOUBLE
END-IF
MOVE CHAR TO PRED
END-PERFORM.
IF NOT BAD AND NB-VOY >= 3 AND DOUBLE = 'Y'
THEN
ADD 1 TO NB
END-IF.
EXIT PROGRAM.
END PROGRAM parse-str.
*************************************************************************
END PROGRAM jour-cinq-prem-part.