Exercices sur les structures conditionnelles

Download Report

Transcript Exercices sur les structures conditionnelles

1
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2014-2015
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 Écrire un algorithme qui ne se termine pas.
2
Classiques
Exercice 3 (somme des carrés) Écrire une fonction somme_carre qui renvoie la somme des carrés des entiers
de 1 à n.
Exercice 4 (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 n tel que
un > 100 ? Généraliser
Exercice 5 (Fonction factorielle)
1. Écrire une fonction factorielle qui prend en argument un entier naturel n et renvoie n!.
2. Déterminer le plus petit entier n tel 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 6 Calculer 43 × 25 uniquement à l’aide d’additions.
Exercice 7 Écrire un programme qui demande à l’utilisateur de rentrer deux nombres entiers a et b et qui
affiche leurs diviseurs communs.
Exercice 8 (Test de primalité)
1. Écrire une fonction booléenne est_premier qui prend en argument un entier naturel n et renvoie True si
n est premier et False sinon.
2. Estimer le nombre de divisions nécessaires dans le pire des cas.
3. Tester avec les nombres de Mersenne 1 suivants : n = 2p − 1 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.
Exercice 9 (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.
1. Les nombres de Mersenne fournissent des exemples de très grands nombres premiers. Attention, ils ne sont pas tous premiers,
si Mp = 2p − 1 est premier, alors p est premier. La réciproque est fausse. Le test de Lucas est un algorithme extrêmement efficace
pour tester la primalité des nombres de Mersenne.
2
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2014-2015
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 10 (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 11 (Une somme double) Calculer les sommes
i
50 X
X
i=1 j=1
(i + j)i
et
X
ij.
16i6j620
Exercice 12 (Valuation dyadique) Répondre aux deux questions et commenter.
1. Écrire une fonction valuation_dyadique qui prend en argument un entier naturel n et renvoie le plus
grand entier p tel que 2p divise n.
2. Écrire un programme qui demande à l’utilisateur de rentrer un entier naturel, le programme annonce
combien de fois de suite cet entier est divisible par 2.
Exercice 13 (Équation de Pell-Fermat) Trouver 5 couples d’entiers naturels (x, y) solutions de l’équation
de Pell-Fermat x2 − 11y 2 = 1.
Exercice 14 (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.
*
***
*****
*******
On pourra utiliser dans les print comme deuxième argument end=” qui évite les sauts de ligne. Par exemple,
la suite d’instructions
3
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2014-2015
print(’toto’, end =’’)
print(’riri’)
print(’mumu’)
affiche
totoriri
mumu
Exercice 15 (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 16 (Programmation d’une suite récurrente) Soit u la suite définie par u0 = 5 et un+1 = 3un −2
pour n ∈ N.
Le but de l’exercice est de construire une procédure d’argument n et renvoyant la valeur un .
1. Méthode 1 : à l’aide d’une seule variable
algorithme : suite
Données : n ∈ N
Résultat : un
Variables : u ∈ N, k ∈ N
u ← 5;
Pour k de 1 à n faire
u ← 3u − 2 ;
Fin du pour
Renvoyer u ;
2. Méthode 2 : à l’aide d’un tableau
algorithme : suitebis
Données : n ∈ N
Résultat : un
Variables : u un tableau indexé de 0 à n, k ∈ N
u[0] ← 5 ;
Pour k de 0 à n − 1 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 17 (Suite de Syracuse) On note f la fonction définie sur N par f (n) =
3n + 1 sinon.
n
2
si n est pair et f (n) =
1. Programmer la fonction f .
2. On considère maintenant la suite récurrente u de premier terme u0 ∈ N et vérifiant un+1 = f (un ).
Programmer cette suite et observer que quelque soit le choix de u0 , la suite u finit par prendre la valeur
1. .
3. Écrire un algorithme 2 retouralunite qui prend en argument un entier u0 et renvoie le plus petit entier
n tel que un = 1.
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 2014-2015
4
Exercice 18 (Suite de Fibonnacci) On note (Fn ) la suite de Fibonacci, de premiers termes F0 = 0, F1 = 1
puis définie par
∀n ∈ N, Fn+2 = Fn + Fn+1 .
Écrire une fonction prenant en entrée un entier naturel n et renvoyant Fn , avec les deux méthodes suivantes
selon l’exercice modèle des suites récurrentes :
1. avec un tableau
2. sans tableau