Appendix E Solutions des exercices

E.1 La syntaxe par l’exemple

Exercice 2.1

DrGeoFigure nouveau afficherAxes afficherGrille échelle: 1

Les graduations des axes sont de 50 en 50.

Exercice 2.2

error→ ZeroDivide, erreur de division par zéro. Il suffit de fermer les fenêtres.

Exercice 2.3

Un élève de la classe 932 écrira :

DrGeoFigure nouveau texte: 'Vive la 933 !!'

Exercice 2.4

DrGeoFigure nouveau afficherAxes point: 0 @ 0.
DrGeoFigure nouveau afficherAxes point: 1 @ 0.
DrGeoFigure nouveau afficherAxes point: 0 @ -1.
DrGeoFigure nouveau afficherAxes point: -1 @ -1.

Exercice 2.5

L’ordre d’envoi des messages :

  1. 2 + 2 ⇒ 4
  2. nouveau envoyé à DrGeoFigure ⇒ une figure
  3. 2 @ 4 ⇒ un objet coordonnées de point (2;4)
  4. point: 2 @ 4 envoyé à la figure

Exercice 2.6

L’ordre d’envoi des messages et les objets sont modifiés. En l’absence des parenthèses, les messages binaire @ et + sont exécutés de la gauche vers la droite :

  1. nouveau envoyé à DrGeoFigure ⇒ une figure
  2. 2 @ 2 ⇒ un objet coordonnées de point (2;2)
  3. 2 @ 2 + 2 ⇒ un objet de coordonnées de point (4;4)
  4. point: 4 @ 4 envoyé à la figure

Exercice 2.7

DrGeoFigure nouveau segmentDe: 2 @ 1 à: 0 @ 0

Exercice 2.8

DrGeoFigure nouveau demiDroiteOrigine: -2 @ -1 passantPar: 0 @ 0

Exercice 2.9

DrGeoFigure nouveau cercleCentre: 0 @ 0 rayon: 3

Exercice 2.10

Si le message afficherAxes était précédé de “;” cela signifierait que le destinataire du message serait DrGeoFigure. Or celui-ci ne comprend pas ce message. Par ailleurs c’est à la nouvelle figure créée que nous demandons d’afficher ses axes, à savoir retourné par DrGeoFigure nouveau, donc pas de “;” pour envoyer le message à la nouvelle figure.

Exercice 2.11

DrGeoFigure nouveau
   afficherAxes;
   afficherGrille;
   segmentDe: -2 @ 2 à: 2 @ 2;
   segmentDe: 2 @ 2 à: 2 @ -2;
   segmentDe: 2 @ -2 à: -2 @ -2;
   segmentDe: -2 @ -2 à: -2 @ 2

Exercice 2.12

DrGeoFigure nouveau
   afficherAxes;
   afficherGrille;
   segmentDe: -2 @ 2 à: 2 @ 2;
   segmentDe: 2 @ 2 à: 2 @ -2;
   segmentDe: 2 @ -2 à: -2 @ -2;
   segmentDe: -2 @ -2 à: -2 @ 2;
   cercleCentre: 0 @ 0 rayon: 2 

Exercice 2.13

| maFigure |
maFigure := DrGeoFigure nouveau.
maFigure afficherGrille.
maFigure segmentDe: 0 @ 0 à: 4 @ 0.
maFigure segmentDe: 4 @ 0 à: 1 @ 3.
maFigure segmentDe: 1 @ 3 à: 0 @ 0.

Exercice 2.14

| maFigure segment1 segment2 milieu1 milieu2|
maFigure := DrGeoFigure nouveau.
maFigure afficherGrille.
segment1 := maFigure segmentDe: 0 @ 0 à: 4 @ 4.
milieu1 := maFigure milieuDe: segment1.
segment2 := maFigure segmentDe: 1 @ 2 à: 5 @ 6.
milieu2 := maFigure milieuDe: segment2.
maFigure segmentDe: milieu1 à: milieu2

Exercice 2.15

| maFigure segment1 segment2 |
maFigure := DrGeoFigure nouveau.
maFigure afficherGrille.
segment1 := maFigure segmentDe: 0  0 à: 4  4.
segment1 couleur: Color pink;
   tiret;
   nommer: 'S1'.
segment2 := maFigure segmentDe: 2  3 à: 4  0.
segment2 couleur: Color orange;
   tiret;
   nommer: 'S2'.
(maFigure intersectionDe: segment1 et: segment2)
   nommer: 'I';
   large;
   croix.

Exercice 2.16

DrGeoFigure nouveau polygone: {0 @ 0 . 4 @ 0 . 5 @ 3 . 1 @ 3}

Exercice 2.17

  1. 11 auHasard donne une valeur entière au hasard entre 1 et 11 compris.
  2. 11 auHasard - 6 donne donc une valeur entière comprise entre 1-6 et 11-6, à savoir entre -5 et 5.
  3. Donc les valeurs possibles pour l’abscisse et l’ordonnée sont {-5 ; -4 ; -3 ; -2 ; -1 ; 0 ; 1 ; 2 ; 3 ; 4 ; 5}

Exercice 2.18

DrGeoFigure nouveau afficherAxes;
   point: [(11 auHasard - 6) @ (11 auHasard - 6)]

Exercice 2.19

DrGeoFigure nouveau afficherAxes;
   afficherGrille;
   echelle: 100;
   point: [(-8 auHasard / 2) @ (-8 auHasard / 2)]

Avec cette échelle de 100, la graduation des axes est à 0,5 près. Vous remarquez alors que le point farceur est toujours sur la grille.

Exercice 2.20

Il est nécessaire que l’abscisse – receveur à gauche du message @ – et l’ordonnée – paramètre à droite du message @ – soient calculées avant de constuire l’objet coordonnées, résultat de l’envoi du message @.

Exercice 2.21

Le receveur du message @ est le résultat de (5 auHasard / 10) à sa gauche. Ce code comporte le message unaire auHasard qui est prioritaire sur le message @ et le message binaire / qui est évalué avant le message @ – ordre d’envoi des messages de la gauche vers la droite pour les messages de priorités identiques.

Les parenthèses ne sont donc pas nécessaires pour le receveur du message @.

Toutefois, les mettre facilite la compréhension du code par le lecteur humain.

Exercice 2.23

| figure |
figure := DrGeoFigure nouveau.
figure afficherAxes;
   afficherGrille.
figure point: [
   | coordonnée |
   coordonnée := 50 auHasard / 10.
   coordonnée @ (2 * coordonnée)].
figure droitePassantPar: 0@0 et: 1@2

Exercice 2.24

Le point farceur n’est plus sur une ligne droite. Il suit une ligne courbe qui s’appelle une parabole.

Exercice 2.25

Il faut introduire une variable farceur pour nommer ensuite le point.

| figure farceur |
figure := DrGeoFigure nouveau.
figure
   afficherAxes;
   afficherGrille.
farceur := figure point: [(50 auHasard / 10) @ (50 auHasard / 10)].
farceur nommer: 'Je suis un farceur'

Exercice 2.26

| figure |
figure := DrGeoFigure nouveau afficherAxes.
figure point: 1 @ 0.
figure point: 2 @ 0.
figure point: 3 @ 0.
figure point: 4 @ 0.
figure point: 5 @ 0.
figure point: 6 @ 0.
figure point: 7 @ 0.
figure point: 8 @ 0.
figure point: 9 @ 0.
figure point: 10 @ 0

Exercice 2.27

| figure |
figure := DrGeoFigure nouveau afficherAxes.
-10 à: -1 faire: [:abscisse |
   figure point: abscisse @ 0]

Exercice 2.28

| figure |
figure := DrGeoFigure nouveau afficherAxes.
1 à: 10 faire: [:ordonnée |
   figure point: 0 @ ordonnée]

Exercice 2.29

Le nom du paramètre du bloc est modifié pour plus de cohérence, car il représente à la fois une abscisse et une ordonnée.

