Probleme en Programme C

abdelali -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    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