IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Déterminer si une chaine de caractères est un palindrome


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut Déterminer si une chaine de caractères est un palindrome
    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

    Code x : 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
    30
    31
    32
    33
    34
    35
    36
    37
    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.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Pourquoi distinguer 2 cas, nombre de lettres pair ou impair ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Bonjour

    Tu n'as besoin de parcourir que la moitié du mot.

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut
    Bonsoir, merci à vous deux pour votre réponse,

    Trap D, j'ai pensé à la parité du nombre de lettres composant le mot, comme j'ai besoin de deux conditions d'arrêt pour les variables (i et n), voici un exemple de déroulement:
    Si le nombre de caractères du mot est paire : exemple le mot 'haut'
    au début i=1 et n=4 (n étant la longueur du mot=4) on vérifie si h=t, la 2ème étape: i=2 et n=3 on vérifie encore si a=u puis on sort de la boucle, j'ai pensé à ce que l'incrémentation de i et n s'arrête ici, car si on continue on aura ça : i=3 et n=2 le système va comparer si u=a ce qui serait inutile car il a déjà passé par cette comparaison.
    Dans le cas où le nombre de caractères est impaire, exemple pour le mot 'bas'
    i=1 et n=3 , on vérifie si b=s. 2ème étape i=n=2 on vérifie si a=a, et on s'arrête ici, on sort de la boucle, et on arrête l'incrémentation afin que le système ne refait pas la comparaison qu'il a déjà fait.. Autrement dit, si i=3 et n=1 on retombe sur la première comparaison: s=b qu'on es pas censé refaire.
    Je ne vois pas comment écrire l'algorithme avec une seule boucle, pourriez vous me l'écrire afin que je comprenne mieux ? Merci.


    Flodelarab, oui en effet, c'est ce que j'ai fait dans la boucle tant que, dans la 1ère Tant que ((b=vrai) et (n<>i+1) dans la 2ème Tant que((b<--vrai) et (n<>i)), mon exemple que j'ai écrit en dessus explique ma façon de parcourir la chaine.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Soit N le nombre de lettres du mot. Il ne bouge pas ! Contrairement à ton n.
    Soit i un indice.

    La lettre à la ième place est la même qu'à la (n-i+1)ème place, quelque soit la parité de N.

    i parcourt les nombres de 1 à N/2 quelque soit la parité et le signe "/" étant la division entière:
    6/2=3
    5/2=2
    4/2=2
    Dans un mot de 5 lettres, la lettre centrale n'a pas à être testée puisqu'elle est forcément bonne.

    Tu n'as pas besoin de plusieurs boucles, ni d'étudier la parité, ni de dépasser N/2.

    Simplifie ton algorithme.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    L'algorithme est une simple boucle tant que avec deux conditions et des incrementations.

    On peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    debut
      initialisation des indices
      tant que condition_1 et conditions_2 faire
           (in/de)cremetation des indices
      fin tant que
      si condtion alors
         c'est un palindrome
      sinon
        ce n'est pas un palindrome
      fin si
    fin
    A toi de trouver ce qu'il faut ettre à certains endroits !

    PS je trouve plus simple d'utiliser 2 indices plutôt qu'un seul, question de goût.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. tester si une chaine de caractère est un entier ?
    Par farid0031 dans le forum C++Builder
    Réponses: 7
    Dernier message: 12/05/2009, 16h32
  2. Réponses: 3
    Dernier message: 12/12/2008, 10h47
  3. Vérifier qu'une chaine de caractère est bien présente
    Par kilian67 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/09/2007, 18h10
  4. Réponses: 9
    Dernier message: 19/10/2006, 17h02

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