Probleme en Programme C

Fermé
abdelali - 17 févr. 2011 à 16:41
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 17 févr. 2011 à 18:55
Bonjour,

Merci à vous d'avance de bien vouloir m'expliquer le programme suivant surtt les 2 boucles for


char CH[101];
int I,J;
int PALI;
printf("entrer une ligne de texte (max.100 caractères):\n");gets(CH);
for(J=0;CH[J];J++);
j--;
PALI=1;
for(I=0;PALI&&I<J;I++,J--)
if(CH[I]!=CH[J])
PALI=0;
if(PALI)
printf("la chaine \"%s\"est un palindrome.\n",CH);
else
printf("la chaine \"%s\"n'est pas un palindrome.\n",CH);
}

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 17/02/2011 à 19:38
Bonjour,

La première boucle ;
for(J=0;CH[J];J++);
sert uniquement à mettre dans J le nombre de caractères entrés puis on a le
J--;
qui retire 1 au nombre total de caractères
PALI=1;
PALI est initialisé à 1
la seconde boucle :
for(I=0;PALI&&I<J;I++,J--)
if(CH[I]!=CH[J])
PALI=0;

PALI&&I<J veut dire, "Tant que" PALI et I sont inférieurs à J
I++,J-- veut dire, on incrémente I de 1 et on décrémente J de 1

if(CH[I]!=CH[J]) veut dire, "si" le caractère à la position I n'est pas le même que le caractère à la position J
alors PALI=0

la seconde boucle peut être codée ainsi :
  for(I=0;I<J;I++)  
    {  
      if(PALI>=J) break;  
      if(CH[I]!=CH[J]) PALI=0;  
      J--;  
    }  


Edit: pour la première boucle j'explique ce que ça fait mais pas ce que ça fait ahahah. Donc en fait la première boucle :
for(J=0;CH[J];J++);

Veut dire "tant que le caractère n'est pas nul", tant que CH[J] n'est pas le caractère de fin de chaine le fameux \0 qui vaux 0.
ce qui revient à faire
 for(J=0;CH[J]!='\0';J++);
1