Exercice Corrige Langage C:

Ecrire un Programme C qui lit une chaîne de caractères et vérifie si elle est palindrome ou non. Le palindrome, du grec palindromos, « qui revient sur ses pas », est un mot ou un groupe de mots qui peut être lu indifféremment de gauche à droite ou de droite à gauche, comme par exemple les mots « kayak », « radar », « coloc », « rêver », « ressasser ».

 

Correction :

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int main( ) {

char mots [50];

int i,j, trouve;

printf("Donnez une chaine de caracteres:\n");

scanf("%s",mots);

trouve=1;

for(i=0,j=strlen(mots)-1;i<j;i++,j--)

{

if(mots[i]!=mots[j])

{

trouve=0;

break;

}

}

if(trouve==1) printf("%s est palindrome.\n",mots);

else printf("%s n'est pas palindrome.\n",mots);

return 0;

}

Autre Solution :

#include <stdio.h>
#include <string.h>

int main()
{
   char mot[100];
   int debut, fin, longueur;
 
   printf("Entrez un mot : ");
   gets(mot);
 
   longueur = strlen(mot);
 
   debut = 0;
   fin = longueur - 1;
 
   while (fin > debut)
   {
      if (mot[debut++] != mot[fin--])
      {
         printf("%s n'est pas un palindrome\n", mot);
         return 0;
      }
   }
 
   printf("%s est un palindrome\n", mot);
   return 0;
}

Explication : Le code commence par inclure deux bibliothèques standard : <stdio.h> pour la fonction printf et <string.h> pour la fonction strlen.

Ensuite, la fonction main commence en déclarant une variable mot qui stocke la chaîne de caractères entrée par l'utilisateur. Elle déclare également trois autres variables : debut pour l'indice du début de la chaîne, fin pour l'indice de la fin de la chaîne et longueur pour la longueur de la chaîne.

Le programme demande ensuite à l'utilisateur d'entrer un mot à vérifier en utilisant la fonction printf pour afficher un message, puis la fonction gets pour stocker la chaîne entrée dans la variable mot.

La longueur de la chaîne est ensuite calculée à l'aide de la fonction strlen.

Ensuite, le programme initialise les variables debut et fin pour qu'elles pointent respectivement au début et à la fin de la chaîne.

Le programme utilise ensuite une boucle while pour parcourir la chaîne, en comparant les caractères aux positions debut et fin pour vérifier s'ils sont identiques. Si les caractères ne sont pas identiques, le programme affiche un message indiquant que la chaîne n'est pas un palindrome et retourne 0 pour terminer le programme.

Si la boucle se termine sans trouver de différence entre les caractères, cela signifie que la chaîne est un palindrome, et le programme affiche un message indiquant cela.

Notez que ce code utilise la fonction obsolète gets, qui n'est pas recommandée pour des raisons de sécurité. Pour une utilisation en production, il est préférable d'utiliser une fonction plus sécurisée comme fgets.

Cours sur la fonction gets et strlen :

La fonction gets() est une fonction de la bibliothèque standard du langage C qui permet de lire une chaîne de caractères depuis l'entrée standard (par exemple, le clavier) jusqu'à ce qu'un caractère de fin de ligne soit lu ou que la taille maximale de la chaîne soit atteinte. Elle stocke les caractères lus dans un tableau de caractères.

Voici un exemple d'utilisation de la fonction gets() :

#include <stdio.h>

int main() {
    char chaine[100];

    printf("Entrez une chaîne de caractères : ");
    gets(chaine);

    printf("Vous avez entré : %s\n", chaine);

    return 0;
}

Dans cet exemple, la fonction gets() est utilisée pour lire une chaîne de caractères entrée par l'utilisateur à partir du clavier. La chaîne est stockée dans un tableau de caractères appelé chaine. La fonction printf() est ensuite utilisée pour afficher la chaîne lue à l'utilisateur.

Il est important de noter que la fonction gets() n'est pas sûre car elle ne prend pas en compte la taille du tableau de caractères dans lequel elle stocke les caractères lus. Elle peut donc causer des débordements de tampon (buffer overflow) si la taille de la chaîne entrée est plus grande que la taille du tableau.

Ainsi, il est recommandé d'utiliser la fonction fgets() à la place de gets() car elle permet de spécifier la taille maximale de la chaîne à lire :

fgets(chaine, 100, stdin);


La fonction strlen() est une autre fonction de la bibliothèque standard du langage C qui permet de déterminer la longueur d'une chaîne de caractères en comptant le nombre de caractères qu'elle contient jusqu'au caractère de fin de chaîne ('\0'). Voici un exemple d'utilisation de la fonction strlen() :

#include <stdio.h>
#include <string.h>

int main() {
    char chaine[100] = "Hello World!";
    int longueur;

    longueur = strlen(chaine);

    printf("La longueur de la chaîne est : %d\n", longueur);

    return 0;
}

Dans cet exemple, la fonction strlen() est utilisée pour déterminer la longueur de la chaîne de caractères "Hello World!". La longueur est ensuite stockée dans une variable appelée longueur. La fonction printf() est ensuite utilisée pour afficher la longueur de la chaîne à l'utilisateur.

Il est important de noter que la fonction strlen() ne compte pas le caractère de fin de chaîne ('\0') dans la longueur de la chaîne. Ainsi, la longueur de la chaîne "Hello World!" est de 11 et non de 12.

En conclusion, les fonctions gets() et strlen() sont deux fonctions importantes de la bibliothèque standard du langage C qui permettent de manipuler des chaînes de caractères. Il est recommandé d'utiliser la fonction fgets() à la place de gets() pour des raisons de sécurité. Il est également important de noter que la fonction strlen() ne compte pas le caractère de fin de chaîne dans la longueur de la chaîne.

Si vous avez trouvé cet exercice corrige en Langage C de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • 1 vote. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam