main() SUJ et déplacer */ { /* I derrière la /* Déclarations */ copie de CH2. */ char SUJ[100]; /* chaîne à for (K=0; CH2[K]; transformer */ K++,I++) char CH1[100]; /* chaîne à SUJ[I]=CH2[K]; rechercher */ /* Recopier FIN dans char CH2[100]; /* chaîne de SUJ */ remplacement */ for (K=0; FIN[K]; char FIN[100]; /* chaîne de K++) sauvegarde pour */ SUJ[I+K]=FIN[K]; /* la fin de /* Terminer la SUJ. */ chaîne SUJ */ int I; /* indice courant SUJ[I+K]='\0'; dans SUJ */ I--; /* réajustement int J; /* indice courant de l'indice I */ dans CH1 et CH2 */ } int K; /* indice d'aide } pour les copies */ /* Affichage du résultat */ printf("Chaîne résultat : /* Saisie des données */ \"%s\"\n", SUJ); printf("Introduisez la chaîne return 0; à rechercher CH1 : "); } gets(CH1); printf("Introduisez la chaîne Exercice 8.22 à remplacer CH2 : "); gets(CH2); #include <stdio.h> printf("Introduisez la chaîne main() à transformer SUJ : "); { gets(SUJ); /* Déclarations */ char SUJ[100]; /* chaîne à /* Recherche de CH1 dans SUJ transformer */ */ char CH1[100]; /* chaîne à for (I=0; SUJ[I]; I++) rechercher */ if (SUJ[I]==CH1[0]) char CH2[100]; /* chaîne de { remplacement */ for (J=1; CH1[J] && char FIN[100]; /* chaîne de (CH1[J]==SUJ[I+J]); J++) sauvegarde pour */ ; /* la fin de if (CH1[J]=='\0') /* SUJ. */ TROUVE ! */ int I; /* indice courant { dans SUJ */ /* Maintenant I int J; /* indice courant indique la position de CH1 */ dans CH1 et CH2 */ /* dans SUJ et J int K; /* indice d'aide indique la longueur de CH1 */ pour les copies */ /* Sauvegarder la int TROUVE; /* indicateur fin de SUJ dans FIN */ logique qui précise */ for (K=0; /* si la chaîne SUJ[K+I+J]; K++) OBJ a été trouvée */ FIN[K]=SUJ[K+I+J]; /* Saisie des données */ FIN[K]='\0'; printf("Introduisez la chaîne printf("Chaîne résultat : à rechercher CH1 : "); \"%s\"\n", SUJ); gets(CH1); return 0; printf("Introduisez la chaîne } à remplacer CH2 : "); gets(CH2); Exercice 8.21 printf("Introduisez la chaîne à transformer SUJ : "); #include <stdio.h> gets(SUJ); main() { /* Recherche de CH1 dans SUJ /* Déclarations */ */ char SUJ[100]; /* chaîne à TROUVE=0; transformer */ for (I=0; SUJ[I] && !TROUVE; char OBJ[100]; /* chaîne à I++) supprimer dans SUJ */ if (SUJ[I]==CH1[0]) int I; /* indice { courant dans SUJ */ for (J=1; CH1[J] && int J; /* indice (CH1[J]==SUJ[I+J]); J++) courant dans OBJ */ ; int TROUVE; /* indicateur if (CH1[J]=='\0') logique qui précise */ TROUVE=1; /* si la chaîne } OBJ a été trouvée */
/* Saisie des données */
/* Si CH1 a été trouvée dans printf("Introduisez la chaîne SUJ alors sauvegarder la fin */ à supprimer : "); /* de SUJ dans FIN, copier gets(OBJ); ensuite CH2 et FIN dans SUJ. printf("Introduisez la chaîne */ à transformer : "); if (TROUVE) gets(SUJ); { /* Recherche de OBJ dans SUJ I--; */ /* Maintenant I indique TROUVE=0; la position de CH1 */ for (I=0; SUJ[I] && !TROUVE; /* dans SUJ et J indique I++) la longueur de CH1 */ /* Si la première lettre /* Sauvegarder la fin de est identique, */ SUJ dans FIN */ if (SUJ[I]==OBJ[0]) for (K=0; SUJ[K+I+J]; K++) { FIN[K]=SUJ[K+I+J]; /* alors comparer le FIN[K]='\0'; reste de la chaîne */ /* Copier CH2 dans SUJ */ for (J=1; OBJ[J] && for (K=0; CH2[K]; K++,I++) (OBJ[J]==SUJ[I+J]); J++) SUJ[I]=CH2[K]; ; /* Recopier FIN dans SUJ if (OBJ[J]=='\0') */ TROUVE=1; for (K=0; FIN[K]; K++,I++) } SUJ[I]=FIN[K]; /* Si la position de départ de /* Terminer la chaîne SUJ OBJ dans SUJ a été trouvée */ */ /* alors déplacer le reste de SUJ[I]='\0'; SUJ à cette position. */ } if (TROUVE) { /* Affichage du résultat */ I--; /* Maintenant I indique /* Positions devant le point la position de OBJ */ décimal */ /* dans SUJ et J indique for ( ; isdigit(CH[I]); I++) la longueur de OBJ */ N = N*10.0 + (CH[I]-'0'); for (; SUJ[I+J]; I++) /* Traitement du point décimal SUJ[I]=SUJ[I+J]; */ SUJ[I]='\0'; if (CH[I]=='.') } I++; /* Affichage du résultat */ else if (CH[I]) printf("Chaîne résultat : OK=0; \"%s\"\n", SUJ); return 0; /* Traitement et comptage des } décimales */ for (DEC=0; isdigit(CH[I]); Exercice 8.19 I++, DEC++) N = N*10.0 + (CH[I]-'0'); #include <stdio.h> if (CH[I]) OK=0; #include <math.h> /* Calcul de la valeur à #include <ctype.h> partir du signe et */ main() /* du nombre de décimales. */ { N = SIG*N/pow(10,DEC); /* Déclarations */ /* Affichage de la chaîne char CH[100]; /* chaîne convertie */ numérique à convertir */ if (OK) double N; /* résultat printf("Valeur numérique : numérique */ %f\n", N); int I; /* indice courant else */ printf("\a\"%s\" n'est pas int SIG; /* signe de la une valeur " valeur rationnelle */ "rationnelle int DEC; /* nombre de correcte.\n", CH); décimales */ return 0; int OK; /* indicateur } logique précisant si la */ /* chaîne a été Exercice 8.17 convertie avec succès */ #include <stdio.h> /* Saisie de la chaîne */ #include <ctype.h> printf("Entrez un nombre main() rationnel : "); { gets(CH); /* Déclarations */ char CH[100]; /* chaîne /* Conversion de la chaîne : numérique à convertir */ */ long N; /* résultat numérique /* Initialisation des */ variables */ int I; /* indice courant */ OK=1; int OK; /* indicateur logique N=0.0; précisant si la */ I=0; /* chaîne a été SIG=1; convertie avec succès */ /* Traitement du signe */ if (CH[I]=='-') SIG=-1; /* Saisie de la chaîne */ if (CH[I]=='-' || CH[I]=='+') printf("Entrez un nombre I++; entier et positif : "); gets(CH); /* Conversion de la chaîne */ Exercice 8.15 OK=1; N=0; #include <stdio.h> for (I=0; OK && CH[I]; I++) main() if (isdigit(CH[I])) { N = N*10 + (CH[I]-'0'); /* Déclarations */ else char CH1[50], CH2[50]; /* OK=0; chaînes à comparer */ int I; /* /* Affichage de la chaîne indice courant */ convertie */ if (OK) /* Saisie des données */ printf("Valeur numérique : printf("Entrez la première %ld\n", N); chaîne à comparer : "); else gets(CH1); printf("\a\"%s\" ne printf("Entrez la deuxième représente pas correctement " chaîne à comparer : "); "un entier et gets(CH2); positif.\n", CH); return 0; /* Chercher la première } position où */ /* CH1 et CH2 se distinguent. Exercice 8.16 */ for (I=0; (CH1[I]==CH2[I]) && #include <stdio.h> CH1[I] && CH2[I]; I++) main() ; { /* Comparer le premier élément /* Déclarations */ qui */ char CH[100]; /* chaîne à /* distingue CH1 et CH2. */ convertir */ if (CH1[I]==CH2[I]) int I; /* indice printf("\"%s\" est égal à courant */ \"%s\"\n", CH1, CH2); else if (CH1[I]<CH2[I]) /* Saisie de la chaîne */ printf("\"%s\" précède printf("Entrez la chaîne à \"%s\"\n", CH1, CH2); convertir : "); else gets(CH); printf("\"%s\" précède /* Conversion de la chaîne */ \"%s\"\n", CH2, CH1); for (I=0; CH[I]; I++) return 0; { } if (CH[I]>='A' && CH[I]<='Z') Exercice 8.14 CH[I] = CH[I]- 'A'+'a'; #include <stdio.h> else if (CH[I]>='a' && #include <string.h> CH[I]<='z') main() CH[I] = CH[I]- { 'a'+'A'; /* Déclarations */ } /* Sujets et terminaisons */ /* Affichage de la chaîne char SUJ[6][5] = convertie */ {"je","tu","il","nous","vous"," printf("Chaîne convertie : ils"}; %s\n", CH); char TERM[6][5] = return 0; {"e","es","e","ons","ez","ent"} } ; char VERB[20]; /* chaîne contenant le verbe */ int L; /* longueur de la chaîne */ int I; /* indice courant */
/* Saisie des données */
printf("Verbe : "); scanf("%s", VERB);
/* Contrôler s'il s'agit d'un
verbe en 'er' */ L=strlen(VERB); if ((VERB[L-2] != 'e') || (VERB[L-1] != 'r')) printf("\"%s\" n'est pas un verbe du premier groupe.\n",VERB); else { /* Couper la terminaison 'er'. */ VERB[L-2]='\0'; /* Conjuguer ... */ for (I=0; I<6; I++) printf("%s %s%s\n",SUJ[I], VERB, TERM[I]); } return 0; }