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

Turbo Pascal Discussion :

Déterminer si une chaîne est un palindrome


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Collégien
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Par défaut Déterminer si une chaîne est un palindrome
    Salut!

    -j'ai trouvé un exemple sur ce site pour faire un Palindrome , j'ai fais une petite source , mais il m'affiche toujours que le mot n'est pas un palindrome :


    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
           var st : String;
              inver: String;
              i : Integer;
     
     
    Begin
    read(st);
                     for i:=0 to length(st) do
     
                      inver:=st[i] + inver ;
                      writeln(st , '=' , inver);
                     if (st[i]=inver[length(st)-i]) then
                                                    Begin
                                 writeln('Le mot est un palidrome');  
     
                            end
                     else  
                            Begin
                      writeln('Le mot n est pas un palidrome');
                                  end
    end.
    merci

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Attention que le premier caractère d'une chaîne de type String se trouve à l'indice 1, pas 0 (c'est l'emplacement de la longueur effective de la chaîne).
    Si tu corriges cela, tu obtiendras bien une chaîne inversée mais, par la suite, ton test ne pourra se résumer à ce que tu as écrit : il faut une boucle.

    Il existe plusieurs méthodes pour tester si un mot est un palindrome et il n'est pas nécessaire de créer une seconde chaîne pour le faire. Voici un petit exemple en pseudo-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
    Variables :
    CHAINE  st
    ENTIER  iGauche
    ENTIER  iDroite
    BOOLEEN Est_Un_Palindrome
    
    Traitement :
    Est_Un_Palindrome <-- VRAI
    iGauche <-- 1
    iDroite <-- LONGUEUR(st)
    
    TANT QUE (iGauche < iDroite) ET Est_Un_Palindrome FAIRE
      SI st[iGauche] = ST[iDroite]
        ALORS
          iGauche <-- iGauche + 1
          iDroite <-- iDroite - 1
        SINON
          Est_Un_Palindrome <-- FAUX
    SI Est_Un_Palindrome
      ALORS
        AFFICHER("C'est un palindrome")
      SINON
        AFFICHER("Ce n'est pas un palindrome")
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Lai,

    Petites précisions.

    Si on veut que ce soit assez général, c'est un peu plus compliqué.

    Entre autres, attention aux tests d'égalité des caractères, car dans un palindrome :

    *- on ne tient pas compte des signes diacritiques (accents, cédille, ...), il faut y faire attention.

    *- ni, bien entendu, de la casse (majuscules/minuscules)

    Quant au parcours de la chaîne, comme dans un palindrome

    *- on ne tient pas compte des caractères spéciaux (espaces, ponctuation, ....)

    ça complique un peu l'algorithme.

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Son programme marche bien moyennant quelques modifications.
    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
     
    program palindrome;
    uses crt;
     
      var
              st : String;
              inver: String;
              i : Integer;
     
    Begin
     clrscr;
     writeln('************ PALINDROME **************');
     write('Donnez un mot : ');
     readln(st);
     inver:='';
     for i:=1 to length(st) do
      inver:=st[i] + inver ;
     writeln(st , '=' , inver);
     if (st=inver) then
      writeln('Le mot est un palidrome')
     else
      writeln('Le mot n'' est pas un palidrome');
     writeln('************* Appuyez sur Entrée *************');
     readln;
     end.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    salut, ici nous somme dans le monde de la programmation. pour atteindre notre objectif a partir de la création des programmes tu peux trouver plusieurs chemin mais l'excellent programmeur c'est qui trouve le bon chemin.

    La meilleur solution c'est Alcatiz:

    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
    Variables :
    CHAINE  st
    ENTIER  iGauche
    ENTIER  iDroite
    BOOLEEN Est_Un_Palindrome
     
    Traitement :
    Est_Un_Palindrome <-- VRAI
    iGauche <-- 1
    iDroite <-- LONGUEUR(st)
     
    TANT QUE (iGauche < iDroite) ET Est_Un_Palindrome FAIRE
      SI st[iGauche] = ST[iDroite]
        ALORS
          iGauche <-- iGauche + 1
          iDroite <-- iDroite - 1
        SINON
          Est_Un_Palindrome <-- FAUX
    SI Est_Un_Palindrome
      ALORS
        AFFICHER("C'est un palindrome")
      SINON
        AFFICHER("Ce n'est pas un palindrome")

    car si il trouve que st[iGauche] <> st[iDroite] alors c'est finie pour quoi il faut vérifier les autres caractères du chaîne c'est seulement des instructions qui n'ont pas de but.


    Remarque: tu peux forcer le boucle pour qu'il sera comme le boucle tant que ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    test<--1
    x<--long(ch)
    pour i de 1 a long(ch) faire
    si ch[i]<>ch[x] alors
    test<--0
    i<--long(ch)
    si non x<-- x-1
    fin si non
    fin pour
     
    si test=1 alors écrire("palindrome") si non ecrire("non palindrome")
    fin si

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    et tu peux utiliser aussi le boucle répéter comme j'ai dis il y a plusieurs solutions
    dsl je suis faible en français.

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Remarque: tu peux forcer le boucle pour qu'il sera comme le boucle tant que ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    test<--1
    x<--long(ch)
    pour i de 1 a long(ch) faire
    si ch[i]<>ch[x] alors
    test<--0
    i<--long(ch)
    si non x<-- x-1
    fin si non
    fin pour
     
    si test=1 alors écrire("palindrome") si non ecrire("non palindrome")
    fin si
    Je ne sais pas où tu as appris à modifier la valeur de la variable i à l'interieur de la boucle for. Mais sache que c' est toujours deconseiller. Ce genre de code ne pourra jamais compiler sous freepascal par exemple.

Discussions similaires

  1. Déterminer si une chaîne est un palindrome
    Par OohMyBabyDoll dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 02/01/2016, 13h46
  2. [Dev-Pascal] Déterminer si une phrase est un palindrome
    Par gilldas dans le forum Autres IDE
    Réponses: 2
    Dernier message: 10/06/2012, 10h38
  3. [DBF] Tester si une chaîne est vide
    Par ®om dans le forum JDBC
    Réponses: 7
    Dernier message: 26/07/2007, 16h30
  4. Voir si une chaîne est composée de nombre
    Par Destiny dans le forum C#
    Réponses: 2
    Dernier message: 26/04/2007, 09h56
  5. Réponses: 11
    Dernier message: 05/03/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