Informatique commune - Lycée du parc 2ème année DS 1 Exercice 1 Écrire les fonctions factorielle(n) en récursif et en itératif. Quelle est la complexité de ces fonctions ? Donner un inconvénient de la version récursive : en python, pour quelles valeurs de n aura-t-on un problème ? Exercice 2 Quelles sont les fonctions de base (en français) permettant de manipuler une pile ? Citer deux implémentations classiques pour les piles (ne pas détailler). Quelle est la plus contraignante ? Exercice 3 Soit p une pile vide, et considérons la suite d'instructions suivantes eectuées sur la pile p : push(12) push(23) a = pop() push(100) push(-4) pop() push(a) Dessiner la pile p à la n de l'exécution de ces instructions et expliquer pourquoi. Idem avec une le f vide au départ. Exercice 4 Écrire une fonction partage(p) prenant en entrée une pile p et renvoyant une pile contenant les mêmes éléments, mais où tous les éléments strictement positifs sont "au dessus" de tous les éléments négatifs. On ne demande pas de laisser p intacte. Exercice 5 Écrire une fonction permettant de tester si deux piles sont égales (mêmes éléments dans le même ordre). Exercice 6 Écrire une fonction permettant de déterminer si un entier n est premier. De quel type est la valeur renvoyée ? Expliquer les optimisations que vous avez faites. Exercice 7 Écrire une fonction en python permettant de calculer le pgcd de deux entiers positifs a et b. En déduire une fonction permettant de calculer le pgcd d'un ensemble de nombres (donnés dans un tableau). Exercice 8 On considère des listes d'entiers (list en Python) triées dans l'ordre croissant. Écrire une fonction intersection(a, b) qui renvoie l'intersection de deux listes a et b de même taille n (plusieurs réponses possibles). Quelle est la complexité de votre fonction ? Exercice 9 Écrire une fonction permettant de calculer f ibonacci(n) en utilisant la mémoïzation. Quelle est la complexité de la version récursive (on en demande pas le calcul) ? et de la version mémoïzée ? Dessiner l'arbre d'appel pour fibonacci(3) dans les deux cas. Exercice 10 Soit un point M du plan de coordonnées (x, y) dans un repère orthonormé direct (O, I, J). ~ OM ~ )). On pourra utiliser la fonction sqrt Écrire un bloc d'instruction permettant de calculer cos((OI, qui renvoie la racine carrée d'un ottant. Exercice 11 import matplotlib.pyplot as plt : écrire un bloc de code permettant d'acher une courbe représentative de la fonction f : x → x2 + 1 sur [0; 1] (avec la précision que vous voulez). Exercice 12 La fonction random() du module random renvoie une ottant aléatoire dans [0; 1[. En déduire une fonction python alea(n) qui renvoie un entier tiré au hasard dans [|1;n|]. Écrire un bloc de code qui demande un entier k à l'utilisateur et ache un entier tiré au hasard dans [|1; k|]. 1