Scheme - TD n° 6
2 avril 2003
Récursions numériques (suite)
(define (tous-egaux? n)
(cond ((< n 10) #t)
(else (let ((q (quotient n 10)))
(and (tous-egaux? q)
(= (remainder q 10) (remainder n 10)))))))
Suite de Conway : Calculer la suite définie par u0 quelconque, et un = un-1 / 2 si un-1 pair, = 3 * un-1 + 1 sinon.
(define (conway u0 n)
(cond ((= n 0) u0)
(else (calcul (conway u0 (- n 1))))))
(define (calcul x)
(display x) (display " ")
(if (even? x) (/ x 2) (+ (* 3 x) 1)))
Faire une fonction (leibniz n) qui calcule la somme :
1 - 1 + 1 - 1 + ... + (-1)n 1
3 5  7 2n+1
Remarque : Cette somme converge vers pi sur 4
> (* 4 (leibniz 2000))
3.14209240368353
(define (leibniz n)
(cond ((= n 0) 1)
((even? n) (+ (f n) (leibniz (- n 1))))
(else (+ (- (f n)) (leibniz (- n 1))))))
(define (f n) (/ 1 (+ (* 2 n) 1)))
(define (leibniz n)
(cond ((= n 0) 1)
(else (+ (f n) (leibniz (- n 1))))))
(define (f n)
(if (even? n) (/ 1 (+ (* 2 n) 1)) (- (/ 1 (+ (* 2 n) 1)))))
(define (leibniz n)
(cond ((= n 0) 1)
(else ((if (even? n) + -) (leibniz (- n 1)) (f n)))))
Faire une fonction qui calcule l'expression :
Indication : Faire une fonction (racine-somme p n) qui calcule
(define (racine-somme p n)
(cond ((= p n) (sqrt n))
(else (sqrt (+ p (racine-somme (+ p 1) n))))))
Faire une fonction (compter a n) qui calcule le nombre de façons de faire la monnaie de la somme a avec n sortes de pièces et/ou billets. Par exemple, pour a = 10 euros avec 4 sortes de pièces et/ou billets (1 2, 5 ou 10 euros), il y a 10 solutions :
(define (compter a n)
(cond ((= a 0) 1)
((< a 0) 0)
((= n 0) 0)
(else (+ (compter (- a (piece-max n)) n)
(compter a (- n 1))))))
(define (piece-max n)
(cond ((= n 1) 1)
((= n 2) 2)
((= n 3) 5)
((= n 4) 10)))
Charger le programme ci-après, puis essayer le jeu dans une version avec interface graphique.
Faire une version simple du jeu où l'ordinateur affiche seulement la somme avec display après chaque coup.
Puis faire une version où l'ordinateur indique quel est le joueur qui doit jouer.
> (piquet) somme=0, 10 somme=10, 10 somme=20, 12 erreur : nombre entre 1 et 10 ! somme=20, 10 somme=30, 10 somme=40, 10 somme=50, 10 somme=60, 10 somme=70, 10 somme=80, 10 somme=90, 10 gagne ! > (piquet1) somme=0, joueur 1: 10 somme=10, joueur 2: 10 somme=20, joueur 1: 12 erreur : nombre entre 1 et 10 ! somme=20, joueur 1: 9 somme=29, joueur 2: 10 somme=39, joueur 1: 10 somme=49, joueur 2: 10 somme=59, joueur 1: 10 somme=69, joueur 2: 10 somme=79, joueur 1: 10 somme=89, joueur 2: 10 somme=99, joueur 1: 10 somme=109, joueur 1 a gagne !Faire une version où on joue contre l'ordinateur, qui a une stratégie gagnante :
> (piquet-ordi) somme= 0, humain : 1 somme= 1, ordi : 10 somme= 11, humain : 1 somme= 12, ordi : 2 somme= 14, humain : 3 somme= 17, ordi : 6 somme= 23, humain : 4 somme= 27, ordi : 7 somme= 34, humain : 5 somme= 39, ordi : 6 somme= 45, humain : 10 somme= 55, ordi : 1 somme= 56, humain : 10 somme= 66, ordi : 1 somme= 67, humain : 10 somme= 77, ordi : 1 somme= 78, humain : 10 somme= 88, ordi : 1 somme= 89, humain : 1 somme= 90, ordi : 10 somme= 100, ordi a gagne !