Vous êtes sur la page 1sur 6

Université Abou Bekr Belkaid – Tlemcen Année Universitaire 2020-2021

Faculté des Sciences L2 Licence Informatique UEI-72


Département d’Informatique Durée : 1H30 – M.BENAZZOUZ
Algorithmique et Structures de Données
EXAMEN FINAL

Exercice 1 :
Nombres Premiers : un nombre entier strictement positif est « premier » s'il n’admet que 2
diviseurs : 1 et lui-même ; c’est-à-dire n'est pas le produit de deux nombres naturels plus petits.
Exemple : 2, 3, 5, 7, 11, 13, 17, 19 …

On souhaite vérifier cette propriété pour un entier N (supérieur ou égal à 2) :


1. Écrire une fonction itérative (2.5 pts).
2. Écrire une fonction récursive (3.5 pts).

Exercice 2 :
1. On dispose d’une liste chainée d’entiers, écrire une fonction permettant de vérifier si cette
liste est triée par ordre croissant sur le champ val (2 pts).
2. Soient L1 et L2 deux listes chainées d’éléments entiers strictement croissantes :

L1 1 3 7 ×

L2 1 2 3 4 5 6 ×
A. Ecrire une fonction pour chercher les éléments qui existent dans les deux listes L1 et L2,
les afficher et retourner le nombre de ces éléments (2.5 pts).
ex : on affiche 1, 3 et on retourne 2
B. Ecrire une fonction qui supprime de la liste L2 les éléments de la liste L1, on retournera la
nouvelle liste L2 et L1 restera inchangée (4.5 pts).

ex : L2 2 4 5 6 ×

Exercice 3 :

1. Étant donné un arbre binaire de recherche B, implémenter un algorithme pour afficher par
ordre décroissant les éléments de B (2 pts).

2. Opérations sur les arbres (4×0.75 pts) :


a. Construire un arbre binaire de recherche à partir de S = [10,15,16,9,14, 20] .
b. Est-il un AVL ? sinon faire le nécessaire pour qu’il le devienne.
c. Ajouter la clé 18 au résultat précèdent.
d. Supprimer la clé 15 du résultat précèdent.
Corrigé Algorithmique

Exercice 1: Nombres Premiers

Iterative
Solution 1 Solution 2
int is_prime1 (int n) int is_prime2 (int n)
{ {
int i = 2, d = 1; int i;
while (i < n && d == 1) for (i = 2; i < n; i++)
{ {
if (n % i == 0) if (n % i)
d = 0; continue;
i++; else
} return 0;
return d; }
} return 1;
}

Recursive
Solution 1 Solution 2
int is_prime3 (int n, int z) int is_prime4 (int num, int i)
{ if (n==0 || n==1) return 0; {
if (n <= 3)
return 1; if (i == 1)
if ((n % z) == 0) {
return 0; return 1;
else }
{ else
if (z * z < n) {
return is_prime3 (n, z + 1); if (num % i == 0)
else return 0;
return 1; else
} is_prime4 (num, i - 1);
} }
}
Exercice 2 : Listes chainées

Vérifier si liste croissante


int verif_croissant(Liste L1) while(q!=NULL)
{ {
if (L1==NULL) return 1; if(q->val>=p->val)
{
if (L1->nxt==NULL) return 1;
p=q;
Liste p = L1,q = L1->nxt; q=q->nxt;
}
else return 0;
}
return 1;
}

2.A

Chercher les éléments qui existent dans les deux


listes L1 et L2, les afficher et retourner le nombre
de ces éléments
int verif(Liste L1,Liste L2)
{ p1=p1->nxt;
p2=p2->nxt;
int cpt=0;
cpt++;
if (L1==NULL) return 0; }
if (L1->val==L2->val) cpt++; else
if(p1->val > p2->val)
{
Liste p1=L1->nxt,p2=L2->nxt; p2=p2->nxt;
}
while((p1!=NULL)&&(p2!=NULL)) else p1=p1->nxt;
{ }
if(p1->val==p2->val)
{ return cpt;
printf(" p2->val = %d\n",p2- }
>val); }
2.B
Supprimer de la liste L2 les éléments de la liste L1
Liste SupMeme(Liste L1,Liste L2)
{
Int sortie=0 :
Liste p1=L1,p2=L2,q,d;
while((p1!=NULL)&&(p2!=NULL)&&(!sortie))
{
if(p1->val==p2->val)
{
q=p2;
p2=p2->nxt;
free(q);
p1=p1->nxt;
}
else { if(p2->val > p1->val) p1=p1->nxt;
else sortie=1;
}
}

q=p2;
p2=p2->nxt;
d=q;
while((p1!=NULL)&&(p2!=NULL))
{
if(p1->val==p2->val) {
q->nxt=p2->nxt;
free(p2);
p2=q->nxt;
p1=p1->nxt;
}
else {
if(p1->val > p2->val)
{
q=p2;
p2=p2->nxt;
}
else p1=p1->nxt;
}
}
return d;
}
Exercice 3 : Arbres Binaires & AVL

AFFICHAGE DECROISSANT
Algo Affichage_Décroissant (arbre : ArbreBinaireChaîné, noeud : ArbreBinaireChaîné)
début
si nœud<> vide alors
Affichage_Décroissant (arbre, noeud ->FD)
écrire (noeud -> val )
Affichage_Décroissant (arbre, noeud ->FG))

fsi
fin

Opération sur les arbres :

Vous aimerez peut-être aussi