1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : août 2016
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Nettoyer une chaîne des espaces superflus

    Bonjour !
    J'ai essayé de faire ce programme sur Pascal mais ça ne fonctionne pas !
    Je doute que le problème est à cause de la boucle while ... do.
    Le programme permet de nettoyer une chaîne des espaces superflus (deux espaces qui se suivent et tout espace au début ou à la fin du chaîne).
    Si quelqu'un avait la gentillesse de m'éclairer, j'en serais ravi.
    Nom : Sans titre.jpg
Affichages : 107
Taille : 37,8 Ko
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 5 252
    Points : 7 152
    Points
    7 152

    Par défaut

    Bonsoir,

    tu aurais peut-être plus de réponses si tu mettais le code de ton programme (avec la balise CODE [le bouton dièse # au bout de la deuxième ligne de l'éditeur]) plutôt que des images du code, parce qu'avec des images on ne peut pas copier/coller le code, on peut juste le regarder sans rien tester, à moins de tout retaper, et ça c'est très pénible !
    Sans compter les risques d'erreurs...

    Alors c'était peut-être plus facile pour toi (encore que, je n'en suis même pas sûr), mais pas pour les autres, d'accord ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : août 2016
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    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
    program ex;
    uses wincrt;
    var
    ch,a:string;
    x,y,z,k:integer;
    begin 
    repeat 
    readln(ch);
    until ch<>''
    a:=ch;
    while (pos(' ',a) <> 0 ) do 
    delete(a,pos(' ',a),1);
    x:= pos(a[1],ch);
    y:= pos(a[length(a)],ch);
    z:= pos(' ',ch);
    while (z<x) or (z>y) do
    delete(ch,z,1);
    k:=pos('  ',ch);
    while k <>0 do 
    delete(ch,k,1);
    writeln(ch);
    end.
    ça va comme ça ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 970
    Points : 10 784
    Points
    10 784
    Billets dans le blog
    4

    Par défaut

    Bonjour !

    Il y a pas mal de choses à revoir dans ton code. Pour commencer, que fait la ligne suivante selon toi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (pos(' ', a) <> 0) do
      delete(a, pos(' ', a), 1);
    Est-ce que ce n'est pas deux espaces consécutifs qu'il faudrait chercher ?

    Concernant le début et la fin de la chaîne, la façon dont tu t'y prends me paraît inutilement compliquée.

  5. #5
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 333
    Points : 3 625
    Points
    3 625

    Par défaut

    salut

    reprenons ton 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
     
    program ex;
    uses wincrt;
    var
    ch,a:string;
    x,y,z,k:integer;
    begin 
    repeat 
    readln(ch);
    until ch<>''
    // jusqu'ici tout vas bien tu vérifie la saisie d'une phrase ou un mot  
    a:=ch; // bon là tu affecte ch a a pourquoi ????
     
    while (pos(' ',a) <> 0 ) do  // ici tu ne vérifie qu'un espace perso j'aurais vérifié les deux espaces  
      delete(a,pos(' ',a),1); // boom ici tu efface tout les blancs  
     
    x:= pos(a[1],ch); // donc la tu vérifie que le caractère en a[1] se trouve dans ch ??? pourquoi a[1]
    y:= pos(a[length(a)],ch); // donc la tu vérifie que le dernier caractère en a se trouve dans ch ??? pourquoi le dernier de caractère de a
    z:= pos(' ',ch); // tu recherche de nouveau l'espace 
     
    while (z<x) or (z>y) do // là tu cherche les borne c'est spécial surtout que tu as déjà supprimé le premier espace 
      delete(ch,z,1); // il est ou l’incrément de ta boucle 
     
    k:=pos('  ',ch); //ici tu recherche les deux espace et c’était  pour moi la meilleur méthode 
    while k <>0 do  
      delete(ch,k,1); // il est ou l’incrément de ta boucle 
     
    writeln(ch);
    end.
    tu étais presque sur la bonne voie
    voilà comment j'aurais géré les doublon d'espace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    i := pos('  ',ch);
    While i <> 0 do 
    begin
      delete(ch,i,1); 
      i :=pos('  ',ch); //ici je recherche la prochaine position  
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Réponses: 19
    Dernier message: 02/06/2008, 19h41
  2. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  3. Boucle tant que ..
    Par darksnake dans le forum VBScript
    Réponses: 5
    Dernier message: 26/09/2006, 10h10
  4. exercice avec boucle tant que
    Par byteBoy dans le forum Général Algorithmique
    Réponses: 2
    Dernier message: 05/05/2006, 17h39
  5. [LG] Inversion avec une boucle tant que
    Par erickson dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo