Ah d'accord, je vois ce que vous voulez dire, mais du coup est ce qu'il faut recréer un compteur ?
Ah d'accord, je vois ce que vous voulez dire, mais du coup est ce qu'il faut recréer un compteur ?
Pour dire que si le nombre qu'il a entré est égal au compteur, alors on affiche ce mot.
Ah je crois voir votre problème ... Ce que vous écrivez aurait eu du sens si vous étiez resté sur une recherche séquentielle sur le fichier. Mais vous êtes parti sur une autre méthode, à savoir chargement dans un tableau puis accès direct.
Par contre ne mélangez pas les deux façons de faire.
Il suffit donc de valoriser l'indice du tableau à la valeur du nombre entré.
On peut même faire l'économie de l'indice du tableau puisque en fait le nombre saisi peut faire l'affaire, mais bon c'est du détail.
Il suffirait donc de faire COMPUTE WCPT = WNBR + 1 ?
Ah non, il faudrait juste faire WCPT = WNBR ?
D'accord je vous remercie de votre réponse
Cependant quand j'exécute le code ci dessous :
Il m'affiche ceci:
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 SAISIE. move 0 to WNBR COMPUTE WCPT = WNBR 000290 perform until WNBR = 99 OR WCPT < 1 OR WCPT > 26 000300 display 000310 " Donner un nombre de 01 à 26 ou 99 pour terminer : " 000320 accept WNBR 000330 if WNBR not = 99 000340 if WNBR = 0 or WNBR > 26 000350 display "Erreur saisie, nombre hors limites" 000360 else if WNBR not = 99 if WCPT = WNBR display "Mot trouvé : " TMOT(WCPT) " de type : " TTYPE(WCPT) END-PERFORM. EXIT.
En effet, il m'affiche le mot en question 1 fois sur deux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Donner un nombre de 01 Ó 26 ou 99 pour terminer : 2 Donner un nombre de 01 Ó 26 ou 99 pour terminer : 2 Mot trouvÚ : un Test de type : Nom Commun Donner un nombre de 01 Ó 26 ou 99 pour terminer :
J'ai fait une erreur d'étourderie, merci pour tout ça fonctionne
Bonjour.
Bon ça a l'air d'avancer, quelques remarques cependant :
- La condition de fin de la saisie du nombre doit être uniquement WNBR = 99 et non < 1 ou > 26
- Inutile de répéter else if WNBR not = 99
- l'opérateur doit frapper le 0 précédent les nombres à un seul chiffre sous la forme 01, 02, 03, etc.... le compilateur ne sait pas faire le cadrage automatiquement lors de la saisie d'un nombre non formatée, ou alors il faut passer par la fonction NUMVAL.
Voilà ce que cela donnerait avec cet exemple de programme :
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 000010 Identification Division. 000020 Program-Id. ALXANDR2-CBL. 000030 Author. H.JAIDANE. 000040 Environment Division. 000050 Configuration Section. 000060 Source-Computer. IBM-PS2. 000070 Object-Computer. IBM-PS2. 000080 Special-Names. 000090 Input-Output Section. 000100 File-Control. 000110 Select FICHIER assign "FICHMOTS.TXT" 000120 organization line sequential. 000130* 000140 Data Division. 000150 File Section. 000160* 000170 FD FICHIER. 000180 01 LIGNE-MOT. 000190 03 FMOT pic X(25). 000200 03 FTYPE pic X(10). 000210* 000220 Working-Storage Section. 000230 77 WCPT pic 99. 000240 77 WNBR pic 99. 000250 77 WFF pic 9 value 0. 000260 01 TAB-MOTS. 000270 03 LIG-MOT occurs 26. 000280 05 TMOT pic X(25). 000290 05 TTYPE pic X(10). 000300 Procedure Division. 000310 CHARGEMENT-FICHIER. 000320 open input FICHIER. 000330 move 0 to WCPT. 000340 move 0 to WFF. 000350 move spaces to TAB-MOTS. 000360 perform until WFF = 1 or WCPT = 26 000370 read FICHIER 000380 at end move 1 to WFF 000390 not at end 000400 add 1 to WCPT 000410 move FMOT to TMOT(WCPT) 000420 move FTYPE to TTYPE(WCPT) 000430 Display "Chargé : " FMOT " / " FTYPE " en " WCPT. 000440 000450 close FICHIER. 000460 SAISIE. 000470 move 0 to WNBR 000480 perform until WNBR = 99 000490 display 000500 " Donner un nombre de 01 à 26 ou 99 pour terminer : " 000510 accept WNBR 000520 if WNBR not = 99 000530 if WNBR = 0 or WNBR > 26 000540 display "Erreur saisie, nombre hors limites" 000550 else display 000560 "Mot " WNBR " : " TMOT(WNBR) " / " TTYPE(WNBR). 000570 000580 stop run.
Bonjour,
Je remercie pour toutes vos réponses cela fonctionne maintenant
Petite question, cependant comment pourrait-on afficher le dernier caractère du mot, sachant que le mot saisi est variable ?
Il faudrait faire une boucle qui part du dernier caractère de ta variable et qui décrémente pour détecter le premier caractère différent de space.
Il est aussi possible de passer par un tableau avec une variable en X(1) dont le nombre d'occurrences correspond à ta taille de champ.
D'accord je vais regarder ça merci
Après réflexion, je n'ai pas d'idée concernant l’affichage du caractère en fin de mot.
Sans penser COBOL tu peux déjà nous présenter un algorithme.
Bonsoir à tous,
Désolé de vous répondre aussi tardivement mais je viens de réussir, merci à tous pour vos réponses
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager