"Dieu fit le nombre entier, le reste est l’œuvre de l'Homme", disait Leopold Kronecker. Le début du reste ce fut incontestablement les fractions, définies comme quotients d'entiers, et pratiquées bien avant les nombres décimaux.
=Obtention d'une fraction=
Pour entrer la fraction formula_1, on peut entrer
a=Rational(24,10)
puts(a)
qui la simplifie automatiquement. Alternativement, on peut charger "mathn", ce après quoi le symbole de division donne des fractions au lieu de la division euclidienne:
require 'mathn'
a=24/10
puts(a)
On peut également obtenir une fraction à partir d'un réel, avec la méthode "to_r" ("r" comme "rational"). Mais la fraction n'est correcte que si son dénominateur est une puissance de 2:
a=1.2
b=a.to_r
puts(b)
Certes, formula_2 mais tout de même...
=Propriétés d'une fraction=
Numérateur.
Pour avoir le numérateur d'une fraction "f", on entre "f.numerator":
a=Rational(24,10)
puts(a.numerator)
Dénominateur.
Pour avoir le dénominateur d'une fraction "f", on entre "f.denominator":
a=Rational(24,10)
puts(a.denominator)
Valeur approchée.
Pour avoir la valeur approchée d'une fraction, on convertit celle-ci en un réel:
a=Rational(24,10)
puts(a.to_f)
=Opérations sur les fractions=
Opérations unaires.
Opposé.
L'opposé d'un nombre, en particulier d'une fraction, s'obtient en le faisant précéder d'un signe "-":
a=Rational(2,-3)
puts(-a)
Inverse.
Pour obtenir l'inverse d'une fraction, on divise 1 par celle-ci:
a=Rational(5,4)
puts(1/a)
Addition.
Pour additionner deux fractions, on met le signe "+" entre elles, et le résultat est une fraction (même si celle-ci est entière, comme par exemple formula_3):
a=Rational(34,21)
b=Rational(21,13)
puts(a+b)
Soustraction.
La différence de deux fractions est une fraction :
a=Rational(34,21)
b=Rational(21,13)
puts(a-b)
Multiplication.
Le produit de deux fractions est une fraction :
a=Rational(34,21)
b=Rational(21,13)
puts(a*b)
Division.
Le quotient de deux fractions (à condition que la deuxième ne soit pas nulle) est une fraction :
a=Rational(34,21)
b=Rational(21,13)
puts(a/b)
Et même le reste euclidien est défini entre fractions, et le résultat est encore une fraction :
a=Rational(32,7)
b=Rational(7,2)
puts(a%b)
Exemple.
On voudrait savoir quel est le rapport des longueurs des tuyaux d'orgue :
Ces rapports sont affichés par "Ruby" sous forme de fractions, même le premier d'entre eux qui est entier (ce qui ne sautait pas aux yeux !) :
gn=5+Rational(1,3)
n=2+Rational(2,3)
gt=3+Rational(1,5)
puts(gn/n)
puts(gn/gt)
Puissance.
Une puissance entière (même négative) d'une fraction) est encore une fraction :
a=Rational(3,2)
puts(a**12)
puts(a**(-2))
Mais si l'exposant est décimal, même si le résultat est une fraction, "Ruby" le considère comme un réel :
a=Rational(9,4)
b=a**0.5
puts(b)
puts(b.to_r)
=Algorithmes=
Réduite de Farey.
Pour calculer la "médiane" (ou réduite) de Farey de deux fractions "a" et "b", on définit une fonction "Ruby" de deux variables, qui s'appelle "Farey" :
def Farey(a,b)
 n=a.numerator+b.numerator
 d=a.denominator+b.denominator
 return Rational(n,d)
end
a=Rational(3,4)
b=Rational(1,13)
puts(Farey(a,b))
Fractions égyptiennes.
Pour écrire une fraction à l'égyptienne (comme somme de fractions de numérateur 1), on applique l'algorithme de Fibonacci :
def egypt(f)
 e=f.to_i
 f-=e
 liste=[e]
 begin
 e=Rational(1,(1/f).to_i+1)
 f-=e
 liste.push(e)
 end while f.numerator>1
 liste.push(f)
 return liste
end
require 'mathn'
a=21/13
puts(egypt(a))
On peut résumer ce script "Ruby" aux étapes suivantes :

Pôles d'éco-citoyenneté/Les principaux Pôles d'éco-citoyenneté dans le Nord-Pas-de-Calais/Les jardins Mosaïc