Page 1 of 1

Fraction

Unread postPosted: 03 May 2009, 13:57
by menthor
Bonjour,

Puisque la fonction Frac ne fonctionne que dans le run ou dans les programmes, existe il un moyen de mettre un résultat en fraction dans le draw par exemple?
Et si la calculatrice est incapable de faire cette opération existe t il ou peut on créer un programme qui mettrait un résultat en fraction?

Re: Fraction

Unread postPosted: 03 May 2009, 17:47
by tama
Yo,
il n'y a pas de fonction toute faite pour ça, en revanche tu peux facilement extraire le dénominateur et le numérateur, puis mettre sous forme irréductible avec le PGCD. Bien sûr, ce sera une approximation (surtout pour des irrationnels comme PI, racine(2) ou autres ...) mais ça marche dans la plupart des cas, un truc du genre :
Code: Select all
Input "NOMBRE?",N
0-D //compteur du nombre de décimales
While fPart(N  //tant que N n'est pas un entier ... (!= c'est le signe "différent de")
D+1-D  //1 décimale de plus ! :)
10N-N  //multiplie N par 10
End
//La fraction est maintenant de la forme P/10^D, on la rend irréductible en prenant le PGCD
gcd(N,10^D-G //G est le PGCD de N et de 10^D
N/G-N
10^D/G-D //rend la fraction irréductible
//N contient maintenant le numérateur et D le dénominateur
Disp {N,D //affiche le résultat (adapter selon ce que tu veux faire après...)


J'ai utilisé quelques techniques d'optimisation, si tu veux plus de détails, demande ;)

Re: Fraction

Unread postPosted: 03 May 2009, 17:54
by ced78fr
Hélas pas directement ma connaissance

Faut que :

1) tu sépares le numérateur de le dénominateur dans deux variables séparées a et b

2) tu calcule dans une varaible c la longueur de ton trait d fraction grâce à une formule avec la fonction logarithmique log partie entière E :

Code: Select all
c = max ( E(log(A+1)) , E(log(B+1)) ) *  cste
Avec cste = le nombre de pixel de la lettre la plus grosse


3) Tu calcule à partir d'où il faut poster le résultat par rapport à la ou commence ton trait de fraction (position que je noterai ici d) :

Code: Select all
Pour le numérateur, e = d + (c-a)/2
Pour le dénominateur, f= d + (c-b)/2


4) Tu affiches tout ceci l'un en dessous de l'autre :)

J'espère que je me suis pas gouré dans un des calculs :D
Alors ça fonctionne ? Forcément que oui car je l'ai fait pour un des programmes de mon big pack...

Re: Fraction

Unread postPosted: 03 May 2009, 17:54
by ced78fr
doubler par tama et sa méthode :)

Re: Fraction

Unread postPosted: 03 May 2009, 19:22
by critor
Le moteur de calcul exact AutoCalc par exemple fait en interne ce que tu demandes.


Il contient un sous-programme qui à partir de la dernière réponse numérique, : construire des chaînes de caractères affichables avec des fractions, racines carrées et bien d'autres choses...

Re: Fraction

Unread postPosted: 03 May 2009, 21:01
by tama
Xywez > ça marche pas pour les nombres négatifs :p, mais bon en adaptant un peu on peut combiner le tout et faire un joli truc :)

Re: Fraction

Unread postPosted: 03 May 2009, 22:24
by ced78fr
tama --> oui biensûr après fait optimiser tout ceci

critor2000 -- tien jamais essayer ce prog, faut à tout prix que je l'essaye, la description à l'air bien !!

menthor -- alors t'as l'embara du choix maintenant !

Re: Fraction

Unread postPosted: 05 May 2009, 17:19
by menthor
Merci beaucoup pour vos réponses !

Je pense que je vais aller faire un tour du coté d'autocalc