PASCAL-Suppression de caractères identiques chaîne

Bonjour, alors on me demande d’écrire un programme permettant de saisir une chaîne puis d’effacer les caractères identiques dans cette chaine

par ex si ch=aaabbbaacca le résultat sera abc . alors j’ai écris mon programme et il m’a semblé logique mais en l’exécutant sur pascal m’affiche ‘‘an error has occurred in your application’’ puis il se bloque. voici ce que j’ai écrit:

uses wincrt;

var

ch:string;

i,j:integer;

begin

write('saisir ch ');

readln(ch);

for i:=1 to length(ch) do;

j:=i;

repeat

if ch[i]=ch[j] then delete(ch,j,1) ;

else j:=j+1;

until j=length(ch);

write(ch);

end.

Merci d’avance pour votre aide :slight_smile:

PS: lorque je remplace for i:=1 to length(ch) do par son équivalent par le boucle repeat i:=0

repeat

i:=i+1

until i=length

et quand je remplace aussi until j=length(ch) par j>;length(ch) le programme marche comme il faut mais je ne comprend pas pourquoi . Quelqu’un pourrait m’éclaircir ? merci pour vos réponses ! :slight_smile:

salut,

for i:=1 to length(ch) do;// avec cet instruction i va boucler de 1 jusqu’à la longueur de CH exemple si ch =‘abcd’ la valeur de i sera 4 .

j:=i; // avec cet instruction j = 4 si ch =‘abcd’

repeat

if ch[i]=ch[j] then delete(ch,j,1) ; (* maintenant ch[4]=ch[4] donc on supprime ch[4] implique que la taille de ch devient 3 *)

else j:=j+1;

until j=length(ch); (* la taille de ch = 3 est différent de 4 le programme va boucler sans arrêt (il va planter) mais avec > au lieu de := marche mais le l’algorithme est faux *)