BCPST 851 15 octobre 2012
Scilab – Correction du TD 4
Exercice 1
On considère la suite définie par u0=4 et nN,un+1=u2
n+1.
1. À l’aide d’une boucle while, écrire un programme prenant en entrée un réel xet renvoyant
la valeur du premier terme de la suite qui soit supérieur ou égal à x.
x = input("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 = input("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 as iq ue de u
disp("u=")
disp(u)
/ / a f f i c h a g e " ev o lue " 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) net 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 6n ou q 6n. Cela signifie que si l’on a
testé tous les diviseurs possibles jusqu’à n sans rien trouver, il est inutile de continuer.
n = input("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
while (modulo(n,p) ~= 0) & (p <= borne)
/ / t a n t que p ne d i v i s e pas 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 as s e au c a n d i d a t s u i v a n t
end
/ / Si l on a d ep as se l a bor ne s an 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 pr em ier ,
/ / s a u f s i n =1.
/ / Sinon , n n ’ e s t pas pr e m ie r .
i f (p > borne ) & (n > 1) then
disp( ’n est p remier ’)
else
disp("n nest pas premier")
end;
Exercice 3
On considère le programme suivant :
cible = floor(100* rand()) + 1:
essai = input(" Votre choix ? ") ;
while essai ~= cible
i f essai > cible then
disp("Trop grand.")
e ls e d isp (" Trop petit ")
end
essai = input(" 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 = floor(101* rand()) + 27
/ / 101rand ( ) donne un r e e l a l e a t o i r e dans ]0 , 1 01 [
/ / f l o o r ( 101r an d ( ) ) donne un e n t i e r a l é a t o i r e dans [ 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 ache le nombre d’essais dont le joueur a eu besoin
pour trouver.
cible = floor(100* rand()) + 1;
essai = input(" Votre choix ? ");
n = 1;
while ( essai ~= cible )
i f (essai > cible) then
disp("Trop grand.")
e ls e d isp (" Trop petit ")
end
essai = input(" 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 achera
«Perdu !» si le joueur ne trouve pas au septième essai).
cible = floor(100* rand()) + 1;
essai = input(" Votre choix ? ");
n = 1;
while ( essai ~= cible ) & (n < 7)
i f (essai > cible) then
disp("Trop grand.")
e ls e d isp (" Trop petit ")
end
essai = input(" 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.
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 !