« Programmation objet et géométrie/SmallTalk par l'exemple » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 55 :
==Fractions==
 
 
===Opérations===
===Propriétés===
 
====Simplification====
 
Pour simplifier une fraction, SmallTalk utilise trois variables, la première pour le pgcd du numérateur et du dénominateur, la seconde pour le quotient du numérateur par le pgcd et la troisième, pour le quotient du dénominateur par le pgcd. L'algorithme renvoie 0 si la fraction est nulle, la fraction avec les nouveaux numérateur et dénominateur sinon:
 
<source lang="smalltalk">
reduced
| t1 t2 t3 |
numerator = 0
ifTrue: [^ 0].
t1 := numerator gcd: denominator.
t2 := numerator // t1.
t3 := denominator // t1.
t3 = 1
ifTrue: [^ t2].
^ Fraction numerator: t2 denominator: t3
</source>
 
En bref, pour simplifier une fraction, on divise son numérateur et son dénominateur par leur pgcd.
 
====Inverse====
 
Si la fraction est l'inverse d'un entier, son inverse est cet entier. Sinon on échange les rôles du numérateur et du dénominateur:
 
<source lang="smalltalk">
reciprocal
numerator abs = 1
ifTrue: [^ denominator * numerator].
^ self class numerator: denominator denominator: numerator
</source>