Palindrome ou pas ?

mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006 - 31 oct. 2006 à 15:04
cs_hsmrpro Messages postés 3 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 1 avril 2007 - 27 mars 2007 à 19:03
Salut, je dois faire une pour tester si un nombre est un palindrome.
pour cela, je ne dois pas utiliser d'autre bibliothèque que iostream.
j'ai pensé a faire l'inversion de la moitié d'un tableau puis tester l'égalité avec la seconde moitié.

pour inverser j'ai fait cela:

bool estPalindrome(int TMot[],int TMot2[],int taille)
{
     int i,a;    
     a=0;
     if (taille%2 == 0)
                       for (i=0 ; i < (taille/2) ; i++)
                       {
                         TMot2[i]=TMot[(taille/2) - i];
                       }
     else
                       for (i=0 ; i < ((taille/2)-1) ; i++)
                       {
                         TMot2[i]=TMot[((taille/2)-1)-i];
                       }
}

est ce que ca marche ??  pour la suite jvois pas comment faire.
aidez moi svp 

12 réponses

mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 15:18
#include
using namespace std;

void saisieMot(int TMot[],int taille)
{
     int i;
     cout<<"Entrer la taille du mot"<<endl;
     cin >> taille;
     for (i = 0; i < taille ; i++)
     {
     cout << " Entrez les lettres " << endl;
     cin >> TMot[i];
     }
}

void afficherMot(int TMot[],int taille)
{
     int i;
     for (i = 0; i < 10 ; i++)
     {
         cout << TMot[i];
     }
     cout << endl;
}

void extraireSousMot(int TMot[],int taille)
{
     int indice,LongueurExtrait,i;
     cout << "A partir de quel indice faut-il couper ?";
     cin >> indice;
     cout << "Combien de lettres doit-on prendre ?";
     cin >> LongueurExtrait;
     for (i = indice; i < indice + LongueurExtrait; i++)
     {
         cout << TMot[i];
     }
     cout << endl;
}

 bool estPalindrome(int TMot[],int TMot2[],int taille)
{
     int i,a;     
     a=0;
     if (taille%2 == 0)
                       for (i=0 ; i < (taille/2) ; i++)
                       {
                         TMot2[i]=TMot[(taille/2) - i];
                       }
     else
                       for (i=0 ; i < ((taille/2)-1) ; i++)
                       {
                         TMot2[i]=TMot[((taille/2)-1)-i];
                       }
}
          

int main()
{
    int taille;
    const int TAILLE = 100;
    int TMot[TAILLE];
    int TMot2[TAILLE];
    saisieMot(TMot,taille);
    afficherMot(TMot,taille);
    extraireSousMot(TMot,taille);
    estPalindrome(TMot,TMot2,taille);
    system ("PAUSE");
    
}
0
mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 15:24
dans la boucle for de la fonction afficherMot, il faut remplacer 10 par taille  
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
31 oct. 2006 à 15:27
bool estPalindrome(int TMot[],int TMot2[],int taille)
la signature me semble bizarre.
Je verrais plutot
bool estPalindrome(char* mot, int taille)

Un seul tableau est utile.
Je prend un pointeur du début qui avance, et un pointeur de la fin qui recule:
bool estPalindrome(char* mot, int taille)
{
  char* debut = mot;
  char* fin = mot + taille - 1;
  while(debut < fin)
  {
    if(*debut++ != *fin--) return false;
  }
  return true;
}

Et voila, ca devrait suffire

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 15:29
le probleme est que je n'ai pas appris les pointeurs, donc je n'ai pas le droit de m'en servir, et mon mot est un nombre dont les chiffres sont dans les cases d'un tableau  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
31 oct. 2006 à 15:41
bool estPalindrome(int mot[], int taille)
{  int debut 0, fin taille - 1;
  while(debut < fin)
  {
    // pareil qu'avant, mais avec des tableaux
  }
  return true;
}

En tous cas la fonction estPalindrome de mickpiet ne peut pas être correcte, vu qu'elle ne retourne rien

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 oct. 2006 à 15:50
Si ta partie est bonne,
ne faut il pas juste compter le premier tableau puis le deuxieme et les comparer ?

Ou alors j'ai pas bien compris ta question...
Esceque c'est les valeurs additionnées le palindrome ou alors que chaque nombre du premier apparaissent dans le deuxieme tab ?

Sinon c'est aussi simple, une boucle imbriquée, pour chaque valeur du tab1, on regarde chaque valeur du tab2, si elle n'y ai pas, break et renvoi faux, si elles y sont toutes renvoi vrai.

TAILLE_MOITIE = taille/2
bool match = false;
bool isPalindrome = true;

boucle1 avec i jusqu'à tailleMoitie
{
   nbr=tab1[i]
   boucle2 avec j jusqu'à tailleMoitie
   {
      si ( nbr==tab2[j] ) alors match=true et break;
   }

   si ( match == false)
      isPalindrome = false; et break
   else
      match = false; // pour prochain
}        

return isPalindrome;
0
mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 17:05
bon, je vais taper mon sujet en entier.

un palindorme est un mot (ou nombre) se lisant dans les deux sens.