| figure |
figure := DrGeoFigure nouveau afficherAxes.
1 à: 10 faire: [:coordonnée |
   figure point: coordonnée @ coordonnée]

Exercice 2.30

| figure |
figure := DrGeoFigure nouveau afficherAxes.
-5 à: 5 par: 0.2 faire: [:abscisse |
   figure point: abscisse @ 0]

Exercice 2.31

| figure |
figure := DrGeoFigure nouveau afficherAxes.
{-1 . 5.2 . -3.14 . 2.6} faire: [:ordonnée |
   figure point: 0 @ ordonnée]

Exercice 2.32

| figure |
figure := DrGeoFigure nouveau afficherAxes.
{-2 . 4 . 1/3 . 3.14 . -1/5} faire: [:abscisse |
   | point |
   point := figure point: abscisse @ 0.
   point nommer: abscisse]

Exercice 2.33

Observez les parenthèses autour de l’ordonnée du dernier point.

| figure |
figure := DrGeoFigure nouveau afficherAxes.
{1 @ 1 . -1 @ 1 . 3 @ -1 . 2/3 @ (-1/2)} faire: [:coordonnées |
   figure point: coordonnées]

Exercice 2.34

Pour le nombre 1, dans le code ci-dessous, placer le curseur clavier sur la ligne souhaitée et faire Ctrl-P au clavier pour afficher la condition retournée :

1 impair.
1 pair.
1 estPremier.
1 estEntier.
1 estDécimal.
1 positif.
1 strictementPositif.

Exercice 2.35

| figure |
figure := DrGeoFigure nouveau afficherAxes.
figure echelle: 5.
1 à: 100 faire: [:abscisse |
   abscisse estPremier siVrai: [
      | point |
      point := figure point: abscisse @ 0.
      point nommer: abscisse]
]

E.2 Nombres et opérations

Exercice 3.1

(-80 à: 50) commeCollectionOrdonnée

Exercice 3.2

5.2 + 0.9  - 6.1
⇒ 8.881784197001252e-16

5.2 + 0.7 + 0.11
⇒ 6.010000000000001

1.2 * 3  - 3.6
⇒ -4.440892098500626e-16

Exercice 3.3

Le système retourne une erreur ZeroDivide, division par zéro.

Exercice 3.4

(52/10) + (9/10)  - (61/10)
⇒ 0

(52/10) + (7/10)  + (11/100)
⇒ 601/100 soit 6.01

(12/10) * 3  - (36/10)
⇒ 0

Exercice 3.5

15.0/7
⇒ 2.142857142857143

(15/7) commeDécimal
⇒ 2.142857142857143

535/17.0
⇒ 31.470588235294116

(535/17) commeDécimal
⇒ 31.470588235294116

Exercice 3.6

1.2 commeFractionApprochee
⇒ (6/5)

17.3 commeFractionApprochee
⇒ (173/10)

0.00175 commeFractionApprochee
⇒ (7/4000)

9542.25 commeFractionApprochee
⇒ (38169/4)

Exercice 3.7

10 / 5 + 2
2 + (10 / 5)
10 + (7 * 2) + 4
(6 + 4) * 2
4 * 5 + (7 * 2)

Exercice 3.8

(2/9) + (3/9)
(5/7) - (2/7)
(2/3) * (4/5)

Exercice 3.9

1/(7/4) ⇒ (4/7)
1/(98/99) ⇒ (99/98)

Exercice 3.10

65 // 7 ⇒ 9
65 \\ 7 ⇒ 2
732 // 13 ⇒ 56
732 \\ 13 ⇒ 4
5241 // 29 ⇒ 180
5241 \\ 29 ⇒ 21

Exercice 3.11

Le programme retourne comme réponse C’est un multiple.

85200 \\ 24 = 0
   siVrai: ['C''est un multiple !']
   siFaux: ['Ce n''est pas un multiple.']

Exercice 3.12

Le programme retourne comme réponse 24 est un diviseur de 85200 !.

85200 \\ 24 = 0
   siVrai: ['24 est un diviseur de 85200 !']
   siFaux: ['24 n''est pas un diviseir de 85200.']

Exercice 3.13

| a b reponse |
a := (self request: 'Un premier nombre' initialAnswer: '1') commeNombre.
b := (self request: 'Un deuxième nombre' initialAnswer: '2') commeNombre.
a \\ b = 0
   siVrai: [reponse := b asString, ' est un diviseur de ', a asString]
   siFaux: [reponse := b asString, ' n''est pas un diviseur de ', a asString].
self inform: reponse

Exercice 3.14

(1 à: 155) choisir: [ :n |  155 \\ n = 0]

Exercice 3.15

Observer l’utilisation des parenthèses () autour des deux appels du bloc de code diviseurs avec 100 et 155 comme arguments. C’est pour des raisons de priorités.

| diviseurs |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
(diviseurs valeur: 100) & (diviseurs valeur: 155)

Exercice 3.16

| a b commun diviseurs |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
""
a := (self request: 'Un premier nombre naturel' initialAnswer: '1') commeNombre.
b := (self request: 'Un deuxième nombre naturel' initialAnswer: '2') commeNombre.
commun := (diviseurs valeur: a) & (diviseurs valeur: b).
self inform: 'Les diviseurs communs de ',
   a asString, ' et ', b asString,
   ' sont : ', commun asString

Exercice 3.17

| diviseurs pgdc |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
pgdc := [:a :b | ((diviseurs valeur: a) & (diviseurs valeur: b)) max].
""
pgdc valeur: 100 valeur: 155

Exercice 3.18

| a b diviseurs pgdc |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
pgdc := [:x :y | ((diviseurs valeur: x) & (diviseurs valeur: y)) max].
""
a := (self request: 'Un premier nombre naturel' initialAnswer: '1') commeNombre.
b := (self request: 'Un deuxième nombre naturel' initialAnswer: '2') commeNombre.
self inform: 'Le PGDC de ',
   a asString, ' et ', b asString,
   ' est : ', (pgdc valeur: a valeur: b) asString

Exercice 3.19

| diviseurs premier |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
premier := [: n | (diviseurs valeur: n) taille = 2].
""
premier valeur: 155

Exercice 3.20

| diviseurs premier |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
premier := [: n | (diviseurs valeur: n) taille = 2].
""
(1 à: 1000) choisir: [:n | premier valeur: n]

Exercice 3.21

| a b diviseurs pgdc reponse |
diviseurs := [:nombre |
   (1 à: nombre) choisir: [ :n |  nombre \\ n = 0]].
pgdc := [:x :y | ((diviseurs valeur: x) & (diviseurs valeur: y)) max].
""
a := (self request: 'Un premier nombre naturel' initialAnswer: '1') commeNombre.
b := (self request: 'Un deuxième nombre naturel' initialAnswer: '2') commeNombre.
(pgdc valeur: a valeur: b) = 1
   siVrai:[reponse := a asString, ' et ', b asString, ' sont premiers entre eux.']
   siFaux: [reponse := a asString, ' et ', b asString, ' ne sont pas premiers entre eux.'].
self inform: reponse

E.3 Espace

Exercice 4.1

| figure d1|
figure := DrGeoFigure nouveau.
d1 := figure droitePassantPar: 0 @ 5 et: 2 @ 0.
d1 nommer: 'd1'.
(figure point: 0 @ 5) montrer.
3 à: 12 par: 0.5 faire: [:abscisse |
   figure parallèleA: d1 passantPar: abscisse @ 0]

Exercice 4.2

| figure d1|
figure := DrGeoFigure nouveau.
d1 := figure droitePassantPar: 0 @ 5 et: 2 @ 0.
d1 nommer: 'd1'.
(figure point: 0 @ 5) montrer.
3 à: 12 par: 0.5 faire: [:abscisse |
   figure perpendiculaireA: d1 passantPar: abscisse @ 0]

Exercice 4.3

