P REMIERS ALGORITHMES
1 Introduction
OBJECTIF :L’objectif de ce tp est de rendre l’élève capable :
• de concevoir un algorithme répondant à un problème précisément posé
• d’utiliser des fonctions pour en créer d’autres
• de décomposer un problème en sous problèmes
Q - 1 : Dans le dossier /INFO/1-ALGO-PROG/ALGO-PROG-1, créer un fichier pnom-ALGO-PROG-1-Tp-1.pypour y répondre aux questions suivantes.
2 De la pile en liste chaînée à la liste Python
2.1 Présentation du jeu
Dans cette partie, on n’a au départ qu’une pilepile construite avec une liste chaînée. Pour cela, on utilise le modulepile_non_bornee(à télécharger) importé avec l’alliasppour obtenir une nouvelle classePile. Les seuls actions possibles sont :
• créer une pilepile = Pile()
• empilerpile.empile(x)pour ajouterxen haut de la pile.
• dépiler x = pile.depile() pour enlever le dernier élément de la pile et affecter sa valeur àx.
• tester si la pile est videpile.est_vide()
• obtenir la valeur du sommetx = pile.sommet()
C’est un peu rudimentaire mais nous allons créer des fonctions permettant d’élaborer les outils (fonctions et méthodes) associées aux listes Python. Dans la partie suivante, nous utiliserons à
nouveau les listesPythoncomme d’ordinaire. 0
1 2 3 4 5 6
P
On a bien sûr le droit d’utiliser les structures algorithmiques avec les tests et boucles conditionnelleswhileet incondition- nellesfor.
Première étape : fabrication de la pilePcontenant les valeurs 0, 1, 2, 3, 4, 5, 6.
Q - 2:Créer la pilepileen utilisant uniquement la méthodeempile.
2.2 Création des outils de base
Q - 3:Écrire une fonctioninverse(pile)qui dépilepilepour renvoyer la pile inverse depile. Que vautpileaprès avoir appliquéinverse(pile)?
LYCÉECARNOT(DIJON) 1/2 INFO ENMPSI & PCSI - TP1 - ALGO-PROG-1
Q - 4:Créer une fonctioncopie(pile):
• qui videpilepour construire la pile inverse depilequ’on noteinv_pile.
• qui reconstruitpileet construitcopie_pileen vidantinv_pile
• qui renvoiecopie_pile
Q - 5:Écrire une fonctionlongueur(pile)qui renvoie le nombre d’éléments depile. Prendre bien soin de travailler sur la copie depile, grâce à la fonction précédemment créée.
On dispose donc ici d’une pile et des fonctions permettant de copier la pile et d’en connaître la longueur.
Q - 6:Écrire une fonctionvaleur(pile, i)qui renvoie la ième valeur depileen partant du bas de la pile.
REMARQUE:si la pile ne contient pas l’indicei, la fonctionvaleur(pile, i)renvoie un message d’erreur.
Q - 7:Écrire une fonctionconcatenation(pile_p, pile_q)qui permet d’ajouter à la pilepile_p, la pilepile_q.
Q - 8:Écrire une fonctionsupprime(pile, i)qui permet de supprimer de la pilepile, l’élémenti.
Q - 9:Écrire une fonctioninsertion(pile, x, i) qui permet d’ajouter un élémentx en positioni dans la pilepile.
Q - 10:Écrire une fonctionsubstitue(pile, x, i)qui permet de remplacer l’élément i de la pilepile parx.
Q - 11:Donner la complexité de toutes les fonctions créées.
Si vous avez d’autres idées et d’autres besoins, sentez vous libres des les programmer.
3 Crible d’Ératosthène
On cherche à déterminer la liste des nombres premiers jusqu’àn. Pour cela, on utilisera le crible d’Ératosthène vu en cours ou ici.
L’idée est demarquerles nombres qui ne sont pas premiers.
Q - 12:Déterminer la liste des nombres premiers jusqu’à 1000 en utilisant, soit vos fonctions précédemment créées, soit une listePythonnormaleL.
LYCÉECARNOT(DIJON) 2/2 INFO ENMPSI & PCSI - TP1 - ALGO-PROG-1