Vous êtes sur la page 1sur 8

Série TD4 : Les chaînes et sous algorithmes (Corrigé)

Exercice N°1 :
#include <stdio.h>
Algorithme chaînemot
CONST N = 45 #include <string.h>
TYPE CHN = tableau [1 .. N] de caractères #define N 45
VAR phrase, mot : CHN char phrase[N], mot[N];

Fonction occmot(P:CHN, mot:CHN) : entier short occmot(char P[ ], char mot[ ]){


VAR i,j,occ:entire short i,j=0,occ=0;
test : CHN
DEBUT
for(i=0; i<=strlen(P); i++){
j 1 if (P[i]== ‘ ‘ || P[i]== ‘\0‘ ) {
occ 0 strncpy(test,P+j,i-j);
Pour i de 1 à longueur(P)+1 pas 1 faire test[i-j]=’\0’;
SI (P[i] = ‘ ‘ OU P[i] =’\0’) alors j = i+1;
Copie(test,P+j,(i-j)) if (strcmp(test,mot) == 0)
test[(i-j)+1] ’\0’
j i+1 occ++; } }
SI (Compare(Test,mot) = 0) alors if (occ == 0) return -1;
occ occ + 1 return occ; }
FinSI
FinSI
FinPour int main( ) {
SI (occ = 0) alors occ -1
Renvoyer occ printf(“donner une phrase “);
FIN gets(phrase);
printf(“donner un mot “);
DEBUT
scanf("%s",mot);
Ecrire("donner une phrase") printf(“%hi occurrences\n
Lire(phrase) “,occmot(phrase,mot));
Ecrire("donner une mot")
Ecrire("occurrences : ", occmot(phrase,mot)) return 0 ;}

FIN

Enseignant : Hassen NAKBI (Version 24/12/2022) Page 1 sur 8


Exercice N°2 #include <stdio.h>
Algorithme chaînealphanumerique #include <string.h>
CONST N = 50 #define N 50
TYPE CHN = tableau [1 .. N] de caractères char phrase[N], ch[N], let[N];
VAR phrase, ch, let : CHN
void chiffre(char ch1[ ], char ch2[ ]){
Procédure chiffre(ch1:CHN, ch2:CHN)
VAR i, j :entier short i,j=0;
DEBUT for(i=0; i<strlen(ch1); i++)
j 1 if (ch1[i]>= ‘0‘ && ch1[i]<= ‘9‘ ) {
Pour i de 1 à long(ch1) pas 1 faire ch2[j] = ch1[i];
SI (ch1[i] >= ‘0’ ET ch1[i] <= ‘9’) alors j++;}
chiffre[j] P[i]
ch2[j] =’\0’;
j j+1
FinSI }
FinPour void lettre(char ch1[ ], char ch3[ ]){
ch2[j] ’\0’ short i,j=0;
FIN for(i=0; i<strlen(ch1); i++)
Procédure lettres(ch1:CHN, ch3:CHN)
if (ch1[i]>= ‘A‘ && ch1[i]<= ‘Z‘ || ch1[i]>= ‘a‘
VAR i, j :entier
DEBUT && ch1[i]<= ‘z‘) {
j 1 ch3[j] = ch1[i];
Pour i de 1 à long(ch1) pas 1 faire j++;}
SI (ch1[i] >= ‘A’ ET ch1[i] <= ‘Z’ OU ch1[i] ch3[j] =’\0’;
>= ‘a’ ET ch1[i] <= ‘z’) alors }
ch3[j] ch1[i]
j j+1
FinSI int main( ) {
FinPour
ch3[j] ’\0’ printf(“donner une phrase “);
FIN gets(phrase);
chiffre(phrase,ch) ;
DEBUT puts(ch) ;
lettre(phrase,let) ;
Ecrire("donner une phrase") puts(let) ;
Lire(phrase)
chiffre(phrase,ch) return 0 ;}
Ecrire(ch)
chiffre(phrase,let)
Ecrire(let)

FIN

Enseignant : Hassen NAKBI (Version 24/12/2022) Page 2 sur 8


Exercice N°3 DEBUT
Algorithme tableauchaînes
CONST N = 10 decomposer(phrase,tabch)
CONST M = 25 Pour i de 1 à N pas 1 faire
TYPE CHN = tableau [1 .. M] de caractères minuscule(tabch[i][])
TYPE CHT = tableau [1 .. N] de CHN FinPour
VAR phrase : CHN palindrome(tabch,N)
tabch : CHT
Procédure decomposer(A:CHN, B:CHT) FIN
VAR i, j, k :entier
DEBUT
k 1
j 0
Pour i de 1 à long(A)+1 pas 1 faire
SI (A[i] >= ‘ ’ OU A[i] <= ‘\0’) alors
Copie(B[k][],A+j,i-j)
B[k][i-j+1] ‘\0’
j i+1
k k+1
FinSI
FinPour
FIN