un sous mot palindrome d'un mot est un sous-mot qui est un palindrome:
ex: "121" est un sous mot palindrome de "21213121". un sous-mot palindrome est maximal lorsqu'il n'est pas contenu dans un sous-mot palindrome plus grand. "121" n'est pas maximal car il est contenu dans 1213121. L'ensemble des sous-mots palindromes maximaux de 21213121 est 212 et 1213121.
L'objectif de cet exercice est la recherche des sous-mots maximaux d'un mot donné.
Nous considérons dans la suite de mot sur l'alphabet A= {0,1,2,3,4,5,6,7,8,9}. nous nous baserons sur le type TMot

const int TAILLE = 100
Type : TMot = tableau [TAILLE] d'entiers

1-Ecrire une fonction saisieMot qui permet de saisir un mot. L'utilisateur entre la taille du mot puis les diférentes lettres. (faite)
2-Ecrire une fonction afficherMot. (faite)
3-Ecrire une fonction motAleatoire qui permet de générer un mot aléatoire d'une longueur longueur sur l'alphabet {0,...,valeurMax}  (je ne l'ai pas encore faite)
4-Ecrire une fonction extraireSousMot qui permet d'extraire un sous mot extrait de longueur longueurExtrait à partir de l'indice indice du mot source de longueur longueur
ex: si le mot est 1234121, indice = 2, longueurExtrait=3. alors extrait = 341 (faite)
5-Ecrire une fonction estPalindrome qui renvoie vrai si le mot m de longueur longueur est un palindrome, et faux sinon.
6-Afin de stocker l'ensemble des sous palindromes maximaux d'un mot donné, définissez une ou plusieurs structures de données qui permet de stocker l'ensemble des sous-mots palindromes maximaux.
7-écrire une fonction afficherEnsemblePalindromesMaximaux qui permet d'afficher l'ensemble des sous palindromes maximaux
8-Ecrire une fonction recopierMot qui étant donné un mot source de longueurS le recopie dans un mot destination.
9-Ecrire une fonction recherchePalindromeMaximaux qui étant donné un mot m de longueur longueur, permet de récupérer l'ensemble des sous-mots palindromes maximaux de m
0
mickpiet Messages postés 6 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 17:23
pour mon code, j'en suis là

#include
using namespace std;

void saisieMot(int TMot[],int taille)
{
     int i;
     cout<<"Entrer la taille du mot"<<endl;
     cin >> taille;
     for (i = 0; i < taille ; i++)
     {
     cout << " Entrez les lettres " << endl;
     cin >> TMot[i];
     }
}

void afficherMot(int TMot[],int taille)
{
     int i;
     for (i = 0; i < 10 ; i++)
     {
         cout << TMot[i];
     }
     cout << endl;
}

void extraireSousMot(int TMot[],int taille)
{
     int indice,LongueurExtrait,i;
     cout << "A partir de quel indice faut-il couper ?";
     cin >> indice;
     cout << "Combien de lettres doit-on prendre ?";
     cin >> LongueurExtrait;
     for (i = indice; i < indice + LongueurExtrait; i++)
     {
         cout << TMot[i];
     }
     cout << endl;
}

bool estPalindrome(int TMot[],int TMot2[],int taille)
{
     int i,a,tmp;    
     a=0;
     for (i=0 ; i < taille ; i++)
     {
         tmp = TMot2[i];
         TMot2[i]=TMot[taille-i-1];
         TMot[taille-i-1]=tmp;
         if (TMot[i] == TMot2[i])
         a=1;
     }
     if (a==0)
     return false;
     else
     return true;
}
         

int main()
{
    int taille;
    const int TAILLE = 100;
    int TMot[TAILLE];
    int TMot2[TAILLE];
    saisieMot(TMot,taille);
    afficherMot(TMot,taille);
    extraireSousMot(TMot,taille);
    estPalindrome(TMot,TMot2,taille);
    system ("PAUSE");
   
}
0
cs_steph89 Messages postés 1 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 8 novembre 2006
8 nov. 2006 à 19:11
Le devoir est à faire en binôme. Tu triches.
0
cs_hsmrpro Messages postés 3 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 1 avril 2007
26 mars 2007 à 14:14
Bjr à tous
J'suis nouve au sur ce site et novice en programmation. J'essaie d'écrire un code ki teste si une chaine de caractère dont la limite est fixée est un palindrome. Voici ma function

int est_palindrome(chaine ch)
{
    int palindrome=0;
    int debut= 0;
    int fin=L-1;
   
   while(debut<=fin )
    {
        if(ch[debut]==ch[fin])
        {
                              palindrome=1;
                              debut=debut+1;
                              fin=fin-1;
                              }
                             
        else palindrome=0;break;
              
      
     }
        
       
        return palindrome;
           
}

Mais ce qui est bizar c'est que elle retourne à chak vrai même kan le mot n'est pas un palindrome. Et je ne vois pas ce qui peut occasionner ça! MErci pr votre aide
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 mars 2007 à 17:48
Avec ce code, tu ne testes qu'UN seul caractère, le premier.
Puisque le break te fais sortir de la boucle dès le premier passage.

else { palindrome=0; break; }

Pour le reste, afin d'éviter des affectations inutiles, on peut inverser le test, et faire :

while(debut <= fin )
{
   if(ch[debut++] != ch[fin--])
   {
      return FALSE;
   }
}
return TRUE;
0
cs_hsmrpro Messages postés 3 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 1 avril 2007
27 mars 2007 à 19:03
Merci ça marche nickel!
0
Rejoignez-nous