Bonjour tout le monde,
Je suis occupé à faire un exercice qui consiste à inverser les colonnes d'un tableau comme le montre l'exemple ci-dessous :
333639883256
devient
563288393633 (le dernier devient le premier...)
Je me demandais si il y'avait une fonction qui permettait de le faire sans devoir utiliser IF THEN END IF.
J'ai essayé ceci :
MOVE FUNCTION REVERSE(TA2(I,J)) TO TA2(I,NB-K)
Mais il inverse les nombres avant de les positionner au bon endroit, ça donne avec l'exemple ci-dessus :
652388936333
Merci d'avance pour votre aide.
beegees
PS: voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 IDENTIFICATION DIVISION. PROGRAM-ID. ExamenCobol2eSession. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *AssignATION NOM PHYSIQUE - NOM LOGIQUE SELECT FICH2008 ASSIGN "tableaux.txt" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FICH2008. 01 STRUCTURE. 02 TAB-FICH. *Permet de savoir si on est à la fin du fichier 88 FIN-FICH VALUE HIGH-VALUES. *Ici on a besoin que de la ligne *Je crée un niveau supplémentaire car plus facile de copier la *ligne dans le tableau. 03 CHIFR. 04 C PIC 99 OCCURS 8 TIMES. WORKING-STORAGE SECTION. *TABLEAU 01 TABLEAU. *les lignes du tableau 03 TA1 OCCURS 4 TIMES. *les colonnes 04 TA2 PIC XX OCCURS 6 TIMES. 77 I PIC 99. 77 J PIC 99. * NB-K : nombre de colonne et K la constante de ces colonnes 77 K PIC 9 VALUE 6. 77 NB-K PIC 9. * VASE : vase pour la permutation des données 77 VASE PIC 99 VALUE 0. PROCEDURE DIVISION. PAR. ***************DEBUT DU CODE DE L'AFFICHAGE A L'ECRAN************* *Ouverture du fichier en lecture OPEN INPUT FICH2008. *Ce I va servir à sélectionner la colonne du tableau MOVE 0 TO I. *Lecture de la première ligne READ FICH2008 AT END SET FIN-FICH TO TRUE END-READ *Tant qu'on est pas à la fin du fichier PERFORM UNTIL FIN-FICH ADD 1 TO I MOVE CHIFR TO TA1(I) READ FICH2008 AT END SET FIN-FICH TO TRUE END-READ END-PERFORM. CLOSE FICH2008. DISPLAY "************************************". DISPLAY "* TABLEAU DE DEPART *". DISPLAY "************************************". AFFICH-TAB. * Affichage du tableau PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 PERFORM VARYING J FROM 1 BY 1 UNTIL J > 6 DISPLAY TA2(I,J) " " WITH NO ADVANCING END-PERFORM DISPLAY ' ' END-PERFORM. **************FIN DU CODE DE L'AFFICHAGE A L'ECRAN**************** TRAITEMENT. DISPLAY " ". DISPLAY "************************************". DISPLAY "* TABLEAU ARRIVEE *". DISPLAY "************************************". * Traitement de l'information MOVE K TO NB-K. PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3 * Si on avait un nombre de colonne impaire on ne devrait * pas remplacer la colonne du milieu IF TA2(I,J) <> TA2(I,NB-K) MOVE FUNCTION REVERSE(TA2(I,J)) TO TA2(I,NB-K) * Si on avait un nombre de colonne impaire on ne devrait * pas remplacer la colonne du milieu END-IF ADD -1 TO NB-K END-PERFORM MOVE K TO NB-K PERFORM AFFICH-TAB. STOP RUN.
Partager