Vous êtes sur la page 1sur 10

Exercice 1

void LIRE_TAB (int *TAB, int *N, int NMAX) { /* Variables locales */ int I; /* Saisie de la dimension du tableau */ do { printf("Dimension du tableau (max.%d) : ", NMAX); scanf("%d", N); /* Attention: crire N et non &N ! */ } while (*N<0 || *N>NMAX); /* Saisie des composantes du tableau */ for (I=0; I<*N; I++) { printf("Elment[%d] : ", I); scanf("%d", TAB+I); } }

Exercice 2
void ECRIRE_TAB (int *TAB, int N) { /* Affichage des composantes du tableau */ while(N) { printf("%d ", *TAB); TAB++; N--; } printf("\n"); }

Exercice 3
long SOMME_TAB(int *TAB, int N) { /* Variables locales */ long SOMME = 0; /* Calcul de la somme */ while(N) { SOMME += *TAB; TAB++; N--; } return SOMME; }

Exercice 4
Dterminer le maximum de N lments d'un tableau TAB d'entiers de trois faons diffrentes: a) la fonction MAX1 retourne la valeur maximale

int MAX1(int *TAB, int N) { int MAX,I; /* variables d'aide */ MAX=*TAB; for (I=1; I<N; I++) if (MAX < *(TAB+I)) MAX = *(TAB+I); return MAX; }
b) la fonction MAX2 retourne l'indice de l'lment maximal

int MAX2(int *TAB, int N) { int I,MAX; /* variables d'aide */ MAX=0; for (I=1; I<N; I++) if (*(TAB+MAX) < *(TAB+I)) MAX = I; return MAX; }
c) la fonction MAX3 retourne l'adresse de l'lment maximal

int *MAX3(int *TAB, int N) { int *MAX, *P; /* pointeurs d'aide */ MAX=TAB; for (P=TAB; P<TAB+N; P++) if (*MAX < *P) MAX=P; return MAX; }
Ecrire un programme pour tester les trois fonctions:

#include <stdio.h> main() { /* Prototypes des fonctions appeles */ int MAX1 (int *TAB, int N); int MAX2 (int *TAB, int N); int *MAX3(int *TAB, int N); void LIRE_TAB (int *TAB, int *N, int NMAX); void ECRIRE_TAB (int *TAB, int N); /* Variables locales */ int T[100]; /* Tableau d'entiers */ int DIM; /* Dimension du tableau */ /* Traitements */ LIRE_TAB (T, &DIM, 100);

printf("Tableau donn : \n"); ECRIRE_TAB (T, DIM); printf("MAX1 : %d \n", MAX1(T,DIM) ); printf("MAX2 : %d \n", T[MAX2(T,DIM)] ); printf("MAX3 : %d \n", *MAX3(T,DIM) ); return 0; } int MAX1(int *TAB, int N) { . . . } int MAX2(int *TAB, int N) { . . . } int *MAX3(int *TAB, int N) { . . . } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }

Exercice 5 Tri par slection


#include <stdio.h> main() { /* Prototypes des fonctions appeles */ void TRI_SELECTION(int *T, int N); void LIRE_TAB (int *TAB, int *N, int NMAX); void ECRIRE_TAB (int *TAB, int N); /* Variables locales */ int T[100]; /* Tableau d'entiers */ int DIM; /* Dimension du tableau */ /* Traitements */ LIRE_TAB (T, &DIM, 100); printf("Tableau donn : \n"); ECRIRE_TAB (T, DIM);

TRI_SELECTION(T, DIM); printf("Tableau tri : \n"); ECRIRE_TAB (T, DIM); return 0; } void TRI_SELECTION(int *T, int N) { /* Prototypes des fonctions appeles */ void PERMUTER(int *A, int *B); int *MAX3(int *TAB, int N); /* Variables locales */ int I; /* rang partir duquel T n'est pas tri */ /* Tri par slection directe du maximum */ for (I=0 ; I<N-1 ; I++) PERMUTER(T+I, MAX3(T+I,N-I) ); } int *MAX3(int *TAB, int N) { . . . } void PERMUTER(int *A, int *B) { . . . } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }

Exercice 6
int LONG_CH(char *CH) { char *P; for (P=CH ; *P; P++) ; return P-CH; }

Exercice 7
void AJOUTE_CH(char *CH1, char *CH2) { while (*CH1) /* chercher la fin de CH1 */ CH1++; while (*CH2) /* copier CH2 la fin de CH1 */ { *CH1 = *CH2; CH1++; CH2++; } *CH1='\0'; /* terminer la chane CH1 */ }
Solution plus compacte :

void AJOUTE_CH(char *CH1, char *CH2) { for ( ; *CH1 ; CH1++) ; for ( ; *CH1 = *CH2 ; CH1++, CH2++) ; }

