Il y a deux idées:
1) Si le nombre n'a pas trop de décimales, tu le multiplies par la puissance de 10 adaptée. On a alors une fraction (X.10^k)/10^k. Avec un calcul de PGCD sur les entiers, on peut trouver la fraction réduite.
2) Si le nombre est 2,123123123123... avec une répetition périodique, alors adapte le programme suivant:
fonction (Nombre:real; Longueur:integer); var {à faire}; begin E:=1; D:=Nombre; for C:=1 to Longueur do begin Nombre:=Nombre*10; E:=E*10; end; //On aurait pu utiliser la fonction Power de l'unité Maths P:=PGCD(Nombre-D,E-1); Fraction:=(A-D)/(E-1); //avec division par le PGCD en haut et en bas end;
|