Misez P'tit, Optimisez - N°33 (angles & côtés d'un triangle)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par zpalm »

@Marge: pour aligner les colonnes je prépare le code sous Notepad.

Voici ma solution sur HP-15C. Ce n’est pas très beau ni très lisible… j’ai essayé de tout faire dans la pile en mode complexe. Il faudrait voir si en utilisant les matrices on peut faire mieux.
Limitation : sur la 15C, l’utilisation du mode complexe impose d’avoir les angles en radians pour les fonctions trigonométriques. Le mode radian est donc forcé au début du programme.

Taille: 126 octets pris dans la mémoire de la 15C: 49 octets pour le programme + 77 octets pour 11 registres (6 registres pour le stockage des résultats + 5 registres pour la partie imaginaire de la pile).

Code : Tout sélectionner

                 X        Y        Z       T
01 LBL A         C        B        A
02 RAD
03 ENTER         C        C        B       A
04 RUP           A        C        C       B
05 GSB 0        (b ac°)   C        B       A
06 STO 2 => stockage de b
07 RDN           C        B        A      (b ac°)
08 X<>Y          B        C        A      (b ac°)
09 GSB 0        (a bc°)   A       (b ac°)  B
10 STO 1 => stockage de a
11 X<>Y          A       (a bc°)  (b ac°)  B
12 RUP           B        A       (a bc°) (b ac°)
13 GSB 0        (c ba°)  (b ac°)  (a bc°)  A
14 STO 3 => stockage de c
15 ENTER        (c ba°)  (c ba°)  (b ac°) (a bc°)
16 RDN          (c ba°)  (a bc°)  (b ac°) (c ba°)
17 X<>Y         (a bc°)  (c ba°)  (b ac°) (c ba°)
18 GSB 1        (b° 0)   (b ac°)  (c ba°) (a bc°)
19 STO 5 => stockage de (CBA)
20 RDN          (b ac°)  (c ba°)  (a bc°) (b° 0)
21 X<>Y         (c ba°)  (b ac°)  (a bc°) (b° 0)
22 RDN          (b ac°)  (a bc°)  (b° 0)  (c ba°)  
23 GSB 1        (c° 0)   (b° 0)   (c ba°) (b ac°)  
24 STO 6 => stockage de (ACB)
25 RDN          (b° 0)   (c ba°)  (b ac°) (c° 0)   
26 RDN          (c ba°)  (b ac°)  (c° 0)  (b° 0)   
27 PI           PI       (c ba°)  (b ac°) (c° 0)
28 Re<>Im       (0 PI)   (c ba°)  (b ac°) (c° 0)
29 +            (c ab°)  (b ac°)  (c° 0)  (c° 0)
30 GSB 1        (a° 0)   (c° 0)   (c° 0)  (c ab°)    
31 STO 4 => stockage de (ACB)
32 CF 8
33 RTN

34 LBL 0         A        C        C       B
35 -             C-A      C        B       B
36 LASTx         A        C-A      C       B
37 RDN           C-A      C        B       A
38 ->P          (b ac°)   C        B       A
39 RTN

40 LBL 1        (a bc°)  (c ba°)  (c ba°) (b ac°)
41 -            (c-a b°) (c ba°)  (b ac°)
42 LASTx        (a bc°)  (c-a b°) (c ba°) (b ac°)
43 RDN          (c-a b°) (c ba°)  (b ac°) (a bc°)
44 CLx          (0 b°)   (c ba°)  (b ac°) (a bc°)
45 Re<>Im       (b° 0)   (c ba°)  (b ac°) (a bc°)
46 COS
47 ACOS         (b° 0)   (c ba°)  (b ac°) (a bc°)
48 RTN
 
On entre les coordonnées sous forme complexe, par exemple si A=(9,5), B=(5,7) et C=(2,4) on tape :
9 [ENTER] 5 [f]
5 [ENTER] 7 [f]
2 [ENTER] 4 [f]

Puis [GSB] [A], ou directement [A] en mode User.

Les résultats sont stockés dans les registres 1 à 6 :

