Partage
  • Partager sur Facebook
  • Partager sur Twitter

PASCAL-Suppression de caractères identiques chaîne

24 février 2019 à 9:32:27

[EDIT] 

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

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

-
Edité par Rachm123 24 février 2019 à 16:10:35

  • Partager sur Facebook
  • Partager sur Twitter
24 février 2019 à 13:10:41

bonjour,

je n'ai pas la réponse (je ne connais pas le pascal), mais je peut te dire que ton post n'est pas vraiment cool a lire:

- Met le nom du langage dans ton titre [PASCAL] avant ton problème

- met ton code dans une balise code

il n'y a pas de coloration pour le pascal, mais tu peut mettre en plain text, ça fait ça :

uses wincrt;

var

ch:string;

i,j:integer;

begin ...

- N'abuse pas du gras, c'est bien pour mettre en valeur certaines partie de ton post

- et si tu édite ton message met un [EDIT] et met ce que tu veux après

Sur ce bonne journée !

  • Partager sur Facebook
  • Partager sur Twitter
26 février 2019 à 20:14:30

Il y a encore des profs qui font faire du pascal à leurs étudiants ? o_O

Je pense que c'est parce que la longueur de ta chaîne diminue lorsque tu fais delete. Du coup au bout d'un moment dans la boucle for tu accède à des indices trop  grands.

Méme raison pour le j=length(ch).

Par exemple ta chaine a une longueur de 5, tu en est à l'indice 4 et comme tu fais j:=j+1 et un delete maintenant la longueur est 4 et j = 5.

Du coup, j=length(ch) n'est jamais vrai.

  • Partager sur Facebook
  • Partager sur Twitter