Supposons que nous souhaitions placer des points sur l’axe des abscisses. Un point sur l’axe des abscisses a comme coordonnées (1;0), (2;0), (-3;0), (2,5;0), etc. Sa deuxième coordonnée, l’ordonnée, est toujours 0 car le point est collé sur l’axe des abscisses !
Pour créer des points d’abscisse respective 1, 2, 3 nous utilisons
donc le code figure point: 1 @ 0
, figure point: 2 @ 0
,
figure point: 3 @ 0
.
Écrire le code d’une figure comprenant 10 points placés sur l’axe des abscisses dont les abscisses sont {1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10}
Exercice 2.26: Points sur axe des abscisses
La résolution de l’Exercice 2.26 n’est pas compliqué, mais c’est répétitif d’écrire 10 fois le même code pour créer un point. Et bien cela tombe bien car les programmes sont excellents pour répéter des instructions.
Pour répéter un ensemble d’instructions de code, nous utilisons une boucle. Pour résoudre l’Exercice 2.26 intelligemment, nous utilisons donc une boucle pour les valeurs d’abscisse de 1 à 10. Cela donne le code suivant :
| figure | figure := DrGeoFigure nouveau afficherAxes. 1 à: 10 faire: [:abscisse | figure point: abscisse @ 0]
Exemple 2.25: Boucle de 1 à 10
Ici, nous introduisons un nouveau message à mot clé à:faire:
avec deux paramètres. Ce message permet d’exécuter un code pour un
intervalle de valeur, ici de 1 à 10, de 1 en 1.
Le receveur du message est le nombre 1, la valeur initiale des abscisses. Son premier paramètre est le nombre 10, valeur finale des abscisses.
Le deuxième paramètre, le bloc de code, est le code à exécuter pour
chacune des valeurs d’abscisse. Ainsi le bloc [:abscisse |
figure point: abscisse @ 0]
est répété 10 fois et le paramètre
abscisse
prend successivement les valeurs entières de 1 à 10.
Dans le bloc de code la première ligne [:abscisse|
déclare son
paramètre. Si le bloc avait nécessité deux paramètres, nous écririons
cette première ligne [:abscisse :ordonnée|
. Le nom des
paramètres est libre.
Écrire une boucle pour placer sur l’axe des abscisses les points d’abscisse de -10 à -1
Exercice 2.27: Sur l’axe des abscisses, les négatifs aussi
Écrire une boucle pour placer sur l’axe des ordonnées les points d’ordonnée de 1 à 10
Exercice 2.28: Sur l’axe des ordonnées
Écrire une boucle pour placer sur la diagonale des axes des abscisses et des ordonnées les points de coordonnée de 1 à 10
Exercice 2.29: Sur la diagonale
Nous constatons l’efficacité des boucles pour répéter un grand nombre de fois du code. Nous avons fait une boucle sur les valeurs entières de 1 à 10. Serait-il possible de le faire avec un pas de 0,5, comme 1 ; 1,5 ; 2 ; 2,5 etc. ?
Oui, il suffit d’utiliser le message à:par:faire:
pour indiquer
dans le 3ème paramètre le pas de progression dans la boucle. Notre
code devient alors :
| figure | figure := DrGeoFigure nouveau afficherAxes. 1 à: 10 par: 0.5 faire: [:abscisse | figure point: abscisse @ 0]
Exemple 2.26: Boucle de 1 à 10 à demi-pas
Modifier l’Exemple 2.26 pour afficher les points sur l’axes des abscisses de -5 à 5, tous les 2 dixièmes
Exercice 2.30: Des pas de lilliputiens
Encore plus fort, comment faire une boucle sur des abscisses hétéroclites, non régulières cette fois-ci. Par exemple des abscisses comme {-2 ; 4 ; 1/3 ; 3,14 ; -1/5} ?
Et bien nous utilisons un autre message faire:
que nous
envoyons cette fois-ci à une collection. Dans Exemple 2.18 nous
avons fait connaissance avec une collection de coordonnées de points,
cette fois-ci nous utilisons une collection de valeurs hétéroclites.
| figure | figure := DrGeoFigure nouveau afficherAxes. {-2 . 4 . 1/3 . 3.14 . -1/5} faire: [:abscisse | figure point: abscisse @ 0]
Exemple 2.27: Une boucle sur des valeurs en vrac
A l’aide d’une boucle sur une collection de nombres, placer les points de l’axe des ordonnées {-1 ; 5,2 ; -3,14 ; 2,6}
Exercice 2.31: Nuage de points
Lorsque nous plaçons les points, il serait judicieux de nommer les points avec leur abscisse.
Modifier l’Exemple 2.27 afin que les points aient comme nom leur abscisse. Indice : envoyer le message
nommer:
à chaque point créé.
Exercice 2.32: Points nommés avec leur abscisse
Une collection peut contenir n’importe quelle sorte d’objet : des valeurs ou des coordonnées de point comme déjà vu précédemment, et bien d’autres. Il est aussi possible de faire une boucle sur une collection hétéroclite de nombres – entiers, décimaux, fractionnaires.
À l’aide d’une boucle
faire:
sur une collection, placer les points de coordonnées (1;1), (-1;1), (3;-1) et (2/3;-1/2)
Exercice 2.33: Points en vrac
Une chose intéressante à faire est de placer sur une droite les points dont les abscisses sont des nombres pairs, c’est à dire divisible par deux. Par exemple afficher les points dont les abscisses entre 1 et 100 sont des nombres pairs.
Pour cela nous devons tester si les abscisses sont des nombres pairs. Cela s’appelle tester si une condition est vraie ou fausse, c’est fondamental dans l’écriture d’un programme informatique. Voici l’exemple complet. Ne pas hésiter à grossir dans la figure pour mieux voir :
| figure | figure := DrGeoFigure nouveau afficherAxes. figure échelle: 5. 1 à: 100 faire: [:abscisse | abscisse pair siVrai: [figure point: abscisse @ 0] ]
Exemple 2.28: Abscisse pair
Nous introduisons ici un nouveau message à mot clé siVrai:
. Il
fonctionne de cette façon :
(condition) siVrai: [bloc de code à exécuter si condition vraie] |
Le code de notre (condition) est ici abscisse pair
. Le message
unaire pair
est envoyé à un nombre et ce dernier nous répond
par un objet "vrai" ou "faux" (true
ou false
en anglais)
selon que le nombre est pair ou non. Lorsque la condition est vraie
alors le bloc en paramètre du message siVrai:
est exécuté et le
point est créé. Sinon il ne se passe rien et la boucle reprend avec la
valeur suivante de l’abscisse.
Il existe de nombreux messages pour tester des conditions. En
voici quelques uns à envoyer à un nombre : impair
,
estPremier
, estEntier
, estDecimal
,
positif
, strictementPositif
.
Tester chacun des messages ci-dessus en l’envoyant aux nombres 0 ; 1 ; 2 ; -5 ; 3,4. Pour afficher le résultat de chaque test, lancer le code avec la commande "Print it" du menu de l’espace de travail ou le raccourci clavier Ctrl-p.
Exercice 2.34: Conditions sur nombre
Afficher des nombres pairs n’est pas très intéressant, mais finalement avec peu de modifications nous pouvons afficher les nombres premiers.
Modifier l’Exemple 2.28 afin d’afficher uniquement les nombres dont l’abscisse est un nombre premier. Nommer les points avec leur abscisse.
Exercice 2.35: Nombres premiers