Академический Документы
Профессиональный Документы
Культура Документы
PC-1 Algo-Prog
Avant-propos : Il sagit dune feuille dexercices, permettant de mettre en uvre les lments de syntaxe du langage Python. Il sagit de manipuler les types prdnis de Python (boolens, entiers, ottants, chanes de caractres, listes, tuples, dictionnaires, . . . ) et les structures de contrle (boucles, dnition doprations, rcursivit, . . . ). Lnonc est clairement long pour tre termin dans le cadre de la PC. Vous tes invits vous exercer programmer en Python avec les questions qui nauront pas t abordes lors de la sance. Le corrig de cette feuille dexercices sera mis en ligne sur Claroline avant la PC 3 du 1er octobre.
(1)
o P est le prix de la voiture, n le nombre de mois et t le taux du crdit ; ache la mensualit et une indication comme quoi le dossier est favorable ou non (la banque accepte un crdit auto si et seulement si la mensualit ne reprsente pas plus de 15% des revenus du foyer). Indication : utiliser la librairie math avec linstruction import math, et la fonction puissance pow.
Exercice 3 : Loto.
Ecrire une fonction qui gnre un tirage de loto, cest--dire un tirage sans remise de 7 nombres entre 1 et 49. Indication : importer la fonction randint du module random en tapant au dbut de votre programme from random import randint. Pour obtenir un nombre entre [a; b] o a et b sont deux entiers, utilisez la fonction randint(a,b).
2. On dit quune chane de caratres l (sous la forme a1 . . . an ) est prxe dune autre chaine de caractres l (sous la forme b1 . . . bp ) ssi n p et ai = bi pour tout 1 i n. Ecrire une fonction prexe avec comme arguments deux chanes de caractres, et rendant un boolen testant si le premier argument est prxe du second ou pas. 3. On dit quune chane de caractres l (sous la forme a1 . . . an ) est suxe dune autre chane de caractres l (sous la forme b1 . . . bp ssi n p et ai = bpn+i pour tout 1 i n. Ecrire une fonction suxe avec comme arguments deux chanes de caractres, et rendant un boolen testant si le premier argument est suxe du second ou pas. 4. On dit quune chane de caractres l (sous la forme a1 . . . an ) est motif dune autre chane de caractres l (sous la forme b1 . . . bp ssi n p et l scrit b1 . . . bi a1 . . . an bi+n+1 . . . bp . Ecrire une fonction motif avec comme arguments deux chanes de caractres, et rendant un boolen testant si le premier argument est un motif du second ou pas.
Exercice 7 : Exercice mixant les types liste et chane de caractres, dcomposant un problme (la reprsentation compacte des donnes) en sous-problmes. En informatique on trouve souvent des chiers avec beaucoup de caractres rpts, considrons par exemple le chier qui contient la squence aaaaa+++++++bchhhhhhhh. 2
Il est possible de reprsenter ces informations de manire plus compacte sous la forme dune suite de couples dont la premire composante est le caractre reprsent et la deuxime est le nombre de ses occurrences successives. On dit alors que le chier est sous forme compacte. Notre exemple est reprsent par : (a,5) (+,7) (b,1) (c,1) (h,8). En Python, on dcide de reprsenter ces chiers compacts par des listes de couples et dont les couples seront reprsents par des tuples au sens du langage python. Lexemple compact est alors cod en Python de la faon suivante : [("a",5),("+",7),("b",1),("c",1),("h",8)]. 1. Dnir la fonction compte qui prend en argument un chier compact et rend le nombre de caractres contenus dans le chier non compact correspondant. Exemple : applique sur la liste [("a",5),("+",7),("b",1), ("c",1),("h",8)], compte renvoie 22. Donner le type de la fonction compte. 2. crire une fonction expanse_car qui prend en argument un couple (c,n) o c est un caractre et n un entier et qui construit la liste contenant n fois le caractre c. Exemple : appele avec le paramtre ("a", 5), expanse_car retourne la liste ["a","a","a","a","a"]. Donner le type de la fonction expanse_car. 3. En utilisant la fonction prcdente et loprateur + de concatnation de listes, crire une fonction expanse_tout qui prend en argument un chier compact et retourne la liste reprsentant le chier dorigine. Exemple : appele sur la liste [("a",5),("+",7)], expanse_tout retourne la liste ["a","a","a","a","a","+","+","+","+","+","+","+"].
4. On sintresse maintenant lopration inverse compacter cest--dire la fonction qui consiste construire un chier compact partir dun chier non compact reprsent par une liste de caractres. Par exemple, applique sur la liste ["a","a","a","a","a","+","+","+","+","+","+","+","b","c"], la fonction compacter retourne la liste [("a",5),("+",7),("b",1),("c",1)]. Pour cela, on dcompose le problme. crire une fonction compter_serie qui prend comme argument un caractre c et une liste de caractres l et qui compte le nombre de fois o c apparait en tte de l. Si l commence par un autre caractre que c, la fonction compter_serie retournera 0. Exemples : compter_serie "a" ["a","a","a","a","a","+","+","+","+","+","+","+","b","c"] retourne la valeur 5. Lexpression compter_serie "b" ["a","a","a","a","a","+","+","+","+","+","+","+","b", vaut 0. 5. crire la fonction supprimer_n dnie par : supprimer_n n l est la liste l prive de ses n premiers lments. Faire chouer la fonction si l nadmet pas au moins n lments. Quel est le type de la fonction supprimer_n ? 6. En utilisant les deux fonctions prcdentes, crire la fonction compacter.
Exercice 8 : Intgrales.
Le but de cet exercice est de comparer trois mthodes dapproximation dune intgrale. Pour cela, nous allons considrer lintgrale suivante : 1 1 dx 1 + x 0 puisquon sait quelle vaut ln(2) qui est calculable en Python partir du module math. Les mthodes que nous allons comparer sont : 3
f (x)dx
a
ba n
n1
f
i=0
a+i
ba n
f (x)dx
a
ba n
n1
f
i=0
a+
2i + 1 b a 2 n
f (x)dx
a
ba 2n
n1
f
i=0
a+i
ba n
+f
a + (i + 1)
ba n
Ecrire une fonction pour chacune des mthodes dapproximation ci-dessus qui indique le nombre ditrations ncessaires pour atteindre une prcision donne par lutilisateur. Utilisez pour cela un mthode dite de force brute, cest--dire qui essaie toutes les valeurs de n dans lordre croissant jusqu obtenir la bonne prcision.
6. Ecrire une fonction allindex qui prend en argument un lment e et une liste l et renvoie la liste des index des occurrences de llment e dans la liste l. Ainsi, allindex(3,[2,2,1,3,3,5,8]) vaut [4,5]. 7. Ecrire une fonction separate qui prend deux arguments, un lment e et une liste l, et renvoie un couple constitu de la liste des lments de l suprieurs e, et de la liste des lments strictement infrieurs e. Ainsi separate(3,[2,5,1,7,0,3]) vaut ([3, 7, 5], [0, 1, 2]) 8. Ecrire une fonction oftype qui teste si tous les lments dune liste argument sont de mme type. Ainsi oftype([1,2,3],int) vaut True tandis que oftype([1,True,3],int) vaut False. 9. Ecrire une fonction checkunif qui test si les lments dune liste sont tous de mme type. Ainsi checkunif([3,5,6]), checkunif([tto,titi]) valent True tandis que checkunif([3,toto]) vaut False. 10. Ecrire une fonction depth qui calcule le degr dimbrication dune liste. Ainsi depth([1,[2,[[3]]],6]) vaut 4 car la liste argument contient 4 niveaux dimbrication (au niveau de llment 3). 11. Ecrire une fonction flatten qui aplatit une liste (au sens o elle conserve les lments, mais enlve les niveaux dimbrication intermdiaires). Ainsi, flatten([1,[2,[[3]]],6]) vaut [1, 2, 3, 6].