]>
Piment Noir Git Repositories - Algorithmic_C.git/blob - exam1/ExamenAlgo1correction.c
24f014e16f35d50eb27212c0bf1d5d26802c216f
1 /******************************************************************************/
2 /* examen algo I : correction et implantation */
3 /******************************************************************************/
7 appel mystere(6 9 4 8 12 , 2)
9 T[2]=4 <= T[3]=8 donc retourner appel recursif avec k=3
10 appel mystere(6 9 4 8 12 , 3)
12 T[3]=8 <= T[4]=12 donc retourner appel recursif avec k=4
13 appel mystere(6 9 4 8 12 , 4)
14 k=4 et n-1=4 donc retourner VRAI
15 reponse de mystere(6 9 4 8 12 , 2) = Vrai
18 appel mystere(6 9 4 8 12 , 0)
20 T[0]=6 <= T[1]=9 donc retourner appel recursif avec k=1
21 appel mystere(6 9 4 8 12 , 1)
23 T[1]=9 > T[2]=4 donc retourner FAUX
24 reponse de appel mystere(6 9 4 8 12 , 0) = Faux
27 La fonction mystere(t, k) retourne Vrai si la suite d'entiers contenue dans
28 le tableau t a partir de l'indice k est croissante et retourne Faux sinon.
31 Le pire des cas correspond a l'appel mystere(t,k) pour un tableau croissant
32 a partir de l’indice k. Il y a dans ce cas n-k appels recursifs en comptant
35 5) voir, plus bas, la fonction estDans(int *T, int x, int k, int n) implantant l'algorithme.
43 void affichertab(int *T
, int taille
)
46 for (i
= 0; i
< taille
; i
++) {
52 int mystere(int *T
, int k
, int n
, int coltab
)
55 for (i
= 0; i
< coltab
; i
++)
57 printf("appel mystere(");
62 for (i
= 0; i
< coltab
; i
++)
64 printf("k=%d et n-1=%d donc retourner VRAI\n", k
, n
- 1);
68 for (i
= 0; i
< coltab
; i
++)
70 printf("T[%d]=%d T[%d]=%d\n", k
, T
[k
], k
+ 1, T
[k
+ 1]);
72 if (T
[k
] > T
[k
+ 1]) {
73 for (i
= 0; i
< coltab
; i
++)
75 printf("T[%d]=%d > T[%d]=%d donc retourner FAUX\n", k
, T
[k
], k
+ 1,
80 for (i
= 0; i
< coltab
; i
++)
83 ("T[%d]=%d <= T[%d]=%d donc retourner appel recursif avec k=%d\n",
84 k
, T
[k
], k
+ 1, T
[k
+ 1], k
+ 1);
85 return mystere(T
, k
+ 1, n
, coltab
+ 1);
90 int estDans(int *T
, int x
, int k
, int n
)
96 return estDans(T
, x
, k
+ 1, n
);
100 /*****************************************************************/
103 int T
[] = { 6, 9, 4, 8, 12 };
106 int reponse
= mystere(T
, 2, n
, 0);
107 printf("reponse = %d\n", reponse
);
111 reponse
= mystere(T
, 0, n
, 0);
112 printf("reponse = %d\n", reponse
);
115 printf("estDans(T,9,0) = %d\n", estDans(T
, 9, 0, n
));
116 printf("estDans(T,9,2) = %d\n", estDans(T
, 9, 2, n
));
117 printf("estDans(T,12,3) = %d\n", estDans(T
, 12, 3, n
));
118 printf("estDans(T,12,5) = %d\n", estDans(T
, 12, 5, n
));
122 /** trace d'execution *********************************
123 appel mystere(6 9 4 8 12 , 2)
125 T[2]=4 <= T[3]=8 donc retourner appel recursif avec k=3
126 appel mystere(6 9 4 8 12 , 3)
128 T[3]=8 <= T[4]=12 donc retourner appel recursif avec k=4
129 appel mystere(6 9 4 8 12 , 4)
130 k=4 et n-1=4 donc retourner VRAI
133 appel mystere(6 9 4 8 12 , 0)
135 T[0]=6 <= T[1]=9 donc retourner appel recursif avec k=1
136 appel mystere(6 9 4 8 12 , 1)
138 T[1]=9 > T[2]=4 donc retourner FAUX
145 *********************************************************/