Poster un nouveau sujet Poster une réponse
mesure principale
Auteur Message
monsalbert
Invité
Posté le : Lun 04 Mar 2013, 19:55   Citer 

Bonsoir,

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.

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 04 Mar 2013, 20:26   Citer 

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.

Tu es bien parti mais méfie toi du bug de traduction des ti françaises concernant ent et partEnt
http://tout82.free.fr/forum/sujet.php?sujet=2317

Voici ma solution complète écrite sur le tas.

Code
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Mer 06 Mar 2013, 19:45   Citer 

Excuse Linka, mais je comprends pas le code. L'écriture est sophistiquée

int(X/2->K
......
K+(R>1->K
R-2(R>1->R je ne comprends pas ces lignes, où l'on va. Et ces parenthèses?

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 06 Mar 2013, 21:31   Citer 

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.
Code
           // si R>1   // sinon
K+(R>1->K  // K+1->K   // K->K
R-2(R>1->R // R-2->R   // R->R

Cela revient donc à :
Code
If R>1
Then
K+1->K
R-2->R
End



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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Jeu 07 Mar 2013, 15:33   Citer 

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..

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 07 Mar 2013, 16:31   Citer 

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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Lun 11 Mar 2013, 19:09   Citer 

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.

  Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink