©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2016-2017 1
Feuille d’exercices n°2 : «Structures itératives»
1 Pédagogique
Exercice 1 Donner la dernière valeur affichée par chaucun de ces scripts. On pourra «tracer» les scripts.
a = 16
while a > 2:
a = a/2
print(a)
a = 16
while a >= 2:
a = a/2
print(a)
a = 16
while a >0:
a = a/2
print(a)
a = 0
while a <13:
a=a+2
print(a)
a = 0
while a <13:
a = a + 2
print(a)
a=0
while a <13:
print(a)
a = a + 2
Exercice 2 (Variables locales Vs globales) Qu’affichent les deux scripts suivants ? Commenter.
x = 0
def mystere(n):
x=3
for k in range(n):
x = x + 1
print(x)
mystere(10)
print(x)
x = 0
def mystere(n):
global x
for k in range(n):
x=x+1
print(x)
mystere(10)
print(x)
Exercice 3 Écrire un algorithme qui ne se termine pas.
2 Classiques
Exercice 4 (somme des carrés) Écrire une fonction somme_carre qui renvoie la somme des carrés des entiers
de 1 à n.
Exercice 5 (Fonction seuil) La suite un= 4n3+ 5n+ 1 est croissante et tend vers +. On est donc sûr
qu’à partir d’un certain rang n, on a un>100. Écrire un script qui détermine le plus petit entier ntel que
un>100 ? Généraliser
Exercice 6 (Fonction factorielle)
1. Écrire une fonction factorielle qui prend en argument un entier naturel net renvoie n!.
2. Déterminer le plus petit entier ntel que n!>10500. Tester ensuite avec 1050000. Si votre algorithme met
plusieurs secondes, réfléchir à un moyen de diminuer la difficulté des calculs.
Exercice 7 Calculer 43 ×25 uniquement à l’aide d’additions.
Exercice 8 Écrire une procédure diviseurs_communs qui prend en arguments deux entiers aet bstrictement
positifs et qui affiche leurs diviseurs communs.
Exercice 9 (Test de primalité)
1. Écrire une fonction booléenne est_premier qui prend en argument un entier naturel net renvoie True si
nest premier et False sinon.
2. Estimer le nombre de divisions nécessaires dans le pire des cas.
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2016-2017 2
3. Tester avec les nombres de Mersenne 1suivants : n= 2p1 avec p= 18,19,31. Si le temps de calcul pour
p= 31 est trop long, améliorer votre algorithme en diminuant le nombre de divisions nécessaires.
4. Écrire une fonction premier_suivant qui prend en argument un entier naturel net qui renvoie le plus
petit nombre premier p>n.
Exercice 10 (Somme de deux dés)
1. Écrire un programme qui modélise la situation suivante : on lance deux dés jusqu’à ce que la somme des
deux dés soit égale à 12. Le programme affichera la somme obtenue à chaque lancer.
2. Modifier le programme de sorte qu’il affiche aussi à la fin le nombre de lancers nécessaires pour atteindre
12.
3. Effectuer 10000 lancers et compter le nombre de fois où la somme 7 a été obtenue. Comment peut-on en
déduire une estimation de la probalité de faire 7 avec deux dés ?
3 Plus délicat
Exercice 11 (Project Euler, Problem 1) If we list all the natural numbers below 10 that are multiples of
3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Exercice 12 (Une somme double) Calculer les sommes
50
X
i=1
20
X
j=1
(i+j)iet
50
X
i=1
i
X
j=1
(i+j)i.
Combien d’additions sont effectuées ?
Exercice 13 (Valuation dyadique) Écrire une fonction valuation_dyadique qui prend en argument un
entier naturel net renvoie le plus grand entier ktel que 2kdivise n.
Exercice 14 (Équation de Pell-Fermat) Trouver 5 couples d’entiers naturels (x, y) solutions de l’équation
de Pell-Fermat x211y2= 1.
Exercice 15 (Dessiner des rectangles) (tiré du site France IOI)
1. Écrire une procédure qui prend en paramètre un caractère et deux entiers, et qui affiche un rectangle rempli
du caractère fourni, dont le nombre de lignes et de colonnes sont les entiers fournis. Appeler ensuite cette
fonction pour afficher un rectangle de 4 lignes de 10 caractères ’X’, puis un rectangle de 6 lignes de 5
caractères ’O’. On devra alors obtenir
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
2. Même question mais cette fois-ci avec un triangle du type ci-dessous.
1. Les nombres de Mersenne fournissent des exemples de très grands nombres premiers. Attention, ils ne sont pas tous premiers,
si Mp= 2p1 est premier, alors pest premier. La réciproque est fausse. Le test de Lucas est un algorithme extrêmement efficace
pour tester la primalité des nombres de Mersenne.
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2016-2017 3
*
***
*****
*******
On pourra utiliser dans les print comme deuxième argument end=” qui évite les sauts de ligne. Par exemple,
la suite d’instructions
print(’toto’, end =’’)
print(’riri’)
print(’mumu’)
affiche
totoriri
mumu
Exercice 16 (Project Euler, Problem 16) 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
What is the sum of the digits of the number 21000 ?
4 Avec des suites récurrentes
Exercice 17 (Programmation d’une suite récurrente) Soit ula suite définie par u0= 5 et un+1 = 3un2
pour nN.
Le but de l’exercice est de construire une procédure d’argument net renvoyant la valeur un.
1. Méthode 1 : à l’aide d’une seule variable
algorithme :suite
Données :nN
Résultat :un
Variables :uN, k N
u5 ;
Pour kde 1 à nfaire
u3u2 ;
Fin du pour
Renvoyer u;
2. Méthode 2 : à l’aide d’un tableau
algorithme :suitebis
Données :nN
Résultat :un
Variables :uun tableau indexé de 0 à n,kN
u[0] 5 ;
Pour kde 0 à n1 faire
u[k+ 1] 3u[k]2 ;
Fin du pour
Renvoyer u[n] ;
3. Quelle méthode vous paraît la plus coûteuse en occupation mémoire de l’ordinateur ?
Exercice 18 (Suite de Syracuse) On note fla fonction définie sur Npar f(n) = n
2si nest pair et f(n) =
3n+ 1 sinon.
1. Programmer la fonction f.
2. On considère maintenant la suite récurrente ude premier terme u0Net vérifiant un+1 =f(un).
Programmer cette suite et observer que quelque soit le choix de u0, la suite ufinit par prendre la valeur
1. .
3. Écrire un algorithme 2retouralunite qui prend en argument un entier u0et renvoie le plus petit entier
2. On ne sait toujours pas prouver à l’heure actuelle que l’algorithme retouralunite se termine toujours.
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2016-2017 4
ntel que un= 1.
Exercice 19 (Suite de Fibonnacci) On note (Fn) la suite de Fibonacci, de premiers termes F0= 0, F1= 1
puis définie par
nN, Fn+2 =Fn+Fn+1.
Écrire une fonction prenant en entrée un entier naturel net renvoyant Fn, avec les deux méthodes suivantes
selon l’exercice modèle des suites récurrentes :
1. avec un tableau
2. sans tableau
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !