Bonjour,
d’après ce que j'ai appris, la taille maximum d'une chaîne de caractères est 256.
Comment puis-je résoudre ce problème ?
Bonjour,
d’après ce que j'ai appris, la taille maximum d'une chaîne de caractères est 256.
Comment puis-je résoudre ce problème ?
Bonjour,
Difficile de t'aider si tu ne donnes pas plus de précisions : où rencontres-tu des difficultés ? Peux-tu nous montrer ton code ?
voila 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 program doube; var ch:string; p:integer; b:boolean; procedure remplir(var ch:string); begin readln(ch); end; procedure rech(ch:string; var b:boolean; var p:integer); begin p:=0; b:=false; repeat p:=p+1; if ch[p]=ch[p+1] then b:=true; until (b=true) or (p=length(ch)); end; begin remplir(ch); rech(ch,b,p); while b=true do begin delete(ch,p,2); rech(ch,b,p); end; write(ch); end.
Bonjour ! Vous n'étiez pas très loin de la solution.
Il y a une première erreur, c'est que vous effacez deux caractères là où il faudrait n'en effacer qu'un :
Il y a une deuxième erreur, c'est que la dernière comparaison à faire est la comparaison entre l'avant-dernier caractère et le dernier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //delete(ch,p,2); delete(ch,p,1);
Une fois ces deux corrections faites, il me semble que le programme donne le résultat attendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //until (b=true) or (p=length(ch)); until (b=true) or (p=length(ch) - 1);
Après, certaines améliorations pourraient être apportées. Par exemple, si vous regardez bien, le paramètre p de la procedure rech() ne sert à rien dans l'état actuel du code.
même avec vos solution ça marche pas !
je suis certain qu'il faut effacer deux caractères(lire le sujet)
L'exemple que vous avez donné (outre qu'il n'est pas très lisible) est bizarre. Quelle est la logique qui fait passer de "baaabbacddc" à "b" ? Je ne comprends pas.
Ouf, un semble marcher, mais critère pour le moins curieux
- En effet où on garde au moins une note en cas de doublons et cela deviendrait "babacdc";
- Où ôte entièrement toute séquence de multiple, par exemple "ôter tous les doubles et recommencer" => "bacc" puis finalement "bac".
- On peut aussi ôter et continuer du point courant : "Baaabbacddc" => "bBbacddc"=> "bAcddc" => "bacC"
- On peut aussi ôter et reanalyser du point courant : "Baaabbacddc" => "bBbacddc"=> "Acddc" => "acC" => "a'
- Si ôte tout avec ré-analyse totale après chaque modification, on a la séquence "baaabbacddc" => "bbbacdcc" => "acdcc" => "acdc"
- Le même méthode partant de la fin : "baaabbacddc" => "baaabbacc" => "baaabba" => "baaaa" => "b"
Il faudrait donc traiter les caractères à partir des derniers.
Attention, la fonction rech doit en plus de l'indice, rechercher et indiquer le nombre à ôter : NbIdems.
La delete doit recevoir non pas 1, non pas 2, mais ce NbIdems (mais selon moi un filtre musical utiliserait NbIdems-1 )
Oui, en Pascal on peut dépasser 255 caractères, on était limité à 65000 mais c'était avant.
Mais en Pascal la limite à 255 correspond au fait que l'on stocke que des octets, et donc que certains caractères ne sont pas utilisables.
Salut,
Une chaîne de caractères est à considérer comme un tableau d'entiers non signés où le premier élément (indice 0) correspond à la valeur courante de l'attribut de longueur (la même valeur que l'on obtient avec la fonction length).
Etant donné que cet élément est codé sur un octet non signé, la limite à 255 correspond donc à la valeur maximal d'un octet.
Mais il existe aussi les chaînes à zero terminale lesquelles ne contiennent pas d'octet de longueur et sont constituées de caractères non nuls, suivis d'un caractère nul (Code ASCII 0).
Avec elles nous pouvons traiter (à l'aide des fonctions de l'unité Strings) des chaînes de quasi 64ko.
Ma réponse donnait d'une part (et pour information) la raison pour laquelle une chaîne de caractère est limitée à 255 caractères.Envoyé par aminebenkraiem
Et d'autre part te suggérait de te renseigner sur les chaînes à zero terminal car...
Donc si ton code nécessite des chaînes de longueur supérieur à 255 octets, je te recommande d'étudieravec elles nous pouvons traiter (à l'aide des fonctions de l'unité Strings) des chaînes de quasi 64ko.
Partager