| figure d1 droite |
figure := DrGeoFigure nouveau echelle: 3.
d1 := figure droitePassantPar: 0 @ 5 et: 2 @ 0.
d1 nommer: 'd1'.
(figure point: 0 @ 5) montrer.
1 à: 500 faire: [:abscisse |
   | couleur |
   droite := figure perpendiculaireA: d1 passantPar: abscisse @ 0.
   abscisse pair
      siVrai: [couleur := Color red]
      siFaux: [couleur := Color orange].
   abscisse estPremier siVrai: [couleur := Color blue].
   droite couleur: couleur]

Exercice 4.4

| figure droite1 droite2 perp pointA pointB |
figure := DrGeoFigure nouveau afficherAxes.
droite1 := figure droitePassantPar: 5 @ 5 et: 7 @ -2.
droite2 := figure parallèleA: droite1 passantPar: 0 @ 0.
perp := figure perpendiculaireA: droite2 passantPar: -5 @ 0.
droite1 nommer: 'droite 1'.
droite2 nommer: 'droite 2'.
pointA := figure intersectionDe: droite1 et: perp.
pointB := figure intersectionDe: droite2 et: perp.
(figure distanceDe: pointA à: pointB) montrer

Exercice 4.5

La distance entre les deux droites parallèles est inchangée.

Exercice 4.6

| figure droite1 droite2 perp ptA ptB |
figure := DrGeoFigure nouveau afficherAxes.
droite1 := figure droitePassantPar: 5 @ 5 et: 7 @ -2.
droite2 := figure parallèleA: droite1 passantPar: 0 @ 0.
perp := figure perpendiculaireA: droite2 passantPar: -5 @ 0.
perp epais.
droite1 nommer: 'droite 1'.
droite2 nommer: 'droite 2'.
ptA := figure intersectionDe: droite1 et: perp.
ptB := figure intersectionDe: droite2 et: perp.
(figure distanceDe: ptA à: ptB) montrer.
0 à: 1 par: 0.01 faire: [:valeur |
   | point |
   point := figure pointSurLigne: droite1 à: valeur.
   point cacher.
   (figure segmentDe: point à: ptB) pointille]

Exercice 4.7

Lorsque les points A, B ou C sont déplacés, le point D se déplace automatiquement afin que ABCD reste un parallélogramme. Cela vient du fait que le point D a été construit à partir de la propriété des côtés opposés parallèles du parallélogramme.

Exercice 4.8

| figure o m n p mn pm |
figure := DrGeoFigure nouveau.
m := (figure point: -5 @ 2) nommer: 'M'.
n := (figure point: 3 @ 2) nommer: 'N'.
p := (figure point: 1 @ -5) nommer: 'P'.
mn := figure segmentDe: m à: n.
pm := figure segmentDe: p à: m.
o := figure
   intersectionDe: (figure parallèleA: pm passantPar: n) cacher
   et: (figure parallèleA: mn passantPar: p) cacher.
o nommer: 'O'.
figure segmentDe: o à: n.
figure segmentDe: o à: p

Exercice 4.10

| figure a b c i |
figure := DrGeoFigure nouveau.
a := (figure point: -5 @ 2) nommer: 'A'.
b := (figure point: 3 @ 2) nommer: 'B'.
c := (figure point: 1 @ -5) nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'

Exercice 4.11

| figure a b c i d |
figure := DrGeoFigure nouveau.
a := (figure point: -5 @ 2) nommer: 'A'.
b := (figure point: 3 @ 2) nommer: 'B'.
c := (figure point: 1 @ -5) nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'.
d := (figure symétriqueDe: b selonCentre: i) nommer: 'D'.
figure polygone: {a . b . c . d}

Exercice 4.9

Le deuxième point d’intersection des deux cercles permet de former un quadrilatère dont les côtés opposés sont parallèles. Toutefois les côtés opposés ne sont alors pas parallèles. Le quadrilatère est dit croisé, les côtés opposés sont sécants. Ce n’est donc pas un parallélogramme.

Exercice 4.12

| figure a b c cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
cercle := figure cercleCentre: b passantPar: a.
c := figure pointSurLigne: cercle à: 0.2.
c nommer: 'C'

Exercice 4.13

| figure a b c d ab bc cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
cercle := figure cercleCentre: b passantPar: a.
c := figure pointSurLigne: cercle à: 0.2.
c nommer: 'C'.
ab := figure segmentDe: a à: b.
bc := figure segmentDe: b à: c.
d := figure
  intersectionDe: (figure parallèleA: ab passantPar: c) cacher
  et: (figure parallèleA: bc passantPar: a) cacher.
d nommer: 'D'.
figure segmentDe: a à: d.
figure segmentDe: c à: d

Exercice 4.14

| figure a b c d i cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
cercle := figure cercleCentre: b passantPar: a.
c := figure pointSurLigne: cercle à: 0.2.
c nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'.
d := (figure symétriqueDe: b selonCentre: i) nommer: 'D'.
figure polygone: {a . b . c . d}

Exercice 4.15

| figure a b c ab droite |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
c := figure pointSurLigne: droite à: 0.1.
c nommer: 'C'

Exercice 4.16

| figure a b c d ab bc droite |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
c := figure pointSurLigne: droite à: 0.1.
c nommer: 'C'.
bc := figure segmentDe: b à: c.
d := figure
  intersectionDe: (figure parallèleA: ab passantPar: c) cacher
  et: (figure parallèleA: bc passantPar: a) cacher.
d nommer: 'D'.
figure segmentDe: a à: d.
figure segmentDe: c à: d

Exercice 4.17

| figure a b c d i ab droite|
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
c := figure pointSurLigne: droite à: 0.1.
c nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'.
d := (figure symétriqueDe: b selonCentre: i) nommer: 'D'.
figure polygone: {a . b . c . d}

Exercice 4.18

| figure a c i cercle |
figure := DrGeoFigure new.
a := figure point: 0 @ 0.
c := figure point: 5 @ 2.
figure segmentDe: a à: c. 
i := figure milieuDe: a et: c.
cercle := figure cercleCentre: i passantPar: a.

Exercice 4.19

| figure a c i cercle ib b d|
figure := DrGeoFigure new.
a := figure point: 0 @ 0.
c := figure point: 5 @ 2.
figure segmentDe: a à: c.
i := figure milieuDe: a et: c.
cercle := figure cercleCentre: i passantPar: a.
b := figure pointSurLigne: cercle à: 0.4.
ib := figure droitePassantPar: i et: b.
d := figure intersectionDe: ib et: cercle. 
figure polygone: { a . b . c . d  }

Exercice 4.20

| figure a b c ab droite cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'

Exercice 4.21

| figure a b c ab bc droite cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'.
bc := figure segmentDe: b à: c.
d := figure
  intersectionDe: (figure parallèleA: ab passantPar: c) cacher
  et: (figure parallèleA: bc passantPar: a) cacher.
d nommer: 'D'.
figure segmentDe: a à: d.
figure segmentDe: c à: d.
figure segmentDe: a à: b.
ab cacher.
cercle cacher.
droite cacher.

Exercice 4.22

| figure a b c d i ab droite cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'.
d := (figure symétriqueDe: b selonCentre: i) nommer: 'D'.
figure polygone: {a . b . c . d}

Exercice 4.23

| figure a b c cercle1 cercle2 |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle1 := figure cercleCentre: b rayon: 4.
cercle2 := figure cercleCentre: c rayon: 4.
a := (figure intersectionDe: cercle1 et: cercle2) nommer: 'A'.
cercle1 cacher.
cercle2 cacher.
figure polygone: {a . b . c}

Exercice 4.24

| figure a b c bc médiatrice |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
médiatrice := figure médiatrice: bc.
a := (figure pointSurLigne: médiatrice à: 0.2) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.25

La difficulté pour terminer l’exercice vient de l’angle nécessaire pour la 2e rotation, ce n’est pas le même. C’est le complémentaire à 360 degrés du premier angle. Le plus simple étant définir un deuxième angle alpha2 en inversant les deux extrémités du premier angle.

