Вы находитесь на странице: 1из 5

cole Centrale Paris 2013-2014

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.

Exercice 1 : Exercice sur les nombres.


1. Ecrire une fonction parfait qui dcide si un nombre est parfait, cest--dire sil est gal la somme de ses diviseurs (par exemple, 6 est un nombre parfait). 2. Ecrire une fonction qui tant donn un entier n, calcule la liste des entiers parfaits infrieurs n. 3. Ecrire un programme qui indique quels sont les nombres compris entre 0 et 999 tels quils sont gaux la somme des cubes des chires qui les composent. Par exemple, 153 = 13 + 53 + 33 = 1 + 125 + 27.

Exercice 2 : Modlisation dun crdit automobile.


Dans cet exercice, nous allons raliser un simulateur de crdit automobile. Ecrire un programme qui : demande lutilisateur de saisir les revenus mensuels de son foyer, le prix de la voiture, le taux du crdit (en %), le nombre de mois du crdit ; calcule le montant dune mensualit m partir de la formule suivante : m= P 1 1
t 12 t n + 12

(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).

Exercice 4 : Exercice sur les chanes de caractres.


1. Lordre lexicographique sur les chanes de caractres sexprime de la faon suivante : soient l et l deux chanes de caractres scrivant respectivement a1 . . . an et b1 . . . bp . l >lex l ssi pour r = min{n, p} alors il existe i r tel que ai > bi et pour tout j < i, aj = bj avec < (reps. >) ordre alphabtique (inverser) sur les caractres. Ecrire une fonction ordrelexico implmentant lordre lexicographique. 1

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 5 : Equation du deuxime degr.


On sintresse aux solutions dune quation de la forme ax2 + bx + c = 0. Indiquez les solutions quelque soit les valeurs de a, b et c entres par lutilisateur.

Exercice 6 : Exercice sur les entres/sorties propos de triangle


1. Ecrire une fonction qui tant donns 3 nombres peuvent reprsenter les 3 cts dun triangle. On en crira plusieurs versions : la premire renvoie une simple chane de caractres indiquant le statut du triangle isocle, quilatral, ou scalne. la seconde indiquera de plus les longueurs concernes, par exemple isocle de ct 4. Deux versions sont demandes, en utilisant les mcanismes de substitution des chanes de caractres (%s) et sans les utiliser. la troisime renvoie un boolen indiquant si les 3 nombres peuvent reprsenter ou non les 3 cts dun triangle 2. Ecrire une fonction qui tant donns 3 nombres calcule la surface du triangle de cts, les nombres arguments (sil existe). Rappel : la surface dun triangle de cts a, b et c, vaut s(s a)(s b)(s c) 1 avec s = 2 (a + b + c) (formule de Hron). 3. Ecrire une fonction qui demande lutilisateur 3 valeurs et crit lcran la surface du triangle correspondant, sil existe, et sinon, redemande lutilisateur 3 nouvelles valeurs. 4. Ecrire une fonction qui calcule une ligne du triangle de Pascal (par rcurrence, en calculant la ligne n partir de la ligne n 1). 5. Ecrire une fonction dachage qui imprime lcran le triangle de Pascal (si possible en centrant les lignes les unes au dessus des autres).

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

la mthode des rectangles :


b

f (x)dx
a

ba n

n1

f
i=0

a+i

ba n

la mthode des points milieu :


b

f (x)dx
a

ba n

n1

f
i=0

a+

2i + 1 b a 2 n

la mthode des trapzes :


b

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.

Exercice 9 : Variable alatoire discrte et dictionnaires.


Il est possible de reprsenter une variable alatoire discrte par un dictionnaire python dans lequel les cls sont les direntes valeurs de la variable alatoire et les valeurs sont les probabilits associes chacun de ses valeurs. Ecrire une fonction newVAD qui permet lutilisateur de saisir une variable alatoire discrte ; Ecrire une fonction check qui vrie quun dictionnaire reprsente bien une variable discrte alatoire (i.e. la somme des probabilits doit tre gale 1) ; Ecrire une fonction esp qui retourne lesprance de la variable alatoire discrte passe en paramtre.

Exercice 10 : Exercice sur la rcursivit, les types laide des listes.


1. Ecrire trois versions dune fonction sum calculant la somme des lments dune liste dentier (resp. une version rcursive, une version itrative avec la structure de contrle while, une version itrative avec la structure de contrle for). Ainsi, sum([1,4,1]) = vaut 6. 2. En utilisant la fonction sum, crire une fonction calculant la somme des n premiers nombres (n 0). 3. Ecrire une fonction reverse qui prend comme argument une liste, et renvoie une liste constitue des mmes lments que la liste argument, rangs dans lordre inverse. Ainsi, reverse([4,5,8]) vaut [8,5,4]. 4. Ecrire une fonction palindrome qui teste si une liste reprsente un palindrome, au sens est gale sa liste renverse. En crire deux versions, dune part en utilisant la fonction reverse de la question prcdente, et dautre part en utilisant directement les fonctions daccs aux lments de la liste laide de leur index. 5. Ecrire une fonction sublist qui prend deux listes en arguments, et renvoie True si les lments de la premire liste sont tous lments de la seconde liste. Ainsi sublist([2,3,4],[1,2,4,5,3]) vaut True.

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].

Вам также может понравиться