Vous êtes sur la page 1sur 4

Licence Informatique 1ère année

Algorithmique et Programmation

Examen – 26/06/2019 - 2h00

Les notes de cours, TD et TP sont autorisées.

Exercice 1 (7 points) : l'UICN (Union Internationale pour la Conservation de la Nature) veut un logiciel pour
suivre la disparition des espèces sur la planète. Chaque espèce vivante est décrite par son nom, la zone où
elle vit et son nombre d'individus approximatif. Exemple d'espèce : nom = "Asteriscus smithii", zone = "Iles
du Cap-Vert", individus = 200.

a- Proposez des structures de données pour représenter les espèces vivantes. (1 point)

On suppose dans les questions qui suivent que la structure de données a été initialisée avec les
espèces.

b- Écrivez une fonction qui prend en entrée les espèces et une zone et renvoie le nombre d'espèces
de la zone qui ont moins de 100 individus. (2 points)

c- Écrivez une fonction qui prend en entrée un tableau des espèces et renvoie le nom de la zone qui
possède le plus d'espèces. On suppose que le tableau a au moins une case et qu'il est trié par ordre
croissant selon les nom des zones. (4 points)

Exercice 2 (4 points) :

// a et b sont les dimensions du tableau t


fonction avec retour entier mystere(caractère t[a][b], entier a, entier b)
entier i, j, n;
début
i <- 0;
n <- 0;
tantque (i<a) faire
si (t[i][b-1] = 'z') alors
n <- n+1;
finsi
i <- i + 1;
fintantque
retourne n;
fin

a- Que fait la fonction mystere? (1 point)

b- Donnez le paramètre de complexité de la fonction mystère, indiquez quel est le cas au pire s'il
existe, et calculez la complexité de la fonction (dans le cas au pire s'il existe, dans le cas général sinon). Le
calcul de la complexité doit être justifié, sinon il ne sera pas pris en compte. (3 points)

Exercice 3 (9 points) : tri par comptage

On veut pouvoir trier des tableaux d'entiers par comptage. Le principe du tri par comptage est le
suivant : pour trier un tableau t, pour chaque entier i allant du plus petit au plus grand entier présent dans le
tableau t, on compte son nombre d'occurences n i, puis on remplit le tableau t avec pour chaque i, n i
éléments.
Exemple : soit le tableau t = [5,2,8,2,6,5,2]. On compte les différents entiers : il y a 0 un, 3 deux, 0
quatre, 2 cinq, 1 six, 0 sept, 1 huit et 0 entiers de valeur supérieure à 8. Donc le tableau trié sera
[2,2,2,5,5,6,8]

a- Écrivez une fonction qui, étant donné un tableau d'entiers, tous compris entre 0 et 100, le trie en
utilisant un tri par comptage. (5 points)

d- Donnez le paramètre de complexité de la fonction, indiquez quel est le cas au pire s'il existe, et
calculez la complexité de la fonction (dans le cas au pire s'il existe, dans le cas général sinon). Le calcul de
la complexité doit être justifié, sinon il ne sera pas pris en compte. (4 points)
Exercice 1

enregistrement Espèce
chaine nom, zone;
entier individus;
finenregistrement

Espèce t[] contient les espèces.

fonction avec retour entier nbEspeces (Espèce t[l], entier l, chaine zone)

CO
entier i,n;
début
n <- 0;
pour (i allant de 0 à l-1 pas 1) faire
si (t[i].zone = zone ET t[i].individus<100) alors
n <- n+1;
finsi
finpour

RR
retourne n;
fin

fonction avec retour chaine plusActif(Espèce t[l], entier l)


entier i, n, nMax;
chaine zMax, z;

EC
début
z <- t[0].zone;
n <- 1;
nMax <- -1;
pour (i allant de 1 à l-1 pas 1) faire
si (t[i].zone ≠ z) alors
si (n>nMax) alors

TI
zMax <- z;
nMax <- n;
finsi
z <- t[i].zone;
n <- 1;

O
sinon
n <- n+1;
finsi
finpour

N
si (n>nMax) alors
zMax <- z;
finsi
retourne zMax;
fin

Exercice 2

Si on voit t comme un tableau de chaines de caractères, la fonction mystere compte le nombre de


chaines qui finissent par z. Le paramètre de complexité est a, la première dimension du tableau. Le cas au
pire est celui où le test de la conditionnelle est toujours vrai, donc quand toutes les chaines finissent par 'z'.
Dans ce cas au pire, il y aura a tours de la boucle tantque, et la complexité sera de la forme c*a + b avec c
et d des constantes, on a donc une complexité au pire linéaire.
Exercice 3

fonction sans retour triComptage(entier t[n], entier n)


entier i, j, occ[101];
début
pour (i allant de 0 à 100 pas de 1) faire
occ[i] <- 0;
pour (j allant de 0 à n-1 pas de 1) faire
si (t[j] = i) alors
occ[i] <- occ[i]+1;
finsi

CO
finpour
finpour
j <- 0;
pour (i allant de 0 à 100 pas de 1) faire
tantque (occ[i] > 0) faire
t[j] <- i;
j <- j+1;
occ[i] <- occ[i]-1;

RR
fintantque
finpour
fin

Le paramètre de complexité de la fonction est la taille du tableau d'entrée, qu'on appelle n. Il n'y a pas de
cas au pire car le nombre de passages dans le si et le nombre de tours de la boulce tantque seront
globalement toujours égaux à n. La complexité est de la forme 101*n+101*n donc linéaire en la taille du

EC
tableau.

TI
O
N