| figure alpha1 alpha2 b c b1 c1 demiDroite1 demiDroite2|
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
alpha1 := figure angleSommet: 10@10 de: 12@10 à: 12@13.
b1 := figure rotationDe: b parCentre: c etAngle: alpha1.
demiDroite1 := figure demiDroiteOrigine: c passantPar: b1.
alpha2 := figure angleSommet: 10@10 de: 12@13 à: 12@10.
c1 := figure rotationDe: c parCentre: b etAngle: alpha2.
demiDroite2 := figure demiDroiteOrigine: b passantPar: c1.
a := (figure intersectionDe: demiDroite1 et: demiDroite2) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.26

| figure alpha1 alpha2 b c b1 c1 demiDroite1 demiDroite2|
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
alpha1 := figure angleSommet: 10@10 de: 12@10 à: 12@13.
b1 := figure rotationDe: b parCentre: c etAngle: alpha1.
demiDroite1 := figure demiDroiteOrigine: c passantPar: b1.
alpha2 := figure angleSommet: 10@10 de: 12@13 à: 12@10.
c1 := figure rotationDe: c parCentre: b etAngle: alpha2.
demiDroite2 := figure demiDroiteOrigine: b passantPar: c1.
a := (figure intersectionDe: demiDroite1 et: demiDroite2) nommer: 'A'.
b1 cacher.
c1 cacher.
demiDroite1 cacher.
demiDroite2 cacher.
(figure point: 12@10) montrer.
figure polygone: {a . b . c}

Exercice 4.27

| figure a b c cercle1 cercle2 |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle1 := figure cercleCentre: b passantPar: c.
cercle2 := figure cercleCentre: c passantPar: b.
a := figure intersectionDe: cercle1 et: cercle2.
a nommer: 'A'.
cercle1 cacher.
cercle2 cacher.
figure polygone: {a . b . c}

Exercice 4.28

| figure a b c cercle médiatrice |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle := figure cercleCentre: b passantPar: c.
médiatrice := figure médiatriceDe: b à: c.
a := figure intersectionDe: cercle et: médiatrice.
a nommer: 'A'.
cercle cacher.
médiatrice cacher.
figure polygone: {a . b . c}

Exercice 4.29

| figure a b c bc perp |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
a := (figure pointSurLigne: perp à: 0.1) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.30

| figure a b c bc perp cercle |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
cercle := figure cercleCentre: b passantPar: c.
a := (figure intersectionDe: perp et: cercle) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.31

| figure a b c bc ba perp cercle |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
cercle := figure cercleCentre: b passantPar: c.
a := (figure intersectionDe: perp et: cercle) nommer: 'A'.
figure polygone: {a . b . c}.
perp cacher.
cercle cacher.
figure angleGéométriqueSommet: b de: a à: c.
bc marquerAvecSimpleTrait.
ba := figure segmentDe: b à: a.
ba marquerAvecSimpleTrait.

Exercice 4.32

| figure a b c m1 m2 m3 m |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
m1 := figure médiatriceDe: a à: b.
m2 := figure médiatriceDe: b à: c.
m3 := figure médiatriceDe: a à: c.
m := (figure intersectionDe: m1 et: m2) nommer: 'M'

Exercice 4.33

| figure a b c m1 m2 m3 m |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
m1 := figure médiatriceDe: a à: b.
m2 := figure médiatriceDe: b à: c.
m3 := figure médiatriceDe: a à: c.
m := (figure intersectionDe: m1 et: m2) nommer: 'M'.
figure cercleCentre: m passantPar: a

Exercice 4.34

| figure a b c b1 b2 b3 o |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
b1 := figure bissectriceSommet: a côté1: b côté2: c.
b2 := figure bissectriceSommet: b côté1: a côté2: c.
b3 := figure bissectriceSommet: c côté1: b côté2: a.
o := (figure intersectionDe: b1 et: b2) nommer: 'O'

Exercice 4.35

| figure a b c b1 b2 b3 o s1 h |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
b1 := figure bissectriceSommet: a côté1: b côté2: c.
b2 := figure bissectriceSommet: b côté1: a côté2: c.
b3 := figure bissectriceSommet: c côté1: b côté2: a.
o := (figure intersectionDe: b1 et: b2) nommer: 'O'.
s1 := figure segmentDe: a à: b.
h := figure
   intersectionDe: s1
   et: (figure perpendiculaireA: s1 passantPar: o).
figure cercleCentre: o passantPar: h

Exercice 4.36

| figure a b c ab bc ac h1 h2 h3 |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
ab := figure segmentDe: a à: b.
bc := figure segmentDe: b à: c.
ac := figure segmentDe: a à: c.
h1 := figure perpendiculaireA: ab passantPar: c.
h2 := figure perpendiculaireA: bc passantPar: a.
h3 := figure perpendiculaireA: ac passantPar: b.
(figure intersectionDe: h1 et: h2) nommer: 'H'

Exercice 4.36

| figure a b c mi1 mi2 mi3 m1 m2 m3 |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
mi1 := figure milieuDe: a et: b.
mi2 := figure milieuDe: b et: c.
mi3 := figure milieuDe: a et: c.
m1 := figure droitePassantPar: a et: mi2.
m2 := figure droitePassantPar: b et: mi3.
m3 := figure droitePassantPar: c et: mi1.
(figure intersectionDe: m1 et: m2) nommer: 'G'

Exercice 4.38

| figure a b c ab bc d1 m mac|
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 6@0) nommer: 'B'.
c := (figure point: 4@9) nommer: 'C'.
ab := figure droitePassantPar: a et: b.
(figure segmentDe: a à: b) normal.
bc := (figure segmentDe: b à: c) normal.
(figure segmentDe: a à: c) normal.
(figure angleGéométriqueSommet: b de: a à: c) couleur: Color red.
(figure angleGéométriqueSommet: a de: b à: c) couleur: Color blue.
(figure angleGéométriqueSommet: c de: a à: b) couleur: Color brown.
d1 := figure parallèleA: bc passantPar: a.
m := (figure pointSurLigne: d1 à: 0.89) nommer: 'M'.
(figure angleGéométriqueSommet: a de: m à: c) couleur: Color brown

Exercice 4.39

A ajouter à la suite de la solution de l’Exercice 4.38.

| figure ... n |
../..
n := (figure pointSurLigne: ab à: 0.2) nommer: 'N'.
(figure angleGéométriqueSommet: a de: m à: n) couleur: Color red

Exercice 4.40

| figure ancre a b c d |
figure := DrGeoFigure nouveau.
figure polygone: { 0@0. 6@0. -3@8 . 4@9 }.
(figure droitePassantPar: 0@0 et: 4@9) pointille.
a := figure angleGéométriqueSommet: 0@0 de: 6@0 à: 4@9.
b := figure angleGéométriqueSommet:  6@0 de: -3@8 à: 0@0.
c := figure angleGéométriqueSommet: 4@9 de: -3@8 à: 0@0.
d := figure angleGéométriqueSommet: -3@8 de: 6@0 à: 4@9.
ancre := figure point: -2 @ -2.
figure point: [
   ancre nommer: 'Somme des angles : ',
      (a mathItem  degreeAngle
      + b mathItem degreeAngle 
      + c mathItem degreeAngle
      + d mathItem degreeAngle) rounded asString]

Exercice 4.41

| figure carré o |
figure := DrGeoFigure nouveau.
o := figure point: 3 @ -2.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure symétriqueDe: carré selonCentre: o

Exercice 4.42

| figure carré d |
figure := DrGeoFigure nouveau.
d := figure droitePassantPar: -3 @ 3 et: -8 @ 0.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure symétriqueDe: carré selonAxe: d

Exercice 4.43

| figure carré a b v |
figure := DrGeoFigure nouveau.
a := figure point: -1 @ -1.
b := figure point: -4 @ -3.
v := figure vecteurOrigine: a extrémité: b.
carré := figure polygone: { 1@0. 5@0. 5@4 . 1@4 }.
figure translationDe: carré parVecteur: v

