0% ont trouvé ce document utile (0 vote)
295 vues10 pages

Fonctions C: Tableaux et Matrices

Transféré par

ismail_chelli
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
295 vues10 pages

Fonctions C: Tableaux et Matrices

Transféré par

ismail_chelli
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

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

[Link]

[Link]

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

Vous aimerez peut-être aussi