RCL 1: a= 4.2426
RCL 2: b= 7.0711
RCL 3: c= 4.4721
RCL 4: (BÂC)= 0.6055
RCL 5: (ABC)= 1.8925
RCL 6: (BCA)= 0.6435

Ca marche pour un angle plat : si A=(1,1), B=(1,3) et C= (1,7) on obtient :
a= 4 - (BÂC)= 0
b= 6 - (ABC)= 3.1416 (Pi)
c= 2 - (BCA)= 0

A la fin du programme le CF 8 désactive le mode complexe et libère les 5 registres de la partie imaginaire de la pile. Ces registres peuvent être réutilisés ultérieurement si besoin.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

Joli coup, zpalm ! Où les complexes simplifient les choses - en termes d'efficacité.

Je continue mon programme dans la soirée, n'y touchez pas ! :wink:
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Hobiecat »

Bravo pour cette version 15c et pour la "beauté" d'avoir tout fait sur la pile complexe : sur les machines qui n'ont pas d'adressage direct des registres de piles à la mode 41 ou 34S, c'est toujours un petit exploit !
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par babaorhum »

Je dirais même plus, très belle versplam Zion!

L'heure d'un p'tit bilan Marge ?

(A moins que tu arrives a paufiner ta version HP29C que nous attendons !)

Merci à toi et hobiecat pour les consiels d'affichage du code , j'essayerai au prochain coup !

Bon WE à tous
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

Voici ma dernière mouture ; j'ai supprimé le sous-programme de remise à 6 du compteur (et ses appels), condensé les opérations sur les hypoténuses et placé le sous-programme de calcul d'angle à la fin.
Le résultat est dans le bac : R1=b R2=BETA R3=a R4=ALPHA R5=c R6=GAMMA

Hypothèse basse : 69 pas * 1 octet + 7 mémoires * 7 octets = 118 octets ;
Hypothèse haute : 65 * 1 octet + 4 * 2 octets + 7 mémoires * 8 octets = 129 octets.

Comment calcule-t-on cela ? Il me semble que sur la 41 on compte 8 octets par registre et deux octets pour les opérations combinées, non ?

J'ai préparé mon code sur le bloc-note, avec des espaces. Il y a encore trop de commentaires... mais ça s'améliore.

Code : Tout sélectionner