Exercice 4.44

| figure carré o a1 a2 |
figure := DrGeoFigure nouveau.
o := figure point: 0 @ 0.
a1 := 90 degreesToRadians.
a2 := -90 degreesToRadians.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure rotationDe: carré parCentre: o etAngle: a1.
figure rotationDe: carré parCentre: o etAngle: a2

Exercice 4.45

| figure carré a b k1 k2 |
figure := DrGeoFigure nouveau afficherAxes afficherGrille.
a := figure point: -8 @ 5.
b := figure point: 4 @ -7.
k1 := -1/2.
k2 := 5/2.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure homothétieDe: carré parCentre: a etFacteur: k1.
figure homothétieDe: carré parCentre: b etFacteur: k2

Exercice 4.46

Dans la collection, il est nécessaire d’envoyer le message #montrer au point. En effet il a été créé en même temps que le cercle mais masqué. Nous invoquons ce point et demandons qu’il se montre.

| figure collection d |
figure := DrGeoFigure nouveau.
 := figure droitePassantPar: -7 @ 0 et: 0 @ -8.
collection := {figure segmentDe: -2 @ 2 à: 2 @ 2 .
   figure segmentDe: 2 @ 2 à: 2 @ -2 .
   figure segmentDe: 2 @ -2 à: -2 @ -2 .
   figure segmentDe: -2 @ -2 à: -2 @ 2 .
   figure cercleCentre: 0 @ 0 rayon: 2.
   figure segmentDe: 2 @ 2 à: -2 @ -2.
   figure segmentDe: 2 @ -2 à: -2 @ 2.
   (figure point: 0 @ 0) montrer}.
collection faire: [:forme | figure symétriqueDe: forme selonAxe: d]

Exercice 4.47

| figure collection o k |
figure := DrGeoFigure nouveau.
d := figure point: -10 @ -10.
k := 1/4.
collection := {figure segmentDe: -2 @ 2 à: 2 @ 2 .
   figure segmentDe: 2 @ 2 à: 2 @ -2 .
   figure segmentDe: 2 @ -2 à: -2 @ -2 .
   figure segmentDe: -2 @ -2 à: -2 @ 2 .
   figure cercleCentre: 0 @ 0 rayon: 2}.
collection faire: [:forme |
   figure homothétieDe: forme parCentre: o etFacteur: k]

Exercice 4.48

| figure collection d |
figure := DrGeoFigure nouveau.
d := (figure droitePassantPar: 4@0 et: 4@5) cacher.
collection := {figure segmentDe: 4@1 à: 1@1.
   figure segmentDe: 1@1 à: 1@4.
   figure segmentDe: 1@4 à: 4@4.
   figure segmentDe: 4@4 à: 4@2.
   figure segmentDe: 4@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@3.
   figure segmentDe: 2@3 à: 3@3}.
collection faire: [:forme|
   figure symétriqueDe: forme selonAxe: d]

Exercice 4.49

| figure collection o |
figure := DrGeoFigure nouveau.
o := figure point: -1 @ -1.
collection := {figure cercleCentre: 3@3 rayon: 3.
   figure cercleCentre: 2@4 rayon: 1/2.
   figure cercleCentre: 4@4 rayon: 1/2.
   figure polygone: {(3/2)@2 . (5/2)@(3/2) . (7/2)@(3/2).
      (9/2)@2 . (7/2)@1 . (5/2)@1} }.
collection faire: [:forme|
   figure symétriqueDe: forme selonCentre: o]

Exercice 4.50

| figure collection o1 o2 o3 o4 o5 |
figure := DrGeoFigure nouveau.
o1 := figure point: 4@2.5.
o2 := figure point: 1@2.5.
o3 := figure point: -2@2.5.
o4 := figure point: -5@2.5.
o5 := figure point: -8@2.5.
collection := {(figure segmentDe: 7@1 à: 4@1) normal.
   (figure segmentDe: 4@1 à: 4@4) normal.
   (figure segmentDe: 4@4 à: 7@4) normal.
   (figure segmentDe: 7@4 à: 7@2) normal.
   (figure segmentDe: 7@2 à: 5@2) normal.
   (figure segmentDe: 5@2 à: 5@3) normal.
   (figure segmentDe: 5@3 à: 6@3) normal}.
{o1 . o2 . o3 . o4 . o5} faire: [:centre |
   collection := collection collecter: [:forme |
      figure symétriqueDe: forme selonCentre: centre] ]

Exercice 4.51

| figure collection |
figure := DrGeoFigure nouveau.
collection := {figure segmentDe: 0@0 à: (1/2)@0.
   figure segmentDe: (1/2)@0 à: 2@1.
   figure segmentDe: 2@1 à: 2@0.
   figure segmentDe: 2@0 à: 3@0}

Exercice 4.53

| figure collection |
figure := DrGeoFigure nouveau.
collection := {figure segmentDe: 0@0 à: 4@0.
   figure segmentDe: 0@4 à: 4@4.
   figure segmentDe: 0@1 à: 0@3.
   figure segmentDe: 0@3 à: 3@3.
   figure segmentDe: 3@3 à: 3@2.
   figure segmentDe: 3@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@1.
   figure segmentDe: 2@1 à: 4@1}

Exercice 4.52


figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'

Exercice 4.21

| figure a b c ab bc droite cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'.
bc := figure segmentDe: b à: c.
d := figure
  intersectionDe: (figure parallèleA: ab passantPar: c) cacher
  et: (figure parallèleA: bc passantPar: a) cacher.
d nommer: 'D'.
figure segmentDe: a à: d.
figure segmentDe: c à: d.
figure segmentDe: a à: b.
ab cacher.
cercle cacher.
droite cacher.

Exercice 4.22

| figure a b c d i ab droite cercle |
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 5@1) nommer: 'B'.
ab := figure droitePassantPar: a et: b.
droite := figure perpendiculaireA:  ab passantPar: b.
cercle := figure cercleCentre: b passantPar: a.
c := figure intersectionDe: droite et: cercle.
c nommer: 'C'.
i := (figure milieuDe: a et: c) nommer: 'I'.
d := (figure symétriqueDe: b selonCentre: i) nommer: 'D'.
figure polygone: {a . b . c . d}

Exercice 4.23

| figure a b c cercle1 cercle2 |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle1 := figure cercleCentre: b rayon: 4.
cercle2 := figure cercleCentre: c rayon: 4.
a := (figure intersectionDe: cercle1 et: cercle2) nommer: 'A'.
cercle1 cacher.
cercle2 cacher.
figure polygone: {a . b . c}

Exercice 4.24

| figure a b c bc médiatrice |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
médiatrice := figure médiatrice: bc.
a := (figure pointSurLigne: médiatrice à: 0.2) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.25

La difficulté pour terminer l’exercice vient de l’angle nécessaire pour la 2e rotation, ce n’est pas le même. C’est le complémentaire à 360 degrés du premier angle. Le plus simple étant définir un deuxième angle alpha2 en inversant les deux extrémités du premier angle.

| figure alpha1 alpha2 b c b1 c1 demiDroite1 demiDroite2|
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
alpha1 := figure angleSommet: 10@10 de: 12@10 à: 12@13.
b1 := figure rotationDe: b parCentre: c etAngle: alpha1.
demiDroite1 := figure demiDroiteOrigine: c passantPar: b1.
alpha2 := figure angleSommet: 10@10 de: 12@13 à: 12@10.
c1 := figure rotationDe: c parCentre: b etAngle: alpha2.
demiDroite2 := figure demiDroiteOrigine: b passantPar: c1.
a := (figure intersectionDe: demiDroite1 et: demiDroite2) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.26

