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 *)