PAS     INSTRUCTION             X               Y               Z              T               Last x          
01      6                       6
02      STO 0                                                                                                   R0 = 6
03      *LBL 1*                 6
Entrées A(x,y) B(x,y) C(x,y) obligatoires (entrées dans la pile ; ex.: A(5,5) nécessite de presser deux fois 5)
04      R/S
05      STO i                                                                                                                  
06      DSZ
R0=0, R1=Cy, R2=Cx, R3=By, R4=Bx, R5=Ay, 6=Ax
07      GTO 1                   Cy              Cx              By              Bx
Soustractions des abscisses et des ordonnées
08      STO - 3                                                                                                 R3=By-Cy        
09      Rd                      Cx              By              Bx              Cy                                            
10      STO - 4	                                                                                                R4=Bx-Cx
11      Rd                      By              Bx              Cy              Cx
12      RCL 5	                Ay              By              Bx              Cy
13      STO - 1                                                                                                 R1=Cy-Ay
14      RCL 6                   Ax              Ay              By              Bx
15      STO - 2                                                                                                 R2=Cx-Ax
16      Rd                      Ay              By              Bx              Ax				
17      -                       By-Ay           Bx              Ax              Ax              Ay
18      STO 5                                                                                                   R5=By-Ay
19      Rd                      Bx              Ax              Ax              By-Ay
20      -                       Ax-Bx           Ax              By-Ay           By-Ay           Bx
21      STO 6                                                                                                   R6=Ax-Bx
{on ne se soucie guère de l'ordre des soustractions puisque ces segments seront élevés au carré}
22      6                       6               Ax-Bx           Ax              By-Ay           Bx                               
23      STO 0                                                                                                   R0=6
Application du théorème de Pythagore 
24      *LBL2 *
25      RCL i
26      x²
27      DSZ
28      RCL i
29      x²
30      +
31      SQR                                                                                                    
32      STO i                                                                                                   
33      DSZ
Au terme de 3 boucles : R5=c R3=a R1=b {on n'y peut rien, c'est comme ça !) et la pile se présente comme suit...		
34      GTO 2                   b               a               c               c				
35      GSB 9
On profite immédiatement de la pile...
36      STO 4                                                                                                   R4=ALPHA
37      RCL 3                   a
38      RCL 1                   b               a
39      RCL 5                   c               b               a
40      GSB 9			
41      STO 2                                                                                                   R2=BETA
42      RCL 1                   b
43      RCL 5                   c               b
44      RCL 3                   a               c               b
45      GSB 9
46      STO 6                                                                                                   R6=GAMMA
47      R/S                                                                                                     FIN DU PROGRAMME
SOUS-PGM de loi des COSINUS
48      *LBL 9*
Exemple de pile avec les éléments d'ALPHA                                                                                                
49      ENTER                   b               b               a               c                               
50      x²                      b²              b               a               c
51      Rd                      b               a               c               b²
52      x<>y                    a               b               c               b²
53      x²                      a²              b               c               b²
54      Rd                      b               c               b²              a²
55      x<>y                    c               b               b²              a²
56      *                       bc              b²              a²              a²              c
57      Last x                  c               bc              b²              a²
58      x²                      c²              bc              b²              a²              c
59      x<>y                    bc              c²              b²              a²
60      1/x                     1/bc            c²              b²              a²              bc
61      Rd                      c²              b²              a²              1/bc
62      +                       b²+c²           a²              1/bc            1/bc            c²
63      x<>y                    a²              b²+c²           1/bc            1/bc
64      -                       b²+c²-a²	     1/bc	     	 1/bc            1/bc            a²
65      *                       (b²+c²-a²)/bc	1/bc		      1/bc            1/bc            b²+c²-a²  
66      2                       2               (b²+c²-a²)/bc   1/bc            1/bc
67      /                       (b²+c²-a²)/2bc  1/bc            1/bc            1/bc            2
68      ACOS               ACOS[(b²+c²-a²)/2bc] 1/bc            1/bc            1/bc            (b²+c²-a²)/2bc
69      RTN
J'ai aussi corrigé la formule des COS dans un de mes premiers messages, elle était fausse :mrgreen: : du coup j'ai pas mal ramé pour mettre au point ce deuxième programme ! :roll:

Dès que j'aurai sorti mon 1403 pour compter les octets du PGM de C.Ret, je publierai les résultats. Bon week-end !

PS: on doit pouvoir faire mieux avec les transformations de rectangulaires en polaires.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par zpalm »

On peut gagner 4 pas en optimisant le sous-programme de la loi des cosinus:

Code : Tout sélectionner

48      *LBL 9*
Exemple de pile avec les éléments d'ALPHA                                                                                               
49      ENTER                   b               b               a               c                               
50      Rup                     c               b               b               a
51      *                       bc              b               a               a               c
52      Last x                  c               bc              b               a
53      x²                      c²              bc              b               a
54      Rup                     a               c²              bc              b
55      x²                      a²              c²              bc              b
56      Rup                     b               a²              c²              bc
57      x²                      b²              a²              c²              bc
58      -                       a²-b²           c²              bc
59      -                       c²-a²+b²        bc
60      x<>y                    bc              b²+c²-a²
61      2                       2               bc              b²+c²-a²
62      *                       2bc             b²+c²-a²
63      /                       (b²+c²-a²)/2bc  
64      ACOS               ACOS[(b²+c²-a²)/2bc] 
65      RTN
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

zpalm a écrit :On peut gagner 4 pas en optimisant le sous-programme de la loi des cosinus:

Code : Tout sélectionner

48      *LBL 9*
Exemple de pile avec les éléments d'ALPHA                                                                                               
49      ENTER                   b               b               a               c                               
50      Rup                     c               b               b               a
51      *                       bc              b               a               a               c
52      Last x                  c               bc              b               a
53      x²                      c²              bc              b               a
54      Rup                     a               c²              bc              b
55      x²                      a²              c²              bc              b
56      Rup                     b               a²              c²              bc
57      x²                      b²              a²              c²              bc
58      -                       a²-b²           c²              bc
59      -                       c²-a²+b²        bc
60      x<>y                    bc              b²+c²-a²
61      2                       2               bc              b²+c²-a²
62      *                       2bc             b²+c²-a²
63      /                       (b²+c²-a²)/2bc  
64      ACOS               ACOS[(b²+c²-a²)/2bc] 
65      RTN
Non, désolé, zpalm.

La HP-29c n'a pas de Rup. Cela peut fonctionner avec une HP-67 en revanche :D
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par zpalm »

J'avais oublié ... :oops:

Sans roll-up on peut qd même gagner 2 pas:

Code : Tout sélectionner

48      *LBL 9*
Exemple de pile avec les éléments d'ALPHA                                                                                               
49      x²                      b²              a               c
50      Last x                  b               b²              a               c
51      Rd                      b²              a               c               b
52      Rd                      a               c               b               b²
53      x²                      a²              c               b               b²
54      Rd                      c               b               b²              a²
55      *                       bc              b²              a²              a²              c
56      Last x                  c               bc              b²              a²
57      x²                      c²              bc              b²              a²
58      Rd                      bc              b²              a²              c²
59      Rd                      b²              a²              c²              bc
60      -                       a²-b²           c²              bc
61      -                       c²-a²+b²        bc
62      x<>y                    bc              b²+c²-a²
63      2                       2               bc              b²+c²-a²
64      *                       2bc             b²+c²-a²
65      /                       (b²+c²-a²)/2bc 
66      ACOS               ACOS[(b²+c²-a²)/2bc]
67      RTN
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

D'accord, d'accord. :D

J'étais déjà assez content que ça fonctionne, j'y ai passé beaucoup de temps. :|
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par zpalm »

Oui ta solution est très bien avec une bonne utilisation des registres et de la pile. Mais comme on est dans un MPO, optimisons :wink:
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Hobiecat »

Marge a écrit :J'étais déjà assez content que ça fonctionne, j'y ai passé beaucoup de temps. :|
zpalm a écrit :Oui ta solution est très bien avec une bonne utilisation des registres et de la pile. Mais comme on est dans un MPO, optimisons :wink:
Je ne sais pas si c'est pareil pour vous, mais quand j'ai passé beaucoup de temps sur un programme, il arrive un moment où je ne "vois" plus les améliorations possibles : il faut alors que je le reprenne à froid plus tard, ou si c'est un MPO que quelqu'un d'autre s'en charge ! :wink:
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

Bonjour, Hobiecat, bonjour à tous.

C'est assez juste. Selon moi on peut détailler trois causes :

- l'énergie dépensée à réfléchir à la manière d'aborder le problème n'est plus suffisante pour optimiser les détails ;
- l'envie, la volonté manque : "ce n'est plus amusant."
- l'âge avancé du capitaine ; je n'en dirai pas davantage de peur d'effrayer les jeunes.

Cela dit, je me relance tout à l'heure dans une version polaire ! (pas eu le temps ce matin, je défrichais le potager).

@ +
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

Bonsoir,

je rentre bredouille de mon expédition polaire : rien de meilleur (sur HP-29c) que ce qui a déjà été donné.

Juste le temps de sortir mon 1403, et je fais le bilan (bon, peut-être demain soir, hein, j'ai les gosses à coucher). @+
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par C.Ret »

Bien incapable de produire un code aussi subtile et asticieux que celui que zpalm a proposé pour HP-15C (j'ai veinement tenté de le reproduire en ajoutant la stockage dans une matrice - mais en pas aussi bien)

incapable de produire quelque chose d'efficace sur HP25/29C, je me suis malgré tout essayé en HP-41C.

Lorsque le programme le demande (PROMPT), il faut entrer les coordonnées (x,y) du point suivant par la séquence x [ENTER^] y [R/S]. Le programme se déroule et affiche l'angle en C (en °).

Les registres R01 R02 et R03 contiennent alors respectivement les longueurs de cotés a,b et c.
Les registre R06 R07 et R08 contiennent alors respectivement les angles aux sommets A,B et C.

Le registre R00 est utilisé (je n'ai pas réussi à ne pas utiliser cette mémoire).

Code : Tout sélectionner

001 LBL "LATRI        021 ST- Z         041 STO 02
002 -1                022 RDN           042 RDN
003 ACOS              023 ST- Z         043 RCL 08
004 STO 06            024 RDN           044 XEQ 09
005 "ENTER x,y"       025 X<>Y          045 STO 08
006 PROMPT            026 R-P           046 ST- 06
007 STO 02            027 STO 01        047 RTN
008 X<>Y              028 RDN           048 LBL 09
009 STO 00            029 STO 08        049 X<>Y
010 PROMPT            030 RCL 07        050 -
011 ST- T             031 XEQ 09        051 SIN
012 RDN               032 STO 07        052 ABS
013 ST- Y             033 ST- 06        053 ASIN
014 RDN               034 RDN           054 END
015 R-P               035 RCL 02        
016 STO 03            036 -        
017 RDN               037 X<>Y        
018 STO 07            038 RCL 00        
019 RDN               039 -        
020 PROMPT            040 R-P        
EDIT : En relisant ce post, jeme suis rendu compte que je pouvais n'utiliser que les registres R01 à R06, le registre R00 n'est pas indispensable, au prix cependant de quelqeus pas de programmes supplèmentaires:

Code : Tout sélectionner

001 LBL "LATRI        021 RDN              041 STO 08
002 "ENTER x,y"       022 X<>Y             042 lastX
003 PROMPT            023 R-P              043 X<>Y
004 STO 02            024 STO 01           044 RCL 07
005 X<>Y              025 RDN              045 +
006 STO 06            026 STO 08           046 -
007 PROMPT            027 RCL 07           047 STO 06
008 ST- T             028 XEQ 09           048 RTN
009 RDN               029 STO 07                        
010 ST- Y             030 RDN                        
011 RDN               031 RCL 02           049 LBL 09
012 R-P               032 -                050 X<>Y
013 STO 03            033 X<>Y             051 -
014 RDN               034 RCL 06           052 -1
015 STO 07            035 -                053 ACOS
016 RDN               036 R-P              054 MOD
017 PROMPT            037 STO 02           055 END
018 ST- Z             038 RDN                        
019 RDN               039 RCL 08                        
020 ST- Z             040 XEQ 09                        


R01:  a     R02:  b     R03:  c     Les longueurs des cotés opposés aux somets A, B et C
R06: ^A°    R07: ^B°    R08: ^C°    Les angles aux sommets A, B et C.

On notera l'utilisation de R-P pour calculer distances et (demi-)angles. Le calcul des angles se fait en deux fois, une première fois la racine est mémorisée, puis le complément est "retiré" grâce au sous-programme XEQ 09 afin d'obtenir un angle entre 0 et 180°.
L'angle au sommet A est calculé par la formule des angles complémentaires.
Les registre R02 et R06 servent temporairemetn à mémoriser les coordonnées (xa,ya) du premier sommet avant de finalement servir à mémoriser la longueur du coté opposé à B et l'angle au sommet A.

En plus, -1 ACOS MOD est plus efficace pour idiquer de la bonne façon les angles en cas de triangle obtus ou pointus.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°33 (angles & côtés d'un trian

Message par Marge »

Formidable, C.Ret ! c'est exactement ce que je ne suis pas parvenu à faire hier ! :mrgreen:

Il faudrait que j'essaie une transcription vers HP-29c. :D Cela dit, sans les opérations directement sur la pile, je doute que le compte d'octets soit favorable à la 29 en comparaison de la combinaison Pythagore/Loi des COS.

Bon, mais comment on compte les octets, là ? Il y a des instructions combinées, combien donne ton CAT 1 ?

Et les registres, c'est 7 ou 8 octets ?

@+
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Répondre

Retourner vers « Tous les Pockets »