corrigé

publicité
BCPST 851
15 octobre 2012
Scilab – Correction du TD 4
Exercice 1
On considère la suite définie par u0 = 4 et ∀n ∈ N, un+1 = u2n + 1.
1. À l’aide d’une boucle while, écrire un programme prenant en entrée un réel x et renvoyant
la valeur du premier terme de la suite qui soit supérieur ou égal à x.
x = i n p u t (" valeur de x ?");
u=4;
while u < x
u = u^2 + 1;
end
disp (u)
Pour x = 17, on doit obtenir 17 et pour x = 1000 obtenir 84101.
2. Modifier votre programme pour qu’il renvoie également l’indice de ce terme.
Pour x = 1000, on doit obtenir un = 84101 et n = 3.
x = i n p u t (" valeur de x ?");
u=4;
n=0;
while u < x
u = u^2 + 1;
n = n + 1;
end
/ / a f f i c h a g e b a s i q u e de u
disp ("u=")
disp (u)
/ / a f f i c h a g e " e v o l u e " de n
message = "n=" + s t r i n g (n);
disp ( message )
Exercice 2
Écrire un programme prenant en entrée un entier (positif) n et déterminant s’il est premier.
On procédera en testant tous les diviseurs possibles et on essaiera de ne pas faire trop d’opérations inutiles. On rappelle qu’un entier est dit premier s’il a exactement 2 diviseurs. 1 n’est
donc pas premier, et les premiers nombres premiers sont 2, 3, 5, 7, 11. . .
√
√
Si n s’écrit pq, alors on a nécessairement
√ p 6 n ou q 6 n. Cela signifie que si l’on a
testé tous les diviseurs possibles jusqu’à n sans rien trouver, il est inutile de continuer.
n = i n p u t (" Valeur de n ?");
borne = s q r t (n);
p = 2;
/ / p e s t l e d i v i s e u r p o t e n t i e l de n
w h i l e ( modulo (n,p) ~= 0) & (p <= borne )
/ / t a n t que p ne d i v i s e p a s n
/ / e t que p e s t i n f e r i e u r a s q r t ( n )
p = p+1;
/ / on p a s s e au c a n d i d a t s u i v a n t
end
//
//
//
//
S i l ’ on a d e p a s s e l a b o r n e s a n s t r o u v e r de
d i v i s e u r , c ’ e s t que n e s t p r e m i e r ,
s a u f s i n =1.
Sinon , n n ’ e s t p a s p r e m i e r .
i f (p > borne ) & (n > 1) then
disp (’n est premier ’)
else
disp ("n n’’est pas premier ")
end ;
Exercice 3
On considère le programme suivant :
cible = f l o o r (100* rand ()) + 1:
essai = i n p u t (" Votre choix ? ")
w h i l e essai ~= cible
i f essai > cible then
disp ("Trop grand .")
e l s e disp ("Trop petit ")
;
end
essai = i n p u t (" Votre choix ?");
end
disp ("Gagné !")
1. Que fait ce programme ?
C’est un jeu de devinette dont la compréhension ne pose pas trop de problème avec les
commentaires présents dans l’énoncé. . .
2. Modifier ce programme pour que l’ordinateur choisisse le nombre à deviner entre 27 et
117 inclus.
cible = f l o o r (101* rand ()) + 27
/ / 101∗ r a n d ( ) donne un r e e l a l e a t o i r e d a n s ] 0 , 1 0 1 [
/ / f l o o r ( 1 0 1 ∗ r a n d ( ) ) donne un e n t i e r a l é a t o i r e d a n s [ 0 , 1 0 0 ]
/ / p u i s on r a j o u t e 27
/ / Le r e s t e du programme e s t i n c h a n g e
3. Modifier ce programme pour qu’il affiche le nombre d’essais dont le joueur a eu besoin
pour trouver.
cible = f l o o r (100* rand ()) + 1;
essai = i n p u t ("Votre choix ? ");
n = 1;
w h i l e ( essai ~= cible)
i f (essai > cible) then
disp ("Trop grand.")
e l s e disp ("Trop petit")
end
essai = i n p u t ("Votre choix ?");
n = n+1;
end
disp ("Gagné !")
disp ("Vous avez utilise " + s t r i n g (n) + " essais ")
4. Modifier ce programme pour que le joueur n’ait droit qu’à 7 essais (on affichera
«Perdu !» si le joueur ne trouve pas au septième essai).
cible = f l o o r (100* rand ()) + 1;
essai = i n p u t ("Votre choix ? ");
n = 1;
w h i l e ( essai ~= cible) & (n < 7)
i f (essai > cible) then
disp ("Trop grand.")
e l s e disp ("Trop petit")
end
essai = i n p u t ("Votre choix ?");
n = n+1;
end
i f essai == cible then
disp ("Gagné !")
disp ("Vous avez utilise " + s t r i n g (n) + " essais ")
else
disp ("Perdu , la reponse etait")
disp ( cible )
end
5. Le joueur a-t-il une stratégie pour être sûr de trouver en au plus 7 essais ?
Oui, même si c’est un peu pénible à prouver. En procédant par dichotomie (c’est-àdire en essayant de couper l’intervalle en deux parts égales à chaque étape), le joueur
utilisera au plus 7 essais.
Téléchargement