PCSI - informatique commune Mardi 14 janvier 2014 : DS 1

publicité
PCSI - informatique commune
Mardi 14 janvier 2014 : DS 1
Avertissement : ce sujet est très (trop !) long, mais il n’y a pas de piège particulier, de chose tordue
(sauf l’avant-dernière question !). Vous serez payés pour ce que vous faites ; pas sanctionnés pour ce que
vous ne faites pas.
En première approximation, quelqu’un faisant correctement trois problèmes aura 20, et le premier
problème est suffisant pour approcher la moyenne.
Vous pouvez traiter les exercices dans l’ordre que vous voulez, pourvu que ceux-ci soient CLAIREMENT identifiés.
Vous veillerez à mettre votre nom et votre classe, et vous numéroterez vos copies (pas les pages...).
1
Suite et sommes
On considère dans cette partie la suite définie par ses premiers termes u0 = u1 = u2 = 1 et, pour
tout n ∈ N, la relation un+3 = 2un + un+1 .
1. Écrire une fonction prenant en entrée un entier n > 0 et renvoyant un . Expliquer son comportement
lors de l’appel sur l’entrée n = 9. Attention, il est interdit d’écrire un programme récursif 1 .
2. Dans votre programme précédent, évaluer le nombre d’additions réalisées lors du calcul de un .
n
P
3. Écrire un programme prenant en entrée un entier n > 0 et renvoyant
uk . Expliquer son comk=0
portement pour les entrées n = 2 et n = 6.
4. Dans le programme précédent, évaluer le nombre d’additions réalisées lors du calcul de
n
P
uk .
k=0
5. Écrire un programme prenant en entrée un entier n > 0 et renvoyant
n
P
uk un−k . Expliquer son
k=0
comportement pour l’entrée n = 5.
6. Dans votre programme précédent, évaluer le nombre d’additions réalisées lors du calcul de
n
P
uk un−k .
k=0
>>>
[1,
>>>
[1,
>>>
[1,
[u(n) for n in range(10)]
1, 1, 3, 3, 5, 9, 11, 19, 29]
[somme(n) for n in range(10)]
2, 3, 6, 9, 14, 23, 34, 53, 82]
[somme_produit(n) for n in range(10)]
2, 3, 8, 13, 22, 43, 68, 117, 202]
2
Des tableaux
1. Écrire une fonction prenant en entrée un tableau d’entiers et retournant le produit des éléments
de ce tableau (autant de fois qu’ils sont présents 2 ). Le résultat renvoyé devra être égal à 1 si le
tableau est vide.
2. Écrire une fonction prenant en entrée un tableau d’entiers et retournant le produit des éléments de
ce tableau qui sont supérieurs ou égaux à 10.
3. Écrire un programme prenant en entrée un tableau,
( disons t1 et retournant un autre tableau,
0
si t1 [i] < 0
disons t2 tel que pour tout i ∈ [[0, |t1 | − 1]], t2 [i] =
t1 [i] sinon
On veillera à ce que t1 ne soit pas modifié.
1. i.e. : qui s’appelle.
2. Bref : il n’y a pas de piège ou de difficulté sur ce point ; même remarque pour la question suivante !
1
>>> produit([10, 5, 20, 3, 20])
60000
>>> produit10([10, 5, 20, 3, 20])
4000
3
Mystère
On considère dans cet exercice la fonction suivante :
def mystere(a, b):
x, y = a, 0
while x >= b:
x = x-b
y = y+1
return x,y
1. Donner (en expliquant) le résultat renvoyé à l’exécution de mystere(42, 10)
2. On suppose : a ∈ N et b ∈ N∗ . Justifier la terminaison de la boucle lors de l’appel mystere(a, b)
3. On suppose : a ∈ N et b ∈ N∗ . Quel sera le résultat renvoyé par l’appel mystere(a, b) ? Justifier
au mieux !
4. Quelle est la complexité de ce programme ?
On évaluera le nombre d’opérations élémentaires effectuées en fonction des données.
4
Lecture dans un fichier
On suppose qu’on dispose dans un fichier premiers.txt des 1000 premiers nombres premiers, disposés
par deux sur 500 lignes et séparés par des virgules : les deux premières lignes sont :
2,3
5,7
1. Comment calculer la somme des 1000 premiers nombres premiers grâce à ce fichier ?
Bonus à ceux qui ont une réponse en une ligne :-)
2. Comment calculer le nombre de lignes du fichier telles que les deux nombres premiers ont une
somme divisible par 10 ?
3. Comment déterminer le nombre de couples (i, j) tels que i < j, et en notant (ai , bi ) et (aj , bj ) les
entiers présents aux lignes i et j, on a ai + bi [10] = aj + bj [10] (la notation [10] signifiant «modulo
10»).
4. Si on remplace 1000 par n, quelle est (en fonction de n) la complexité du programme précédent ?
Si ce n’est pas le cas 3 , écrire un programme répondant au problème en temps linéaire en n.
5. Bonus : expliquer comment créer ce fichier de nombres premiers !
3. Et normalement, ce n’est effectivement pas le cas !
2
Téléchargement