Algorithme - chaine de caractères
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Algorithme - chaine de caractères



  1. #1
    tulipe96

    Algorithme - chaine de caractères


    ------

    Bonjour à tous,
    j'ai un exercice d'algorithme que j'ai résolu, il demande d'écrire un algorithme qui dit si la chaine est palindrome ou non, en utilisant une chaine de n caractères.
    Je vous demande de corriger mes erreurs s'il vous plaît, j'ai énormément besoin de votre aide. Merci d'avance

    -----

  2. #2
    Sawken

    Re : Algorithme - chaine de caractères

    Bonjour Tulipe96,

    Elles sont où tes erreurs ? fait voir ton code

  3. #3
    tulipe96

    Re : Algorithme - chaine de caractères

    Bonsoir, je vous remercie de votre réponse. J'ai résolu l'exercice en Algorithme j'ai utilisé aucun l'engage. Que voulez dire par " code" ? Est-ce mon exercice ? Je l'ai joint en bas de ma publication.

  4. #4
    tulipe96

    Re : Algorithme - chaine de caractères

    Désolée, j'ai eu un problème de connexion, voici le code:
    Code:
    Algorithme  mot_palindrome;
    Var   mot: chaine[n];
              b: booléen;
              i, n: entier;
    Debut
     
      Ecrire("Veuillez introduire un mot de plus de 2 caractères: ");
      
      Repeter
       Lire(mot);
      Jusqu'à(longueur(mot)>2)
    
    b<-- vrai;
    n<-- longueur(mot);
    i<--1;
      Si(n mod 2 =0) alors
         debut
    	Tant que ((b=vrai) et (n<>i+1)) faire // <> veut dire =/= (different)
    	  debut
    		Si(mot[i]=mot[n]) alors b<-- vrai;
    		Sinon b<-- faux;
    		i <--  i+1; n <--  n-1;
    	fait;
         fin;
       Sinon
          debut
    	Tant que((b<--vrai) et (n<>i))faire
    	  debut
    		Si(mot[i]=mot[n]) alors b<--vrai;
    		Sinon b<-- faux;
    		i <--  i+1; n <--  n-1;
    	   fait;
            fin;
    Si(b=vrai) alors Ecrire("Le mot introduit est palindrome");
    Sinon Ecrire ("Le mot introduit n'est pas palindrome");
    
    FIN.
    Dernière modification par Antoane ; 08/05/2016 à 18h18. Motif: Intégration du code au corps du message

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Algorithme - chaine de caractères

    Il est possible d'éviter le test de la parité du nombre de caractères.

  7. #6
    tulipe96

    Re : Algorithme - chaine de caractères

    Si j'évite cela; la condition d'arrêt sera quoi? Dans ce que j'ai écrit j'ai différencié les mots de caractères paires et impaires, car j'ai deux cas pour la condition d'arrét dans la boucle tant que.
    A votre avis de vrais- je changer de boucle si; j’utilise pas de parité ?

  8. #7
    Jack
    Modérateur

    Re : Algorithme - chaine de caractères

    une boucle POUR est suffisante puisqu'on connait le nombre d'itérations. Il est vrai que si on veut sortir de la boucle dès la détection d'un non palindrome, une boucle while est préférable, mais ça ne change pas le fait que le nombre d'itérations maxi est indépendant de la parité du nombre de caractères.
    Dernière modification par Jack ; 08/05/2016 à 20h55.

  9. #8
    Sawken

    Re : Algorithme - chaine de caractères

    Bonsoir tulipe96,

    Ton pseudo code est quasi fonctionnel (bien qu'il puisse être bien plus petit), le petit problème c'est ta variable 'i' qui doit être à 0 au lieu de 1 car l'index d'une chaine de caractère commence toujours par 0.
    Donc si chaine == "salut" : chaine[0] = 's', chaine[1] = 'a', chaine[2] = 'l', etc...

    J'espère t'avoir aiguillé

  10. #9
    Jack
    Modérateur

    Re : Algorithme - chaine de caractères

    l'index d'une chaine de caractère commencetoujours par 0
    pas forcément en pseudo code. Tout dépend du langage final. C'est vrai pour tous les langages s'appuyant sur la syntaxe du C, mais pour les autres, ce n'est pas toujours vrai (pascal, fortran, etc.)

  11. #10
    fregoli

    Re : Algorithme - chaine de caractères

    De plus, suivant le langage, une chaine n'est pas forcément représenté par un tableau, et pour accéder à un élément de la chaine, on peut être obligé d'utiliser une méthode ou une fonction spécifique.
    Exemples:
    pour une méthode substr d'un object chaine : chaine.substr(i,1) donnerait le i ème caractère de la chaine, en commençant à 1 pour le 1er (à gauche)
    pour une fonction substring intégrée au langage : substring(chaine,i,1) -> résultat identique.
    Une allumette peut aussi faire déborder le vase...

  12. #11
    Sawken

    Re : Algorithme - chaine de caractères

    Citation Envoyé par Jack Voir le message
    pas forcément en pseudo code. Tout dépend du langage final. C'est vrai pour tous les langages s'appuyant sur la syntaxe du C, mais pour les autres, ce n'est pas toujours vrai (pascal, fortran, etc.)
    J'apprend quelque chose du coup, je n'ai jamais utilisé de langage avec un index de départ à 1.
    Pour le coup j'irai me renseigner ! Merci pour l'info Jack

  13. #12
    tulipe96

    Re : Algorithme - chaine de caractères

    Merci à vous tous pour votre intervention et vos réponses,

    Jack, j'ignore comment écrire la boucle sans parité, je trouve des difficultés pour incrémenter les deux variables i et n en utilisant une seule boucle à la fois.
    Je vais expliquer le déroulement des deux boucles: Si le mot est composé de 4 lettres (paire) j'aimerais que i s'arrête à la 2 ème lettre, le n à la 3ème lettre (en partant de la 4ème lettre), sans devoir passer par la 2ème et la 1ère lettre (même chose pour i: la 3ème et la 4ème). Si le mot contient 3 lettres par exemple, on cherche à ce que i et n s'arrêtent ensemble à la deuxième lettre ( i ne passe pas à la 3ème position, et n à la 1ère. C'est ici que s'arrête leur incrémentation)
    Exemple d'un mot de 3 lettres: 'bas'
    au début : i=1 et n=3 on vérifie si b=s => ils sont différents on sort de la boucle, mais supposons que les deux lettres sont identiques, les variables s'incrémente : i=n=2 -> a=a on s'arrête ici puisque on a pas besoin de revérifier si s=b (c'est à dire que i=3 et n=1) car on l'a déjà fait avant (au moment où i=1 et n=3).
    Même chose pour un mot de 4 lettres: 'haut'
    i=1 et n=4 on vérifié si h=t (supposons qu'ils sont identiques), deuxième étape : i=2 et n=3 on vérifié a=u puis on sort de la boucle, sans devoir passer par i=3 et n=2 (si c'était le cas on revérifie si u=a, ce qui serait inutile puisqu'on l'a déjà fait)
    A mon avis, le nombre de caractères d'un mot joue un rôle essentiel pour déterminer où s'arrête l’incrémentation et la boucle.
    j'aimerais bien que vous m'écriviez une boucle sans utiliser de parité afin que je comprenne mieux. Merci.

    Sawken, ici la chaine est en forme de tableau, on suppose que le nombre d'éléments de cette chaine est n, j'ai deux façons de le parcourir en allant de 0 à n-1 ou de 1 à n (en calculant encore le nombre d'éléments dans les deux cas on retombe sur n: n-1-0+1=n ou n-1+1=n) les deux méthodes sont correctes je pense, mon problème n'est pas là, j'aimerais savoir si les deux boucles fonctionnent correctement, et s'il n'y aurait pas quelque chose que je dois modifier.

    Fregoli, je ne connais pas cette méthode, suis-je obligé de passer par la définition de cette fonction ? ou existe-elle déjà en algorithme ? Pourriez-vous me dire si ça serait correct d'écrire ceci au lieu de la boucle tant que :
    Pour i<-- 1 à n faire
    debut
    Si(mot.substr(i,1)=mot.substr( i,n)) alors b <-- vrai;
    Sinon b<-- faux;
    n<-- n-1;
    fin;

    Merci encore à tous les trois pour votre aide précieuse.

  14. #13
    Jack
    Modérateur

    Re : Algorithme - chaine de caractères

    Jack, j'ignore comment écrire la boucle sans parité
    par exemple pour 'radar' ou 'anna', deux tour de boucle devraient suffire puisque si le nombre d'élément est impair, l'élément central est forcément symétrique. Pour n caractères, le nombre de tours est donc égal à n mod 2 systématiquement.
    je trouve des difficultés pour incrémenter les deux variables i et n en utilisant une seule boucle à la fois.
    tu n'as pas besoin de 2 variables: le compteur de la boucle suffit. Si le mot possède n caractères, que ton tableau commence à l'indice 0, un élément d'indice i aura pour symétrique l'élément d'indice n - i - 1, n restant fixe.

    A toi de jouer

  15. #14
    fregoli

    Re : Algorithme - chaine de caractères

    Citation Envoyé par tulipe96 Voir le message
    Merci à vous tous pour votre intervention et vos réponses,
    ...
    Fregoli, je ne connais pas cette méthode, suis-je obligé de passer par la définition de cette fonction ? ou existe-elle déjà en algorithme ? Pourriez-vous me dire si ça serait correct d'écrire ceci au lieu de la boucle tant que :
    Pour i<-- 1 à n faire
    debut
    Si(mot.substr(i,1)=mot.substr( i,n)) alors b <-- vrai;
    Sinon b<-- faux;
    n<-- n-1;
    fin;

    Merci encore à tous les trois pour votre aide précieuse.
    Ta procédure comporte une erreur à "mot.substr(i,1) = mot.substr(i,n)", il faudrait mettre "mot.substr(i,1) = mot.substr(n-i+1,1)" (elle peut être améliorée en ne parcourant que la moitié de la chaine de caractères comme indiqué plus haut par JACK) si la méthode substr existe dans ton pseudo-langage. Mais comme tout pseudo-langage possède sa propre définition et syntaxe (ex: b <- faux), je ne peux pas te dire si cela sera accepté pour l'exercice.
    De même que pour sortir de la boucle dès que la correspondance n'est pas trouvée, tu peux utiliser une boucle "tant que" au lieu de for, sauf si ton pseudo-langage accepte l'instruction "exit for".

    Je pense que pour l'aspect didactique, il vaudrait mieux utiliser une boucle "tant que" et sortir dès que la correspondance n'est pas trouvée.
    Si tu ne connais pas "substr", mais que tu es certain qu'une chaine de caractères est représentée par un tableau de 1 à n, alors garde la boucle avec un tableau.

    sinon avec substr:

    Code:
    b <-- vrai                            # autant initialiser à vrai une fois pour toute plutôt que de mettre vrai sans arrêt
    i <-- 1
    Tant que i <=  n/2 faire          # on ne parcours que la moitié de la chaine, si nombre impair de lettre, alors celle du milieu est égale à elle même
    debut
         Si(mot.substr(i,1)<>mot.substr(n-i+1,1)) alors 
              b<-- faux;
                   i=n                       # pour sortir tout de suite sans attendre
         fin si
         n<--  n-1;
    fin Tant que;
    si b alors
         ecrire "...Certainement palindromiques ces mots sont ..."
    sinon
         ecrire "...fausse la réponse est..."
    fin si
    Dernière modification par fregoli ; 10/05/2016 à 13h20.
    Une allumette peut aussi faire déborder le vase...

  16. #15
    fregoli

    Re : Algorithme - chaine de caractères

    Citation Envoyé par Jack Voir le message
    ... le nombre de tours est donc égal à n mod 2 systématiquement ...
    le nombre de tours est donc égal à n DIV 2 systématiquement, dans la mesure ou DIV est la division entière
    ...
    et si ton tableau commence à l'indice 1, un élément d'indice i aura pour symétrique l'élément d'indice n - i + 1, n restant fixe
    Une allumette peut aussi faire déborder le vase...

  17. #16
    fregoli

    Re : Algorithme - chaine de caractères

    erreur de copier dans ma boucle tant que j'ai fait:

    i <- i + 1 et non n <- n - 1
    Une allumette peut aussi faire déborder le vase...

  18. #17
    Jack
    Modérateur

    Re : Algorithme - chaine de caractères

    le nombre de tours est donc égal à n DIV 2 systématiquement, dans la mesure ou DIV est la division entière
    Heureusement qu'il y en a qui suivent
    Merci pour la correction de ce lapsus.

    et si ton tableau commence à l'indice 1, un élément d'indice i aura pour symétrique l'élément d'indice n - i + 1, n restant fixe
    Absolument !
    Dernière modification par Jack ; 10/05/2016 à 14h40.

  19. #18
    fregoli

    Re : Algorithme - chaine de caractères

    pas de quoi, je crois que malgré mes relectures avant de cliquer sur "envoyer" j'en fais pas mal non plus (voir au dessus ... )
    Dernière modification par fregoli ; 10/05/2016 à 14h45. Motif: ben tiens: j'en fait... c'est pas mal
    Une allumette peut aussi faire déborder le vase...

Discussions similaires

  1. C18 et chaine de caracteres.
    Par punky591 dans le forum Électronique
    Réponses: 11
    Dernier message: 08/10/2015, 12h03
  2. chaîne de caractères
    Par invite11df21b5 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 30/01/2013, 19h36
  3. Décodage d'une chaine de caractères, PIC 16F en C
    Par marvinl dans le forum Électronique
    Réponses: 5
    Dernier message: 03/07/2012, 19h17
  4. Chaine de caractères en C
    Par invite953f8104 dans le forum Électronique
    Réponses: 8
    Dernier message: 03/03/2009, 20h28
  5. PIC : Chaine de caractères
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2006, 17h49