Procédure minuscule(A:CHN)
VAR i :entier
DEBUT
Pour i de 1 à long(A) pas 1 faire
SI (A[i] >= ‘A’ ET A[i] <= ‘Z’) alors
A[i] A[i] + 32
FinSI
FinPour
FIN

Procédure palindrome(B:CHT, L:entier)


VAR i, j, k :entier
DEBUT
Pour i de 1 à L pas 1 faire
j long(B[i][])
k 1
Tant que (B[i][k] = B[i][j] ET i<j) faire
i i+1
j j-1
FinTant que
SI (i = j ) alors Ecrire(B[i][])
FinSI
FinPour
FIN

Enseignant : Hassen NAKBI (Version 24/12/2022) Page 3 sur 8


#include <stdio.h>
#include <string.h>
#define N 10
#define M 25
char phrase[M], tabch[N][M];

void decomposer(char A[ ], char B[ ][M]){


short i,j=0,k=0;
for(i=0; i<=strlen(A); i++){
if (A[i]== ‘ ‘ || A[i]== ‘\0‘ ) {
strncpy(B[k],A+j,i-j);
B[k][i-j]=’\0’;
j = i+1;
k++;} }

void minuscule(char A[ ]){


short i;
for(i=0; i<strlen(A); i++)
if (A[i]>= ‘A‘ && A[i]<= ‘Z‘ )
A[i]= A[i]+32;
}
void palindrome(char B[ ][M], short L){
short i, j, k;
for(i=0; i<L; i++){
j = strlen(B[i])-1;
k = 0;
while(B[i][k] == B[i][j] && k<j){
k++;
j--;}
if (k == j) printf(“\n%s”, B[i]);
}}

int main( ) {
short i ;
printf(“donner une phrase “);
gets(phrase);
decomposer(phrase, tabch);
for(i=0; i<N; i++)
minuscule(tabch[i]);
palindrome(tabch,N);

return 0 ;}
Enseignant : Hassen NAKBI (Version 24/12/2022) Page 4 sur 8
Exercice N°4 :
Fonction password (A:CHN) : booléen
Algorithme chaînemailpassword VAR i :entier
CONST N = 20 x,y,z,v : booléen
TYPE CHN = tableau [1 .. N] de caractères DEBUT
VAR E1, E2 : CHN x faux
y faux
Procédure souschaine(A:CHN, R:CHN,id,ln : z faux
entier) v faux
VAR i, j :entier SI (long(A) >=6 ET long(A)<=9) alors
DEBUT x vrai
j 1 FinSI
Pour i de id à ln pas 1 faire SI (x = vrai) alors
R[j] A[i]
Pour i de 1 à long(A) pas 1 faire
j j+1
SI (A[i] >= ‘A’ ET A[i] <= ‘Z’) alors
FinPour
y vrai
R[j] ’\0’
FinSI
FIN SI (A[i] >= ‘0’ ET A[i] <= ‘9’) alors
Fonction email (A:CHN) : booléen z vrai
VAR i :entier FinSI
x,y,z,v : booléen FinPour
DEBUT FinSI
x faux SI ( x ET y ET z ) alors
y faux v vrai
z faux FinSI
v faux Renvoyer v
i 1 FIN
Tant que (A[i] >= ‘A’ ET A[i] <= ‘Z’ OU A[i] >= ‘a’
ET A[i] <= ‘z’ OU A[i] >= ‘0’ ET A[i] <= ‘9’ OU A[i] DEBUT
= ‘.’ OU A[i] = ‘@’ ET i <=long(A)) faire
SI (A[i] = ‘@’ ET i > 4) alors Ecrire("donner une adresse mail")
x vrai Lire(E1)
FinSI SI (email(E1)) alors
SI (A[i] = ‘.’ ET i > 8) alors Ecrire("email valide")
y vrai SINON
FinSI Ecrire("email n’est pas valide")
i i +1 FinSI
FinTantque
Ecrire("donner un mot de passe")
SI (i > long (A)) alors
z vrai
Lire(E2)
FinSI SI (password(E1)) alors
SI ( x ET y ET z ) alors Ecrire("mot de passe valide")
v vrai SINON
FinSI Ecrire("mot de passe n’est pas valide")
Renvoyer v FinSI
FIN
FIN

Enseignant : Hassen NAKBI (Version 24/12/2022) Page 5 sur 8


#include <stdio.h>
#include <string.h>
#define N 20
char E1[N], E2[N];

void souschaine(char A[ ], char R[ ], short id, short ln){


short i,j=0;
for(i=id; i<=ln; i++){
R[j] = A[i];
j++;}
R[j] = ‘\0’; }

short email(char A[ ]){


short i=0,x=0,y=0,z=0,v=0;
while (((A[i] >= ‘A’ && A[i] <= ‘Z’) || (A[i] >= ‘a’ && A[i] <= ‘z’) || (A[i] >= ‘0’
&& A[i] <= ‘9’) || A[i] == ‘.’ || A[i] == ‘@’) && i <strlen(A)) {
if (A[i] == ‘@’ ET i > 3) x = 1;
if (A[i] == ‘.’ ET i > 7) y = 1;
i++; }
if (i == strlen(A)) z = 1;
if ( x && y && z ) v = 1;
return v ; }

short password(char A[ ]){


short i=0,x=0,y=0,z=0,v=0;
if (strlen(A) >=6 && strlen(A)<=9) x=1;
if (x) {
for(i=0; i<strlen(A); i++){
if (A[i] >= ‘A’ && A[i] <= ‘Z’) y=1;
if (A[i] >= ‘0’ && A[i] <= ‘9’) z=1; } }
if ( x && y && z ) v=1;
return v; }
int main( ) {
printf(“donner une adresse mail “);
gets(E1);
if (email(E1)) printf(“email valide”);
else printf(“email n’est pas valide”);
printf(“donner un mot de passe “);
gets(E2);
if (password(E2)) printf(“mot de passe valide”);
return 0 ;}
Enseignant : Hassen NAKBI (Version 24/12/2022) Page 6 sur 8
Exercice N°5 : Procédure affichage(B:CHT,ln :entier)
Algorithme verberegulier VAR i :entier
CONST N = 6 DEBUT
CONST M = 25 Pour i de 1 à ln pas 1 faire
TYPE CHN = tableau [1 .. M] de caractères Ecrire(B[i][])
TYPE CHT = tableau [1 .. N] de CHN FinPour
VAR verbe, pro : CHN FIN
tabverbe : CHT
DEBUT
Procédure conjugaison(A:CHN, B:CHT)
DEBUT Ecrire("donner un verbe regulier")
Copie(B[1][],”je ”) Lire(verbe)
B[1][] B[1][] + A conjugaison(verbe,tabverbe)
B[1][long(A)] ‘\0’ affichage(tabverbe,N)
Copie(B[2][],”tu ”) Ecrire("donner un pronom")
B[2][] B[2][] + A Lire(pro)
B[2] [long(A)] ‘s’ + ‘\0’ pronom(pro,tabverbe,N)
Copie(B[3][],”il ”)
B[3][] B[3][] + A FIN
B[3] [long(A)] ‘\0’
Copie(B[4][],”nous ”)
B[4][] B[4][] + A
B[4] [long(A)] ‘o’
B[4][] B[4][] + ‘ns\0’
Copie(B[5][],”vous ”)
B[5][] B[5][] + A
B[5] [long(A)] ‘z’
B[5][ long(A)+1] ‘\0’
Copie(B[6][],”ils ”)
B[6][] B[6][] + A
B[6] [long(A)] ‘n’
B[6][ long(A)+1] ‘t’ + ‘\0’
FIN
Procédure pronom(p:CHN, B:CHT, ln:entier)
VAR i :entier
DEBUT
i 0
Répéter
i i+1
Jusqu’à (compare(B[i][],p,long(p)) = 0 OU i = ln)
SI (compare(B[i][],p,long(P)) = 0) alors
Ecrire(B[i][])
SINON
Ecrire("le pronom n’existe pas")
FinSI
FIN

Enseignant : Hassen NAKBI (Version 24/12/2022) Page 7 sur 8


#include <stdio.h>
#include <string.h>
#define N 6
#define M 25
char verbe[M], pro[M], tabverbe[N][M];

void conjugaison(char A[ ], char B[ ][M]){


strcpy(B[0],"je "); int main( ) {
strcat(B[0],A);
B[0][strlen(B[0])-1] = '\0' ; printf("donner un verbe regulier : ") ;
strcpy(B[1],"tu "); gets(verbe) ;
strcat(B[1],A); conjugaison(verbe,tabverbe) ;
B[1][strlen(B[1])-1] = 's'; affichage(tabverbe,N) ;
B[1][strlen(B[1])] = '\0'; printf("donner un pronom : ") ;
strcpy(B[2],"il "); gets(pro) ;
strcat(B[2],A); pronom(pro,tabverbe,N) ;
B[2][strlen(B[2])-1] = '\0';
strcpy(B[3],"nous "); return 0 ;}
strcat(B[3],A);
B[3][strlen(B[3])-1] = 'o';
strcat(B[3],"ns");
strcpy(B[4],"vous ");
strcat(B[4],A);
B[4][strlen(B[4])-1] = 'z';
B[4][strlen(B[4])] = '\0';
strcpy(B[5],"ils ") ;
strcat(B[5],A);
B[5][strlen(B[5])-1] = 'n';
B[5][strlen(B[5])] = 't';
B[5][strlen(B[5])+1]='\0';}

void pronom(char A[ ], char B[ ][M], short ln){


short i=-1;
do { i++;
} while(strncmp(B[i],A,strlen(A)) != 0 && i < ln);
if (strncmp(B[i],A, strlen(A))) == 0) puts(B[i]);
else puts(“le pronom n’existe pas”); }

void affichage(char B[ ][M], short ln){


short i;
for(i=0; i<ln; i++)
puts(B[i]); }
Enseignant : Hassen NAKBI (Version 24/12/2022) Page 8 sur 8

Vous aimerez peut-être aussi