Exercice 1
#include <stdio.h> main() { /* Prototypes des fonctions appelées */ void TRI_SHELL(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_SHELL(T, DIM); printf("Tableau trié : \n"); ECRIRE_TAB (T, DIM); return 0; } void TRI_SHELL(int *T, int N) { /* Trie un tableau T d'ordre N par la méthode de Shell */ /* Prototypes des fonctions appelées */ void PERMUTER(int *A, int *B); /* Variables locales */ int SAUT, M, K; int TERMINE; /* Traitements */ SAUT = N; while (SAUT>1) { SAUT /= 2; do { TERMINE=1; for (M=0; M<N-SAUT; M++) /* Attention aux indices! */ { K=M+SAUT; if (*(T+M) > *(T+K)) { PERMUTER(T+M,T+K); TERMINE=0; } } } while(!TERMINE); /* Attention: utiliser la négation de */ } /* la condition employée en lang algorithmique */ } void PERMUTER(int *A, int *B) { int AIDE; AIDE = *A; *A = *B; *B = AIDE; } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }
Exercice 2
Déterminer le maximum de N éléments d’un tableau TAB d’entiers de trois façons différentes:
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’élément 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’élément 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 appelées */ 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) { . . . }