| figure alpha1 alpha2 b c b1 c1 demiDroite1 demiDroite2|
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
alpha1 := figure angleSommet: 10@10 de: 12@10 à: 12@13.
b1 := figure rotationDe: b parCentre: c etAngle: alpha1.
demiDroite1 := figure demiDroiteOrigine: c passantPar: b1.
alpha2 := figure angleSommet: 10@10 de: 12@13 à: 12@10.
c1 := figure rotationDe: c parCentre: b etAngle: alpha2.
demiDroite2 := figure demiDroiteOrigine: b passantPar: c1.
a := (figure intersectionDe: demiDroite1 et: demiDroite2) nommer: 'A'.
b1 cacher.
c1 cacher.
demiDroite1 cacher.
demiDroite2 cacher.
(figure point: 12@10) montrer.
figure polygone: {a . b . c}

Exercice 4.27

| figure a b c cercle1 cercle2 |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle1 := figure cercleCentre: b passantPar: c.
cercle2 := figure cercleCentre: c passantPar: b.
a := figure intersectionDe: cercle1 et: cercle2.
a nommer: 'A'.
cercle1 cacher.
cercle2 cacher.
figure polygone: {a . b . c}

Exercice 4.28

| figure a b c cercle médiatrice |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
cercle := figure cercleCentre: b passantPar: c.
médiatrice := figure médiatriceDe: b à: c.
a := figure intersectionDe: cercle et: médiatrice.
a nommer: 'A'.
cercle cacher.
médiatrice cacher.
figure polygone: {a . b . c}

Exercice 4.29

| figure a b c bc perp |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
a := (figure pointSurLigne: perp à: 0.1) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.30

| figure a b c bc perp cercle |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
cercle := figure cercleCentre: b passantPar: c.
a := (figure intersectionDe: perp et: cercle) nommer: 'A'.
figure polygone: {a . b . c}

Exercice 4.31

| figure a b c bc ba perp cercle |
figure := DrGeoFigure nouveau.
b := (figure point: 5@1) nommer: 'B'.
c := (figure point: 0@0) nommer: 'C'.
bc := figure segmentDe: b à: c.
perp := figure perpendiculaireA: bc passantPar: b.
cercle := figure cercleCentre: b passantPar: c.
a := (figure intersectionDe: perp et: cercle) nommer: 'A'.
figure polygone: {a . b . c}.
perp cacher.
cercle cacher.
figure angleGéométriqueSommet: b de: a à: c.
bc marquerAvecSimpleTrait.
ba := figure segmentDe: b à: a.
ba marquerAvecSimpleTrait.

Exercice 4.32

| figure a b c m1 m2 m3 m |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
m1 := figure médiatriceDe: a à: b.
m2 := figure médiatriceDe: b à: c.
m3 := figure médiatriceDe: a à: c.
m := (figure intersectionDe: m1 et: m2) nommer: 'M'

Exercice 4.33

| figure a b c m1 m2 m3 m |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
m1 := figure médiatriceDe: a à: b.
m2 := figure médiatriceDe: b à: c.
m3 := figure médiatriceDe: a à: c.
m := (figure intersectionDe: m1 et: m2) nommer: 'M'.
figure cercleCentre: m passantPar: a

Exercice 4.34

| figure a b c b1 b2 b3 o |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
b1 := figure bissectriceSommet: a côté1: b côté2: c.
b2 := figure bissectriceSommet: b côté1: a côté2: c.
b3 := figure bissectriceSommet: c côté1: b côté2: a.
o := (figure intersectionDe: b1 et: b2) nommer: 'O'

Exercice 4.35

| figure a b c b1 b2 b3 o s1 h |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
b1 := figure bissectriceSommet: a côté1: b côté2: c.
b2 := figure bissectriceSommet: b côté1: a côté2: c.
b3 := figure bissectriceSommet: c côté1: b côté2: a.
o := (figure intersectionDe: b1 et: b2) nommer: 'O'.
s1 := figure segmentDe: a à: b.
h := figure
   intersectionDe: s1
   et: (figure perpendiculaireA: s1 passantPar: o).
figure cercleCentre: o passantPar: h

Exercice 4.36

| figure a b c ab bc ac h1 h2 h3 |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
ab := figure segmentDe: a à: b.
bc := figure segmentDe: b à: c.
ac := figure segmentDe: a à: c.
h1 := figure perpendiculaireA: ab passantPar: c.
h2 := figure perpendiculaireA: bc passantPar: a.
h3 := figure perpendiculaireA: ac passantPar: b.
(figure intersectionDe: h1 et: h2) nommer: 'H'

Exercice 4.36

| figure a b c mi1 mi2 mi3 m1 m2 m3 |
figure := DrGeoFigure nouveau.
a := (figure point: 2@1) nommer: 'A'.
b := (figure point: 7@2) nommer: 'B'.
c := (figure point: 4@7) nommer: 'C'.
figure polygone: {a . b . c}.
mi1 := figure milieuDe: a et: b.
mi2 := figure milieuDe: b et: c.
mi3 := figure milieuDe: a et: c.
m1 := figure droitePassantPar: a et: mi2.
m2 := figure droitePassantPar: b et: mi3.
m3 := figure droitePassantPar: c et: mi1.
(figure intersectionDe: m1 et: m2) nommer: 'G'

Exercice 4.38

| figure a b c ab bc d1 m mac|
figure := DrGeoFigure nouveau.
a := (figure point: 0@0) nommer: 'A'.
b := (figure point: 6@0) nommer: 'B'.
c := (figure point: 4@9) nommer: 'C'.
ab := figure droitePassantPar: a et: b.
(figure segmentDe: a à: b) normal.
bc := (figure segmentDe: b à: c) normal.
(figure segmentDe: a à: c) normal.
(figure angleGéométriqueSommet: b de: a à: c) couleur: Color red.
(figure angleGéométriqueSommet: a de: b à: c) couleur: Color blue.
(figure angleGéométriqueSommet: c de: a à: b) couleur: Color brown.
d1 := figure parallèleA: bc passantPar: a.
m := (figure pointSurLigne: d1 à: 0.89) nommer: 'M'.
(figure angleGéométriqueSommet: a de: m à: c) couleur: Color brown

Exercice 4.39

A ajouter à la suite de la solution de l’Exercice 4.38.

| figure ... n |
../..
n := (figure pointSurLigne: ab à: 0.2) nommer: 'N'.
(figure angleGéométriqueSommet: a de: m à: n) couleur: Color red

Exercice 4.40

| figure ancre a b c d |
figure := DrGeoFigure nouveau.
figure polygone: { 0@0. 6@0. -3@8 . 4@9 }.
(figure droitePassantPar: 0@0 et: 4@9) pointille.
a := figure angleGéométriqueSommet: 0@0 de: 6@0 à: 4@9.
b := figure angleGéométriqueSommet:  6@0 de: -3@8 à: 0@0.
c := figure angleGéométriqueSommet: 4@9 de: -3@8 à: 0@0.
d := figure angleGéométriqueSommet: -3@8 de: 6@0 à: 4@9.
ancre := figure point: -2 @ -2.
figure point: [
   ancre nommer: 'Somme des angles : ',
      (a mathItem  degreeAngle
      + b mathItem degreeAngle 
      + c mathItem degreeAngle
      + d mathItem degreeAngle) rounded asString]

Exercice 4.41

| figure carré o |
figure := DrGeoFigure nouveau.
o := figure point: 3 @ -2.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure symétriqueDe: carré selonCentre: o

Exercice 4.42

| figure carré d |
figure := DrGeoFigure nouveau.
d := figure droitePassantPar: -3 @ 3 et: -8 @ 0.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure symétriqueDe: carré selonAxe: d

Exercice 4.43

| figure carré a b v |
figure := DrGeoFigure nouveau.
a := figure point: -1 @ -1.
b := figure point: -4 @ -3.
v := figure vecteurOrigine: a extrémité: b.
carré := figure polygone: { 1@0. 5@0. 5@4 . 1@4 }.
figure translationDe: carré parVecteur: v

Exercice 4.44

