S.E.M-973 le 16/04/2012 à 02:25
Salut à tous,
Je vous présente mon premier algo. Il vous donne la mesure principale en pi radian d'un angle si X<(-Pi)ou X> Pi sous la forme:A (mesure principale)*Pi+k*2Pi.
Code
ClrHome
Prompt X
0->K
If X>= Pi
Then
While X>Pi
X-2*Pi->X
K+1->K
End
Goto 1
Else
While X<(-Pi)
X+2*Pi->X
K+1->K
End
Goto 1
Lbl 1
X/Pi->X
2*K->k
Disp "X="
Disp X>Frac
Disp "*Pi"
Disp "+"
Disp K
Disp "*Pi"
Ps:Je cherche toujours à l'améliorer donc n'hésiter pas à donner des suggestions.
linkakro le 16/04/2012 à 14:24
La difficulté vient lorsqu'on veut la mesure principale dans ]-pi,pi].
Par exemple 4Pi/3=2Pi-2Pi/3
Ce programme règle le problème.
Code
Prompt A
int(A/Pi/2 -> Q
A/Pi-2Q -> R
If R>1
Then
R-2 -> R
Q+1 -> Q
End
Disp "A=2*K*Pi+R*Pi
Disp "K=",Q,"R=",R>Frac
Remarque : il faut absoluement utiliser int en anglais ou partEnt en français.
Ceci est proche du programme original de ce sujet.
Code
Prompt X
X/Pi->C
1->B
If C<=-1
-1->B
0->A
While C>1 or C<=-1
A+B->A
C-2B->C
End
Disp "X=2*K*Pi+R*Pi
Disp "K=",A,"R=",C
S.E.M-973 le 08/05/2012 à 16:00
Bonjour à tous,
Désolé ça fait un petit moment que je ne me suis pas connecté mais je voudrais tous vous remercier!!!

.Par contre je penses qu'il y a une erreur sur le programme de sangohan38(peut être une erreur d'écriture) et c'est sans doute pour ça que les autres ont repris.Et je voudrais savoir aussi quelle méthode (en math) linkako a utilisé pour trouver la mesure principale.
linkakro le 08/05/2012 à 19:03
S.E.M-973 a écrit :
Par contre je penses qu'il y a une erreur sur le programme de sangohan38(peut être une erreur d'écriture) et c'est sans doute pour ça que les autres ont repris.
En effet le code de sangohan38 contient une erreur de calcul.
S.E.M-973 a écrit :
Et je voudrais savoir aussi quelle méthode (en math) linkako a utilisé pour trouver la mesure principale.
Les méthodes de décomposition sont très similaires.
Le but est d'effectuer une division pour séparer "2*Q*Pi" et "R*Pi".
Mais parler de division ne suffit pas car il y a plusieurs méthodes, qui ne donnent pas toujours la mesure principale mais une valeur à 2*Pi près.
J'expliquerai ci-après :
-la forme de la décomposition
-l'erreur de sangohan38
-comment gérer de manière fine les divisions
====================
ATTENTION : Les notations suivantes ne correspondent pas à celles de mon programme.
Code
Adoptons les notations suivantes :
X=P*2Pi
=(Q+A)*2Pi // ce que trouve en réalité sangohan38 avec (Q,A)
=Q*2*Pi+B*Pi // ce que nous cherchons avec (Q,B)
=P*2*Pi+R // ce que VOULAIT sangohan38
En réalité, sangohan38 affiche (P,A) quand il voulait (P,R).
Enfin il affiche ""X~~P*2*Pi+A""
ce qui est faux.
Nous pouvons aussi écrire
R=B*Pi=A*2*Pi
P=2*Q
Pour corriger le programme de sangohan38 sur ce point, il faut écrire
Code
ClrHome
Input "MESURE (RADIAN):",X
X/2/pi
Disp iPart(Ans),"*2Pi+"
Disp 2Pi*fPart(Ans>Frac //cette ligne a été corrigée avec un "2Pi" et ">Frac"
// "2Pi" est indispensable
// >Frac est un bonus pour afficher une fraction
//libre à vous d'utiliser un seul Disp, moi j'ai juste été plus clair avec deux
//Ce serait encore mieux d'afficher P*2Pi+B*Pi (vous savez maintenant le faire)
========
Pour se simplifier la vie plus tard, notons Y=X/Pi.
Code
Calculer le quotient :
iPart(Y/2) // tronqué
int(Y/2) // réduit à l'inférieur
Calculer le reste :
2*fPart(Y/2) // entre -2 et 2 // le quotient doit être iPart pour l'utiliser
Y-2*iPart(Y/2) // entre -2 et 2
Y-2*int(Y/2) // entre 0 et 2 (positif !)
Code
cas 1 : int et Y-2*Pi*int
cas 2 : iPart et Y-2*iPart
Je préciserai ci-après les cas particuliers, les cas communs ne seront pas réécrit dans les trois collonnes.
ex | cas1 | cas2 | objectif | le cas faux
4 = 2*2+0
3.5 = 1*2+1.5 = 1*2+1.5 = 2*2-0.5 |12
3 = 1*2+1
2.5 = 1*2+0.5
2 = 1*2+0
1.5 = 0*2+1.5 = 0*2+1.5 = 1*2-0.5 |12
1 = 0*2+1
0.5 = 0*2+0.5
0
-0.5 = -1*2+1.5 = 0*2-0.5 = 0*2-0.5 |1
-1 = -1*2+1 = 0*2-1 = -1*2+1 | 2
-1.5 = -1*2+0.5 = 0*2-1.5 = -1*2+0.5 | 2
-2 = -1*2+0
-2.5 = -2*2+1.5 = -1*2-.5 = -1*2-.5 |1
-3 = -2*2+1 = -1*2-1 = -2*2+1 | 2
-3.5 = -2*2+0.5 = -1*2-1.5 = -2*2+0.5 | 2
-4 = -2*2+0
Une division avec int est fausse uniquement lorsque son reste est suppérieur à 1.
Une division avec iPart est fausse bien plus souvent.
En tenant compte de cette remarque, il suffit de diminuer le reste et d'augmenter le quotient lorsque le reste par int est suppérieur à 1.