PCSI - informatique commune Mardi 14 janvier 2014 : DS 1

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 CLAIRE-
MENT 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 nN, la relation un+3 = 2un+un+1.
1. Écrire une fonction prenant en entrée un entier n>0et 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.
3. Écrire un programme prenant en entrée un entier n>0et renvoyant n
P
k=0
uk. Expliquer son com-
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
k=0
uk.
5. Écrire un programme prenant en entrée un entier n>0et renvoyant n
P
k=0
ukunk. Expliquer son
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
k=0
ukunk.
>>> [u(n) for n in range(10)]
[1, 1, 1, 3, 3, 5, 9, 11, 19, 29]
>>> [somme(n) for n in range(10)]
[1, 2, 3, 6, 9, 14, 23, 34, 53, 82]
>>> [somme_produit(n) for n in range(10)]
[1, 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 à 1si 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,
disons t2 tel que pour tout i[[0,|t1| − 1]],t2[i] = (0 si t1[i]<0
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 : aNet bN. Justifier la terminaison de la boucle lors de l’appel mystere(a, b)
3. On suppose : aNet bN. 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 iet 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
1 / 2 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 !