| figure carré o a1 a2 |
figure := DrGeoFigure nouveau.
o := figure point: 0 @ 0.
a1 := 90 degreesToRadians.
a2 := -90 degreesToRadians.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure rotationDe: carré parCentre: o etAngle: a1.
figure rotationDe: carré parCentre: o etAngle: a2

Exercice 4.45

| figure carré a b k1 k2 |
figure := DrGeoFigure nouveau afficherAxes afficherGrille.
a := figure point: -8 @ 5.
b := figure point: 4 @ -7.
k1 := -1/2.
k2 := 5/2.
carré := figure polygone: { 0@0. 4@0. 4@4 . 0@4 }.
figure homothétieDe: carré parCentre: a etFacteur: k1.
figure homothétieDe: carré parCentre: b etFacteur: k2

Exercice 4.46

Dans la collection, il est nécessaire d’envoyer le message #montrer au point. En effet il a été créé en même temps que le cercle mais masqué. Nous invoquons ce point et demandons qu’il se montre.

| figure collection d |
figure := DrGeoFigure nouveau.
 := figure droitePassantPar: -7 @ 0 et: 0 @ -8.
collection := {figure segmentDe: -2 @ 2 à: 2 @ 2 .
   figure segmentDe: 2 @ 2 à: 2 @ -2 .
   figure segmentDe: 2 @ -2 à: -2 @ -2 .
   figure segmentDe: -2 @ -2 à: -2 @ 2 .
   figure cercleCentre: 0 @ 0 rayon: 2.
   figure segmentDe: 2 @ 2 à: -2 @ -2.
   figure segmentDe: 2 @ -2 à: -2 @ 2.
   (figure point: 0 @ 0) montrer}.
collection faire: [:forme | figure symétriqueDe: forme selonAxe: d]

Exercice 4.47

| figure collection o k |
figure := DrGeoFigure nouveau.
d := figure point: -10 @ -10.
k := 1/4.
collection := {figure segmentDe: -2 @ 2 à: 2 @ 2 .
   figure segmentDe: 2 @ 2 à: 2 @ -2 .
   figure segmentDe: 2 @ -2 à: -2 @ -2 .
   figure segmentDe: -2 @ -2 à: -2 @ 2 .
   figure cercleCentre: 0 @ 0 rayon: 2}.
collection faire: [:forme |
   figure homothétieDe: forme parCentre: o etFacteur: k]

Exercice 4.48

| figure collection d |
figure := DrGeoFigure nouveau.
d := (figure droitePassantPar: 4@0 et: 4@5) cacher.
collection := {figure segmentDe: 4@1 à: 1@1.
   figure segmentDe: 1@1 à: 1@4.
   figure segmentDe: 1@4 à: 4@4.
   figure segmentDe: 4@4 à: 4@2.
   figure segmentDe: 4@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@3.
   figure segmentDe: 2@3 à: 3@3}.
collection faire: [:forme|
   figure symétriqueDe: forme selonAxe: d]

Exercice 4.49

| figure collection o |
figure := DrGeoFigure nouveau.
o := figure point: -1 @ -1.
collection := {figure cercleCentre: 3@3 rayon: 3.
   figure cercleCentre: 2@4 rayon: 1/2.
   figure cercleCentre: 4@4 rayon: 1/2.
   figure polygone: {(3/2)@2 . (5/2)@(3/2) . (7/2)@(3/2).
      (9/2)@2 . (7/2)@1 . (5/2)@1} }.
collection faire: [:forme|
   figure symétriqueDe: forme selonCentre: o]

Exercice 4.50

| figure collection o1 o2 o3 o4 o5 |
figure := DrGeoFigure nouveau.
o1 := figure point: 4@2.5.
o2 := figure point: 1@2.5.
o3 := figure point: -2@2.5.
o4 := figure point: -5@2.5.
o5 := figure point: -8@2.5.
collection := {(figure segmentDe: 7@1 à: 4@1) normal.
   (figure segmentDe: 4@1 à: 4@4) normal.
   (figure segmentDe: 4@4 à: 7@4) normal.
   (figure segmentDe: 7@4 à: 7@2) normal.
   (figure segmentDe: 7@2 à: 5@2) normal.
   (figure segmentDe: 5@2 à: 5@3) normal.
   (figure segmentDe: 5@3 à: 6@3) normal}.
{o1 . o2 . o3 . o4 . o5} faire: [:centre |
   collection := collection collecter: [:forme |
      figure symétriqueDe: forme selonCentre: centre] ]

Exercice 4.51

| figure collection |
figure := DrGeoFigure nouveau.
collection := {figure segmentDe: 0@0 à: (1/2)@0.
   figure segmentDe: (1/2)@0 à: 2@1.
   figure segmentDe: 2@1 à: 2@0.
   figure segmentDe: 2@0 à: 3@0}

Exercice 4.53

| figure collection |
figure := DrGeoFigure nouveau.
collection := {figure segmentDe: 0@0 à: 4@0.
   figure segmentDe: 0@4 à: 4@4.
   figure segmentDe: 0@1 à: 0@3.
   figure segmentDe: 0@3 à: 3@3.
   figure segmentDe: 3@3 à: 3@2.
   figure segmentDe: 3@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@1.
   figure segmentDe: 2@1 à: 4@1}

Exercice 4.52

| figure collection v |
figure := DrGeoFigure nouveau.
v := figure vecteur: 3 @ 0.
collection := {figure segmentDe: 0 @ 0 à: (1/2) @ 0.
   figure segmentDe: (1/2) @ 0 à: 2 @ 1.
   figure segmentDe: 2 @1 à: 2 @ 0.
   figure segmentDe: 2 @ 0 à: 3 @ 0}.
5 foisRepete: [
   collection := collection collecter: [:forme |
     figure translationDe: forme parVecteur:v ] ]

Exercice 4.54

| figure collection v |
figure := DrGeoFigure nouveau.
v := figure vecteur: 4@0.
collection := {figure segmentDe: 0@0 à: 4@0.
   figure segmentDe: 0@4 à: 4@4.
   figure segmentDe: 0@1 à: 0@3.
   figure segmentDe: 0@3 à: 3@3.
   figure segmentDe: 3@3 à: 3@2.
   figure segmentDe: 3@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@1.
   figure segmentDe: 2@1 à: 4@1}.
5 foisRepete: [
  collection := collection collecter: [:forme |
     figure translationDe: forme parVecteur:v ] ]

Exercice 4.55

| figure collection v |
figure := DrGeoFigure nouveau.
v := figure vecteur: 4@0.
collection := {figure segmentDe: 0@0 à: 4@0.
   figure segmentDe: 0@4 à: 4@4.
   figure segmentDe: 0@1 à: 0@3.
   figure segmentDe: 0@3 à: 3@3.
   figure segmentDe: 3@3 à: 3@2.
   figure segmentDe: 3@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@1.
   figure segmentDe: 2@1 à: 4@1}.
collection faire: [:forme | forme epais].
5 foisRepete: [
  collection := collection collecter: [:forme |
     figure translationDe: forme parVecteur:v ] ]

Exercice 4.56

Deux solutions à cet exercice sont proposées. La première ci-dessous est dans la suite de ce qui a été appris jusqu’à présente. Elle a l’avantage d’être relativement facile à comprendre, mais son code est assez répétitif.

L’autre solution est écrite comme le ferait un programmeur professionnel, le code n’est pas répétitif et utilise un message subtile injecter:dans: pour construire la ligne du motif à partir de la liste de ses sommets.

Solution naïve.

| figure sommets collection v |
figure := DrGeoFigure nouveau.
v := figure vecteur: 5@0.
collection := {figure segmentDe: 0@0 à: 5@0.
   figure segmentDe: 0@6 à: 5@6.
   figure segmentDe: 0@1 à: 0@5.
   figure segmentDe: 0@5 à: 4@5.
   figure segmentDe: 4@5 à: 4@2.
   figure segmentDe: 4@2 à: 2@2.
   figure segmentDe: 2@2 à: 2@3.	
   figure segmentDe: 2@3 à: 3@3.
   figure segmentDe: 3@3 à: 3@4.
   figure segmentDe: 3@4 à: 1@4.
   figure segmentDe: 1@4 à: 1@1.
   figure segmentDe: 1@1 à: 5@1}.
