Vous êtes sur la page 1sur 2

Université de Mascara Module : Algorithmiques Avancées

Faculté des Sciences Exactes 26 Janvier 2020


Département d’Informatique Durée : 1.30h
1ième Master Ingénierie des systèmes Informatiques M.Salem
Épreuve de Moyenne Durée

Exercice 1 (08 points) :


soit la fonction suivante en C
int f(int num)
{
int z = 0;
while(num > 0)
{
z = z*10 + num%10;
num = num/10;
}
return z;
}
• Que fait cette fonction (01point)
• Calculer sa complexité (02points)
• Donner un cas particulier de num avec lequel, la fonction ne donnera pas le résultat voulu. (01points)
• Proposer une solution récursive équivalente à cette fonction (03points)
• Quelle est la meilleure solution en terme de complexité en pire des cas? (01point)

Exercice 2 (06 points) :


Soit la fonction F:
fonction F(T: Tableau[1..n]: entier, w : entier) : booléen
var t :booléen ;
début
i n;
c0;
tfaux;
tant que (i <= n)faire
début
si T[i]=w alors tvrai ;
ii +1;
fin;
renvoyer t;
fin ;
• Que fait cette fonction? (01points)
• Donner sa complexité en pire des cas. (01points)
• Proposer une modification afin de diminuer sa complexité en meilleur des cas? (01points)
• Proposer une solution diviser pour régner afin de résoudre ce problème en divisant le tableau en deux
parties? Quelle condition doit être vérifiée pour pouvoir utiliser cette solution. (02points)
• Dans cette solution, on trouverais probablement l'instruction: int m = (l+r)/2 ou l et r sont des indices du
tableau, quel est le problème causé par une telle instruction, proposer une solution? (01points)
Exercice 3 (06 points) :
• Déterminer avec justification, la complexité de chacun des codes suivants (03points):
o Code 1: o Code 2:

int i, j, k = 0; int a = 0, b = 0;
for (i = n / 2; i <= n; i++) { for (i = 0; i < N; i++) {
for (j = 2; j <= n; j = j * 2) a = a + rand();
{ }
k = k + n / 2; for (j = 0; j < M; j++) {
}} b = b + rand();
}

• Lequel parmi les deux programmes suivants , effectuera le moins d'instructions: Justifier (03points)

o Programme A: o Programme B:

int main(void) int main(void)


{ {
int i=0; printf("Bonjour \n");
while (i<5) printf("Bonjour \n");
{ printf("Bonjour \n");
printf("Bonjour\n"); printf("Bonjour \n");
i++; printf("Bonjour \n");
} return 0;
return 0; }
}

Vous aimerez peut-être aussi