Langage C
  SOL. EX. 5 , 6 et 7 du TD4
 

Exercice 5

1. Ecrire la fonction LONG_CH qui retourne la longueur d'une chaîne de caractères CH comme résultat. 

SOL : à travers cette question on donne une implémentation de la fonction prédéfinie de calcul de la longueur d’une chaine de caractères dont le prototype est : int strlen(char *)

La fonction LONG_CH retourne un entier qui est la longueur de la chaine reçu comme en paramètre.

 

int LONG_CH(char *ch)  // ou int LONG_CH(char ch[])

 { int i=0 ; //indice de parcours de la chaine pour chercher le zéro de fin de chaine

  While(ch[i] !='') i++ ;

  return i ; //i contiendra le nombre de caractère de la chaine sans compter le zéro de fin de chaine

 }

 

2. Ecrire la fonction AJOUTE_CH qui reçoit deux paramètres CH1 et CH2 et copie la chaîne de caractères CH2 à la fin de la chaîne CH1. 

SOL : implémentation de la fonction prédéfinie de concaténation de deux chaines dont le prototype est :

char * strcat (char * , char * )

char * AJOUTE_CH(char *ch1 , char *ch2)  // ou char * AJOUTE_CH(char ch1[] , char ch2[])

{ int i , n1 , n2 ;

    n1 = LONG_CH(ch1) ; // ou n1 = strlen(ch1) ;

    while(ch2[i] !='')

    {  ch1[n1+i] = ch2[i] ; i++ ;}

    Ch1[n1+i]='' ;

    return ch1 ;

}

3. Ecrire la fonction EGAL_N_CH qui retourne la valeur 1 si les N premiers caractères de CH1 et CH2 sont égaux, sinon la valeur 0. 

SOL : implémentation simplifier de la fonction prédéfinie de  comparaison d’au plus n premiers caractères de deux chaines passées en paramètres.

Le prototype est : int strncmp(char * , char * , int)

int  EGAL_N_CH(char  *ch1 , char  *ch2 ,  int  n)

{ int n ;

 for ( i = 0 ; i < n ; i++ )

 {

   if (ch1[i] !=ch2[i]) return 0 ; 

   if(ch1[i]==’’ && ch2[i]==’’) return 1 ;

 }

 return 1 ;

}

Exercice 6

1- Écrire une fonction RenverseChaine qui renverse l’ordre des caractères dans une chaîne.

Exemple d’utilisation : RenverseChaine( Envers, Ch );

où Ch contient la chaîne originale, et Envers est une chaîne qui va recevoir le résultat.

SOL :

void RenverseChaine(char * Envers , char * Ch)

{

  int i , n ;

  n = strlen(ch) ;

  for(i=0 ; i<n ; i++)

   Envers[i] = ch[n-i-1] ;

  Envers[n] =''; //zéro de fin de chaine

}

2- Écrire une fonction int EstPalyndrome( char mot[] ) qui retourne 1 si mot est un palyndrome, 0 sinon. On utilisera RenverseChaine et la fonction prédéfinie strcmp.

SOL :

int EstPalyndrome(char mot[])

{

  char *Envers ;

  Envers = malloc(strlen(mot)+1) ; //On réserve de la mémoire 
  RenverseChaine(Envers,mot) ;

  return ! strcmp(Envers,mot) ;

}

 

 

3- Ecrire un programme C qui fait appel à la fonction EstPalyndrome.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

int main()

{

  char mot[30] ;

  printf("Donner un mot de longueur <30") ;

  gets(mot) ;

  if(EstPalyndrome(mot)) printf("le mot %s est palyndrome",mot) ;

  else printf("le mot %s n’est pas palyndrome",mot) ;

  system("pause") ;

  return 0 ;

}

 

Exercice(CF version 2007)

Une chaine de carctère w est un carré s'il existe une chaine u telle que w = uu (par exemple "chercher" et "bonbon" sont des carrés).

a.    Ecrire une fonction Estcarre qui retourne 1 si la chaine passé en paramètre est un carré, 0 sinon (je rappelle que la fonction strlen retourne le nombre de caractère d’une chaine caractère, sans compter le caractère de fin de chaine)

SOL :

int Estcarre (char *w)

{ int i , n ;

 n = strlen(w) ;

 if(n%2) return 0 ;

 for(i=0 ; i<n/2 ; i++)

  if (w[i] != w[n/2+i]) return 0 ;

 return 1 ;

}

Ou

int Estcarre (char *w)

{ int n ;

 n = strlen(w) ;

 if(n%2) return 0 ;

 return ! strcmp( w , w + n/2 , n/2 ) ;

}

 

b.    Ecrire un programme C qui lit une chaine ch depuis le clavier, fait appel à la fonction Estcarre et affiche si la chaine ch est un carré ou non.

SOL : 

int main()

{ char mot[30] ;

     

        printf(" Donner un mot de longueur < 30 ") ;

        gets(mot) ;

        if(Estcarre(mot)) printf("le mot %s est carrée",mot) ;

        else printf("le mot %s n’est pas carre",mot) ;

        system("pause") ;

        return 0 ;

      }

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 
  Aujourd'hui sont déjà 1 visiteurs (1 hits) Ici!  
 
Ce site web a été créé gratuitement avec Ma-page.fr. Tu veux aussi ton propre site web ?
S'inscrire gratuitement