5 foisRepete: [
  collection := collection collecter: [:forme |
     figure translationDe: forme parVecteur:v ] ]


Solution experte.

| figure sommets collection v |
figure := DrGeoFigure nouveau.
v := figure vecteur: 5@0.
collection := OrderedCollection new.
collection 
   ajouter: (figure segmentDe: 0@0 à: 5@0);
   ajouter: (figure segmentDe: 0@6 à: 5@6).
sommets := {0@5. 4@5. 4@2. 2@2. 2@3. 3@3. 3@4. 1@4. 1@1. 5@1}.
sommets injecter: 0@1 dans: [ :pointPrec : pointSuiv |
   collection ajouter: (figure segmentDe: pointPrec à: pointSuiv).
   pointSuiv].
5 foisRepete: [
   collection := collection collecter: [:forme |
      figure translationDe: forme parVecteur:v ] ]

Exercice 4.57

| figure collection |
figure := DrGeoFigure nouveau.
collection := {figure segmentDe: 0@0 à: (1/2)@0.
   figure segmentDe: (1/2)@0 à: (1/2)@2.
   figure segmentDe: (1/2)@2 à: 1@2}

Exercice 4.58

| figure collection symétriques axe v |
figure := DrGeoFigure nouveau.
axe := figure droitePassantPar: 1@0 et: 1@3.
v := figure vecteur: 2@0.
collection := {figure segmentDe: 0@0 à: (1/2)@0.
   figure segmentDe: (1/2)@0 à: (1/2)@2.
   figure segmentDe: (1/2)@2 à: 1@2} commeCollectionOrdonnée.
symétriques := collection collecter: [:forme |
   figure symétriqueDe: forme selonAxe: axe].
collection ajouterTout: symétriques.
5 foisRepete: [
   collection := collection collecter: [:forme |
      figure translationDe: forme parVecteur:v ] ]

Exercice 4.59

| figure collection symétriques centre v |
figure := DrGeoFigure nouveau.
centre := figure point: 3@0.
v := figure vecteur: 6@0.
collection := {figure segmentDe: 0@3 à: 1@1.
   figure segmentDe: 1@1 à: 3@0.
   figure segmentDe: 3@0 à: 2@2.
   figure segmentDe: 2@2 à: 0@3} commeCollectionOrdonnée.
symétriques := collection collecter: [:forme |
   figure symétriqueDe: forme selonCentre: centre].
collection ajouterTout: symétriques.
5 foisRepete: [
   collection := collection collecter: [:forme |
      figure translationDe: forme parVecteur:v ] ]

Exercice 4.60

| figure collection symétriques centre v d |
figure := DrGeoFigure nouveau.
centre := figure point: 3@0.
v := figure vecteur: 6@0.
d := figure droitePassantPar: 3@0 et: 3@1.
collection := {figure segmentDe: 0@3 à: 1@1.
   figure segmentDe: 1@1 à: 3@0.
   figure segmentDe: 3@0 à: 2@2.
   figure segmentDe: 2@2 à: 0@3} commeCollectionOrdonnée.
"Construction de Motif 2, symétrique de Motif 1 selon le centre"
symétriques := collection collecter: [:forme |
   figure symétriqueDe: forme selonCentre: centre].
collection ajouterTout: symétriques.
"Construction de Motif 3 et Motif 4, symétriques de Motif 1 et
Motif 2 selon l'axe d"
symétriques := collection collecter: [:forme |
   figure symétriqueDe: forme selonAxe: d].
collection ajouterTout: symétriques.
5 foisRepete: [
   collection := collection collecter: [:forme |
      figure translationDe: forme parVecteur:v ] ]

E.4 Fonctions

Exercice 5.1

L’affectation du bloc de code définissant la fonction à une variable f est superflue puisque le bloc de code est utilisé une seule fois dans le programme.

| figure |
figure := DrGeoFigure nouveau afficherAxes afficherGrille.
figure courbeDe:  [:x | -2 * x] de: -5 à: 5

Exercice 5.2

Lorsque la valeur de a est positive, la droite est montante de la gauche vers la droite. La fonction linéaire est dite croissante.

Lorsque la valeur de a est négative, la droite est descendante de la gauche vers la droite. La fonction linéaire est dite décroissante.

Lorsque a = 0, la droite est confondue avec le premier axe (abscisses). La fonction linéaire est dite constante.

Exercice 5.3

| figure f a |
figure := DrGeoFigure nouveau afficherAxeafficherGrille echelle: 50.
a := figure décimal: 1 à: 5 @ -5 min: -8 max: 8 nom: 'a' afficherValeur: true.
f := [:x | a valeur * x].
figure courbeDe: f de: -10 à: 10

Exercice 5.4

| figure f a b |
figure := DrGeoFigure nouveau afficherAxes afficherGrille echelle: 50.
a := figure entier: 1 à: 5 @ -5 min: -8 max: 8 nom: 'a' afficherValeur: true.
b := figure entier: 1 à: 5 @ -6 min: -8 max: 8 nom: 'b' afficherValeur: true.
f := [:x | a valeur * x + b valeur].
figure courbeDe: f de: -10 à: 10

Exercice 5.5

Lorsque la valeur de b augmente, la droite se déplace parallèlement vers le haut de la figure, dans le sens positif de l’axe vertical (ordonnées).

Lorsque la valeur de b diminue, la droite se déplace parallèlement vers le bas de la figure, dans le sens négatif de l’axe vertical (ordonnées).

Lorsque b = 0, la droite passe par l’origine des axes, la fonction est alors linéaire.

Lorsque a = 0, la droite est parallèle au premier axe (abscisses). La fonction est dite constante de la forme x ⟼ b.

Exercice 5.6

Attention. Dans l’expression de la fonction quadratique, dans le bloc de code, les parenthèses sont nécessaires autour de la deuxième multiplication. En effet, comme expliqué au chapitre sur la syntaxe, le système a une notion différente des priorités (priorités des messages et non pas des opérateurs).

| figure f a b c|
figure := DrGeoFigure nouveau afficherAxes afficherGrille echelle: 50.
a := figure décimal: 1 à: 5 @ -1 min: -8 max: 8 nom: 'a' afficherValeur: true.
b := figure décimal: 1 à: 5 @ -2 min: -8 max: 8 nom: 'b' afficherValeur: true.
c := figure décimal: 1 à: 5 @ -3 min: -8 max: 8 nom: 'c' afficherValeur: true.
f := [:x | a valeur * x squared + (b valeur * x) + c valeur].
figure courbeDe: f de: -10 à: 10

Exercice 5.7

Lorsque le signe de a est positif, la parabole est orientée vers le haut, ses branches partent vers l’infini positif.

Lorsque le signe de a est négatif, la parabole est orientée vers le bas, ses branches partent vers l’infini négatif.

Lorsque a est égale à zéro, c’est une fonction affine de pente b et ordonnée à l’origine c.

Exercice 5.8

| figure f n|
figure := DrGeoFigure nouveau afficherAxes afficherGrille echelle: 50.
n := figure entier: 1 à: 5 @ -1 min: 1 max: 7 nom: 'n' afficherValeur: true.
f := [:x | x puissance: n valeur].
figure courbeDe: f de: -10 à: 10

Exercice 5.9

| figure f a|
figure := DrGeoFigure nouveau afficherAxes afficherGrille echelle: 50.
a := figure entier: 1 à: 5 @ -1 min: -10 max: 10 nom: 'a' afficherValeur: true.
f := [:x | a valeur / x].
figure courbeDe: f de: -10 à: 10

Exercice 5.10

Lorsque a est positif, la fonction homographique est décroissante.

Lorsque a est négatif, la fonction homographique est croissante.