A) Comme une file… B) Incontestablement…

publicité
CORRECTIONS DES EXERCICES DU CONCOURS D’ENTREE EPITA 2010
Pour toutes les fonctions demandées, plutôt que de fournir des solutions en C, Caml ou Pascal,
nous avons préféré fournir une solution algorithmique en pseudo-langage facilement
implémentable dans un de ces langages.
A) Comme une file…
1) Nous utiliserons une pile lorsque des données doivent être mémorisées et traitées en ordre
inverse de leur arrivée (structure lifo).
2) Nous utiliserons une file lorsque des données doivent être mémorisées et traitées dans
l'ordre de leur arrivée (structure fifo).
3) a) La séquence de sortie des véhicules en s2 est : v5,v4,v10
b) Est-ce que les séquences suivantes sont valides ?
(1) Oui : la séquence de sortie des véhicules en s1 est : v1, v5
(2) Non : la quatrième sortie intervient sur une route (file) vide, en effet v1, v2 et v3 sont
déjà sorties.
4) La règle :
Une séquence formée de E1, de E2, de E3, de D1 et de D2 est dite admissible si elle
contient autant de D* que de E* cumulés et si toutes les actions qui lui correspondent
peuvent être accomplies dans l'ordre indiqué par la séquence : on ne peut défiler que s'il reste
au moins un élément dans la file. A la fin de la séquence, la file (route) doit être vide.
B) Incontestablement…
1) Les deux arbres possibles sont ceux de la figure 1.
Suffixe : "INSILICOVERITAS"
Suffixe : "INSLIICOVERITAS"
Figure 1.
2) Le parcours suffixe de l'arbre B donne deux possibilités : INSILICOVERITAS et
INSLIICOVERITAS. Nous préférerons évidemment la première qui peut se traduire (si
l'on place correctement les espaces : IN SILICO VERITAS) par « La vérité est dans la silice
(l'ordinateur) »
12/04/2010
Préparé par Christophe « Krisboul » Boullay
5:26
C) La puissance…
Spécifications :
La fonction puiss(entier a,b) retourne un booléen indiquant si a est une puissance
de b, à condition que a et b soient tous deux strictement positifs. Dans le cas contraire, une
erreur est déclenchée.
Première version : en utilisant les restes des divisions entières. . .
Principe :
Si b ≠ 1 : tant que le reste de la division entière de a par b est nul, on divise a par b. Si a
arrive à 1, alors la valeur initiale était une puissance de b. Si b=1, alors seule la valeur 1 est
une puissance de b.
algorithme fonction puiss : booleen
parametres locaux
entier a, b
variables
entier i
debut
si (a < 1) ou (b < 1) alors
/* erreur */
sinon
si b <> 1 alors
tant que (a > 1) et (a mod b = 0) faire
a <- a div b
fin tant que
fin si
retourne (a = 1)
fin si
fin algorithme fonction puiss
Deuxième version : en calculant les puissances de b, moins bien, car on ne peut pas
s'arrêter avant d'avoir atteint ou dépassé a.
Principe :
On calcule les puissances successives de b jusqu'à atteindre ou dépasser a : pour cela, un
entier p, initialement à 1, est multiplié à chaque itération par b. Si la valeur de a est
dépassée, alors a n'est pas une puissance de b.
algorithme fonction puiss : booleen
parametres locaux
entier a, b
variables
entier p
debut
si (a < 1) ou (b < 1) alors
/* erreur */
sinon
p <- 1
tant que p < a faire
p <- p * b
fin tant que
retourne (p = a)
fin si
fin algorithme fonction puiss
12/04/2010
Préparé par Christophe « Krisboul » Boullay
5:26
D) Est une colline…
Spécifications :
La fonction colline(liste l) retourne un booléen indiquant si la liste l est une
colline.
Principe :
A partir du premier élément, au plus jusqu'au dernier, on parcourt la liste tant qu'elle est
croissante : l'élément courant est inférieur à l'élément suivant. Puis on continue le parcours tant
qu'elle est décroissante. Si ce deuxième parcours nous amène à la fin de la liste (au dernier
élément), ou si la liste était vide, c'est une colline.
algorithme fonction colline : booleen
parametres locaux
t_liste l
variables
entier
i
debut
/* parcours de la suite croissante */
i <- 1
tant que (i<L.longueur) et (L.elts[i] <= L.elts[i+1]) faire
i <- i+1
fin tant que
/* parcours de la suite décroissante */
tant que (i<L.longueur) et (L.elts[i] >= L.elts[i+1]) faire
i <- i+1
fin tant que
retourne ((L.longueur = 0) ou (i = L.longueur))
fin algorithme fonction colline
Pour cet algorithme on utilise le type t_liste (représentation statique) définit ci-dessous :
constantes
LMax = …
types
/* déclaration du type des éléments */
t_element = …
/* déclaration du type vecteur d’éléments */
t_vectLMaxElts = LMax t_element
/* déclaration du type t_liste */
t_liste = enregistrement
t_vectLMaxElts elts
entier
longueur
fin enregistrement t_liste
12/04/2010
Préparé par Christophe « Krisboul » Boullay
5:26
Téléchargement