Exercice 8
void INVERSER_CH (char *CH) { /* Prototypes des fonctions appeles */ int LONG_CH(char *CH); void PERMUTER_CH(char *A, char *B); /* Variables locales */ int I,J; /* Inverser la chane par permutations successives */ J = LONG_CH(CH)-1; for (I=0 ; I<J ; I++,J--) PERMUTER_CH(CH+I, CH+J); } void PERMUTER_CH(char *A, char *B) { char AIDE; AIDE = *A; *A = *B; *B = AIDE; } int LONG_CH(char *CH) { . . . }

Exercice 9

b) Ecrire la fonction LIRE_MATRICE quatre paramtres MAT, L, C, et CMAX qui lit les composantes d'une matrice MAT du type int et de dimensions L et C.

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX) { /* Variables locales */ int I,J; /* Saisie des composantes de la matrice */ for (I=0; I<L; I++) for (J=0; J<C; J++) { printf("Elment[%d][%d] : ", I, J); scanf("%d", MAT + I*CMAX + J); } }

----

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { /* Saisie des dimensions de la matrice */ do { printf("Nombre de lignes de la matrice (max.%d) : ",LMAX); scanf("%d", L); } while (*L<0 || *L>LMAX); do { printf("Nombre de colonnes de la matrice (max.%d) : ",CMAX); scanf("%d", C); } while (*C<0 || *C>CMAX); }

Exercice 10
#include <stdio.h> main() { /* Prototypes des fonctions appeles */ void ADDITION_MATRICE (int *MAT1, int *MAT2, int int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int void LIRE_MATRICE (int *MAT, int L, int C, int void ECRIRE_MATRICE (int *MAT, int L, int C, int /* Variables locales */ /* Les matrices et leurs dimensions */ int M1[30][30], M2[30][30]; int L, C; /* Traitements */ LIRE_DIM (&L,30,&C,30); printf("*** Matrice 1 ***\n"); LIRE_MATRICE ((int*)M1,L,C,30 ); printf("*** Matrice 2 ***\n"); LIRE_MATRICE ((int*)M2,L,C,30 ); printf("Matrice donne 1 : \n"); ECRIRE_MATRICE ((int*)M1,L,C,30); printf("Matrice donne 2 : \n"); ECRIRE_MATRICE ((int*)M2,L,C,30); ADDITION_MATRICE( (int*)M1 , (int*)M2 ,L,C,30); printf("Matrice rsultat : \n"); ECRIRE_MATRICE ((int*)M1,L,C,30); return 0; }

L, int C, CMAX); CMAX); CMAX);

void ADDITION_MATRICE (int *MAT1, int *MAT2, int L, int C, int CMAX) { /* Variables locales */ int I,J; /* Ajouter les lments de MAT2 MAT1 */ for (I=0; I<L; I++) for (J=0; J<C; J++) *(MAT1+I*CMAX+J) += *(MAT2+I*CMAX+J); } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_MATRICE (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)

{ . . . }

Exercice 11
#include <stdio.h> main() { /* Prototypes des fonctions appeles */ int TRANSPO_MATRICE (int *MAT, int *L, int LMAX, int *C, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_MATRICE (int *MAT, int L, int C, int CMAX); void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX); /* Variables locales */ int M[30][30]; /* Matrice d'entiers */ int L, C; /* Dimensions de la matrice */ /* Traitements */ LIRE_DIM (&L,30,&C,30); LIRE_MATRICE ((int*)M,L,C,30 ); printf("Matrice donne : \n"); ECRIRE_MATRICE ((int*)M,L,C,30); if (TRANSPO_MATRICE ((int*)M,&L,30,&C,30)) { printf("Matrice transpose : \n"); ECRIRE_MATRICE ((int*)M,L,C,30); } else printf("\aLa matrice n'a pas pu tre transpose\n"); return 0; } int TRANSPO_MATRICE (int *MAT, int *L, int LMAX, int *C, int CMAX) { /* Prototypes des fonctions appeles */ void PERMUTER(int *A, int *B); /* Variables locales */ int I,J; int DMAX; /* la plus grande des deux dimensions */ /* Transposition de la matrice */ if (*L>CMAX || *C>LMAX) return 0; else { DMAX = (*L>*C) ? *L : *C; for (I=0; I<DMAX; I++) for (J=0; J<I; J++) PERMUTER (MAT+I*CMAX+J, MAT+J*CMAX+I); PERMUTER(L,C); /* changer les dimensions */

return 1; } } void PERMUTER(int *A, int *B) { . . . } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_MATRICE (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX) { . . . }

Hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

site

http://www.ltam.lu/cours-c/prg-c_c.htm

http://www.ltam.lu/cours-c/homesol.htm

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh