En trigo, on peut calculer la mesure principale d'un angle ( souvent ) à vue ou après un ou 2 essais. Il vaut mieux savoir la méthode par la calcul :
-Pi < 253Pi /12 +2kPi < Pi Pi =3.14
cas général ( j'enlève Pi pour simplifier )
-1 < N/D+ 2k < 1 donne (-1-N/d )1/2 < k < ( 1 +N/D )1/2
Dans le code on entre N et D et on a K !!! C'est la TI qui m'a remis en place!! Attention et si on a -N/D ? les résultats sont inversés
si N/D >0 on a : -11.04 < k < -10.04
si N/D < 0 on a : 10.04 < k < 11.04
Mon problème c'est sortir k ( nombre entier)
Est-il possible d'un intervalle de ce type d'extraire avec 1 instruction le SEUL entier qui s'y trouve ?...avec Ent( ?
Si oui mon code sera 2 fois moins long ( car j'ai dû faire deux parties N/D >0 et N/D < 0 ) et plus simple à expliquer.
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 04 Mar 2013, 20:26
Des programmes existent et j'ai déjà résolu le problème à plusieurs reprises par une autre méthode. Cela doit pouvoir se retrouver. EDIT: ta méthode est intéressante quand même.
Disp "A=Xpi=Rpi+2Kpi
Prompt X
int(X/2->K
X-2K->R // premier jet , R e [0;2[
K+(R>1->K
R-2(R>1->R // second jet , R e ]-1;1]
Disp "K:",K,"R:",R>Frac
Au premier jet : 0<=R<2
si 0<=R<=1, R est déjà principale
si 1<R<2 alors -1<R-2<0
D'autre part 2K+R=2(K+1)+R-2
Au second jet -1<R<=1 : la mesure R est principale
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 06 Mar 2013, 21:31
Les opérateurs de test =,>,< etc. génèrent 0 ou 1 qui correspondent respectivement à faux et vrai : ce sont des booléens.
Les parenthèses permettent d'incorporer le résultat du test dans les calculs.
En remplaçant le booléen par 1 et 0 dans cet exemple on distingue l'influence du test.
Int() est la version anglaise de partEnt() et génère l'entier inférieur ou égal.
Ainsi j'obtien le K inférieur à X/2.
Je déduit de cela le reste R qui vérifie X=2K+R
On aurait pu utiliser iPart() (version anglaise de ent() , la troncature) pour obtenir la même équation, mais avec un couple (K,R) quelquefois différent.
Dans tous les cas on peut trouver un R en dehors de ]-1;1].
On doit alors remplacer (K,R) par un (K',R') qui satisfasse les exigences.
Cela s'obtient avec (K+1,R-2) ou (K-1,R+2).
En effet X= 2K+R= 2K'+R' = 2(K+1)R-2 = 2(K-1)+R+2
Le problème de iPart() est qu'il donne un reste R<0 quand X<0 : on aura des R dans ]-2;2[, ce qui sépare l'étude en trois cas : R<=-1, 1<R et le complément.
Et la valeur absolue ne permet par de différencier l'exclusion de -1 et l'inclusion de 1.
Int() donne toujours le K du couple (K,R) avec R positif et K inférieur. Cela donne donc 0<=R<2.
Il suffit donc de tester si 1<R pour chercher un R' dans ]-1;1].
On utilise enfin (K+1,R-2) comme solution finale de la mesure principale si K,R ne convient pas.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Je vais decortiquer ta réponse.
D'accord pour les symboles.Mais je crois que ta rédaction mathématique n'est la même que la mienne. J'aimerais connaître ta procédure en dehors du code.
Mon code est strictement badé sur: -1 < N/D+ 2k < 1 donne (-1-N/d )1/2 < k < ( 1 +N/D )1/2 et je fait prendre l'entier qui s'y trouve.
Quoiqu'il en soit nos 2 codes fonctionnent ( j'ai fait le tiens sans y comprendre goutte!!!) mais les 2 font la même chose : il donnent 2 résultats! un juste un faux évidement. La TI Disp des choses qu'on ne lui demande pas !.???? surtout que mon code contient Si R>0.. et Si R<0..
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 07 Mar 2013, 16:31
Je n'avais pas compris ta détermination de K ni le problème de deux solutions.
Il semble que N/D soit un réel quelconque.
Alors il existe le couple {K,R} tel que N/D=2K+R et -1<R<=1 Cependant le K de cette formule et celui de ta formule sont opposés.
En effet j'ai : -1<N/D-2K<=1
(N/D-1)/2<=K<(N/D+1)/2
Malgré tout je ne trouve pas de solution simple pour ta méthode.
Si N/D est un multiple de 2, K=N/D=Int(N/D)
Si paire<N/D<impaire , K=Int(N/D)
Si N/D est un impair , K=N/D-1=Int(N/D)-1
Si impair<N/D=pair , K=Int(N/D)-1
Je ne suis même pas sûr de ces quatres lignes. EDIT : ah bah je retombe sur mon autre méthode...
Je pense aussi à Int((N/D+1)/2) qui est nécessairement un des deux entiers de l'intervalle.
====
Dans le mien, on saisit un angle réel X et le programme trouve à la fois la mesure principale R et le coefficient K associé à l'angle saisi X.
C'est une division euclidienne de l'angle par 2. Puis on adapte le couple {K,R} pour qu'il donne toujours le même angle mais que R soit la mesure principale si elle ne l'était pas encore.
De manière générale, X=2K+R=2Int(X/2)+R et 0<=R<2.
Donc on calcule K puis R.
Mais on veut un couple {K',R'} qui vérifie X=2K'+R' et -1<R'<=1
Donc on réécrit le couple lorsque R>1.
La réécriture du couple est simplement {K',R'}={K+1,R-2} car 2K+R=2(K+1)+R-2 et car 1<R<2 d'où -1<R-2<0.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Super, j'avais raison quand je trouvais ton code sophistiqué! Je ne m'attendais pas du tout à celà. J'étais dans la définition de la mesure principale entre - Pi et +Pi je n'arrivais pas à en sortir.
Ton code fait plaisir R et k à la fois! vraiment tu m'as ouvert les yeux.
Merci linka.