HP-48/49/50G : Quand le RPL rencontre APL

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

Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

Produit externe

Le produit externe sert à composer chacun des termes de l’opérande gauche avec chacun des termes de l’opérande droit par n’importe quelle fonction dyadique.

L’exemple classique est la table de multiplication de Pythagore :

Code : Tout sélectionner

1 2 3 ∘.× 1 2 3 4 5 	⍝ ∘ se prononce JOT
Output:
1 2 3  4  5
2 4 6  8 10
3 6 9 12 15

⍴ 1 2 3 ∘.× 1 2 3 4 5
Output: 3 5		⍝ 3 lignes et 5 colonnes
Chacune des valeurs du vecteur 1 2 3 est multipliée par chacune des valeurs du vecteur 1 2 3 4 5.

On peut obtenir un résultat analogue en RPL de plusieurs façons :

Code : Tout sélectionner

1: [ 1 2 3 ]      # Sous forme de matrice
2: { 1 2 3 4 5 }  # Sous forme de liste
×
1: {[1 2 3] [2 4 6] [3 6 9] [4 8 12] [5 10 15]}
Ou encore, en inversant matrice et liste :

Code : Tout sélectionner

1: { 1 2 3 }      # Sous forme de liste
2: [ 1 2 3 4 5 ]  # Sous forme de matrice
×
1: {[1 2 3 4 5] [2 4 6 8 10] [3 6 9 12 15]}
Cela fonctionne également avec la division d’une matrice par une liste (pas l’inverse) :

En APL :

Code : Tout sélectionner

1 2 3 4 5 ∘.÷ 1 2 3
Output:
1 0.5 0.3333333333
2 1   0.6666666667
3 1.5 1           
4 2   1.333333333 
5 2.5 1.666666667

En RPL :

1: [ 1 2 3 4 5]    # Matrice
2: { 1 2 3 }       # Liste
÷
1: {[1 2 3 4 5]
    [.5 1 1.5 2 2.5] 
    [.333 .666 1 1.333 1.666]
   }
Voici la version proposée par Norman Brenner pour le produit externe X ∘. Y où X et Y peuvent être des vecteurs ou des matrices. Nous appellerons PE. le produit externe :

Code : Tout sélectionner

« → x y f « y « x f EVAL » MAP » »
'PE. STO
Exemple avec la table de multiplication :

Code : Tout sélectionner

3: [ 1 2 3 ]          # ou { 1 2 3 }
2: [ 1 2 3 4 5 ]      # ou { 1 2 3 4 5 }
1: « × »
VAR PE.
1: ⌈ 1  2  3  4  5  ⌉
   | 2  4  6  8  10 |
   ⌊ 3  6  9  12 15 ⌋
Le principe : On prend un par un les éléments de y (ici y = [1 2 3 4 5]) et on multiplie la valeur par la matrice x (ici x = [1 2 3]). Ce qui permet d’obtenir les colonnes [1 2 3] puis [2 4 6] etc. Mais si l’on veut faire une table d’addition, le script proposé fera 1 + [1 2 3] ce qui va renvoyer une erreur. Par contre, avec les listes on peut faire 1 ADD {1 2 3} pour obtenir la liste {2 3 4} (le « + » étant réservé à la concaténation)

Table d’addition en utilisant des listes :

Code : Tout sélectionner

3: { 1 2 3 }
2: { 1 2 3 4 5 }
1: « ADD »
VAR PE.
1: {{2 3 4 5 6} {3 4 5 6 7} {4 5 6 7 8}}
On peut inventer des tables de Pythagore généralisées, par exemple la table des maximums :

Code : Tout sélectionner

5 4 8 ∘.⌈ 7 3 9 1
Output:
7 5 9 5
7 4 9 4
8 8 9 8
En RPL :

Code : Tout sélectionner

3: { 5 4 8 }
2: { 7 3 9 1 }
1: « MAX »
VAR PE.
1: {{7 5 9 5} {7 4 9 4} {8 8 9 8}}
La première ligne correspond aux max entre 5 et les valeurs 7 3 9 1
La seconde ligne aux max entre 4 et 7 3 9 1
Et la dernière ligne aux max entre 8 et 7 3 9 1

Exemple – Répartition des âges

On se donne une liste d’âges et une liste de répartitions, par exemple on veut savoir combien de personnes ont entre 10 et 15 ans, entre 15 ans et 40 ans et plus de 40 ans.

Code : Tout sélectionner

AGES ← 27 12 18 75 40 22 35 6	⍝ Les âges
TRAN ← 10 15 40			⍝ Tranches d'âges
TRAN ∘.< AGES			⍝ Matrice des comparaisons
1 1 1 1 1 1 1 0
1 0 1 1 1 1 1 0
0 0 0 1 0 0 0 0
CUM ← +/ TRAN ∘.< AGES		⍝ Cumul des lignes
7 6 1
7 personnes ont plus de 10 ans, 6 ont plus de 15 ans et 1 a plus de 40 ans. Pour obtenir le nombre de personnes par intervalle :

Code : Tout sélectionner

CUM - 1↓CUM,0   ⍝ Différence entre les termes
1 5 1
1 personne a entre 10 et 15 ans, 5 personnes entre 15 et 40 ans et 1 personne a plus de 40 ans. L’enfant de 6 ans a bien été éliminé de nos statistiques.

En RPL :

Code : Tout sélectionner

3 : { 10 15 40 }
2 : { 27 12 18 75 40 22 35 6 }
1: « < »
VAR PE.
1: {{1 1 1 1 1 1 1 0}
   {1 0 1 1 1 1 1 0}
   {0 0 0 1 0 0 0 0}}
1: « ∑LIST »
PGR LIST PROC DOLIST
1: { 7 6 1 }
La fonction △LIST transforme {x1, x2, … xn} en {x2-x1, … xn-xn-1}, or nous voulons {x1-x2, … xn-1 -xn, xn}. On va donc ajouter un 0 à la liste, utiliser △LIST et prendre la valeur absolue (on pourrait aussi inverser la liste, ajouter un 0 en première position puis △LIST et à nouveau inverser la liste…).

Code : Tout sélectionner

1: { 7 6 1 }
0 + △LIST ABS
1: {1 5 1}
Résumons cela sous la forme d’un programme STAT, en APL :

Code : Tout sélectionner

STAT ← {c - 1↓(c ← +/⍺ ∘.< ⍵),0}
TRAN STAT AGES
Output:
1 5 1
Et en RPL :

Code : Tout sélectionner

« « < » PE. « ∑LIST » DOLIST
  0 + △LIST ABS
»
'STA STO

3 : { 10 15 40 }
2 : { 27 12 18 75 40 22 35 6 }
VAR STAT
1: { 1 5 1 }
Avatar du membre
torgamm
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 282
Enregistré le : 26 déc. 2012 10:41
Localisation : 77 Sud

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par torgamm »

FLISZT a écrit : 19 mars 2022 15:10
C.Ret a écrit : 19 mars 2022 13:43 P.S.: J'aime bien les soucoupes qui tirent au rayon laser cela ma rappelle quelque jeu ancien. J'ai le nom sur le bout de la langue... retrouve plus :(
Space Invaders, peut-être… (?) :geek:
ou Galaga?
Utilisateur de pocket depuis 1979 (TI-57 puis 1981 FX-702P et 1982 PC-1500, encore et toujours ma machine de tous les jours
Ma petite collection Sharp Basic : PC-1212, -1261/62, -1350/60, -1475, -1500, -1600, -2500, -E500S, -G850V, IQ9000+CE101
Fondateur et éditeur de feu PocketPCFreeware.com (2001-2013)
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

Exercice – Années bissextiles
Définition (Wikipédia) : Pour être bissextile, une année doit dans tous les cas être divisible par 4 ; mais si c’est une année de centenaire (comme 1800, 1900, etc.), elle doit en complément être divisible par 400.
Voici une version en APL trouvée sur le site APLcart et légèrement modifiée pour ne faire apparaitre que les années :

Code : Tout sélectionner

BIS ← {(0 ≠.= 400 100 4 ∘.| ⍵) / ⍵}
BIS 1900 2000 1908 2022 2024
Output:
2000 1908 2024
On reconnait le produit externe ∘.|, le produit interne ≠.= et la compression logique /. Voici l’idée du programme :

400 100 4 ∘.| ⍵ : On cherche les restes des divisions des années par 400, 100 et 4. Ce qui fait une matrice de 3 lignes :

Code : Tout sélectionner

400 100 4 ∘.| 1900 2000 1908 2022 2024
Output:
300 0 308 22 24   ⍝ Restes des divisions par 400
  0 0   8 22 24   ⍝ Restes des divisions par 100
  0 0   0  2  0   ⍝ Restes des divisions par 4
0 ≠.= : Rappelez-vous de +.× qui signifie « somme des produits », ou « faire les produits puis réduire par la somme ». Ici on doit donc effectuer les tests 0 = « termes de la matrice » puis réduire par ≠… Essayons de comprendre :

Code : Tout sélectionner

0 = 400 100 4 ∘.| 1900 2000 1908 2022 2024
Output:
0 1 0 0 0
1 1 0 0 0
1 1 1 0 1
Un ″1″ dans cette nouvelle matrice indique que la division tombe juste.

Voici maintenant l’astuce utilisée : Si vous regardez les 8 cas a priori possibles pour une année donnée, à savoir être ou non divisible par 400 (noté DIV 400. plus loin), être ou non divisible par 100 et être ou non divisible par 4, certains cas sont impossibles (par exemple être divisible par 400 mais pas par 4, etc.). Il ne reste que 4 possibilités :

Code : Tout sélectionner

DIV 4.  DIV 100.  DIV 400.   BISSEXTILE ?
    F         F         F    NON
    V         F         F    OUI
    V         V         F    NON
    V         V         V    OUI
Effectuons maintenant les réductions de chacune des lignes en utilisant ≠ :

Code : Tout sélectionner

(F ≠ F) ≠ F <=> F ≠ F <=> F
(V ≠ F) ≠ F <=> V ≠ F <=> V
(V ≠ V) ≠ F <=> F ≠ F <=> F
(V ≠ V) ≠ V <=> F ≠ V <=> V
Donc le produit interne 0 ≠.= indiquera bien si l’année est bissextile ou pas ! Je vous laisse 3 exemples à méditer :

Code : Tout sélectionner

0 = 400 100 4 ∘.| 1900
Output: 0 1 1
≠/ 0 = 400 100 4 ∘.| 1900
Output: 0
0 = 400 100 4 ∘.| 2024
Output: 0 0 1
≠/ 0 = 400 100 4 ∘.| 2024
Output: 1
0 = 400 100 4 ∘.| 2022
Output: 0 0 0
≠/ 0 = 400 100 4 ∘.| 2022
Output: 0
Il peut aussi être intéressant de remarquer qu'avec les booléens X ≠ Y et équivalent à X XOR Y (OU exclusif)

Passons à la traduction en RPL, en remarquant que MOD fonctionne entre un nombre et une liste :

Code : Tout sélectionner

2: 2024
1: {4 100 400}
MTH REAL MOD
1: {0 24 24}
De plus, comme il n’y a que 3 termes pour la réduction, on peut écrire simplement ≠ ≠. Par exemple pour (V ≠ F) ≠ F :

Code : Tout sélectionner

3: 0     # FAUX
2: 0     # FAUX
1: 1     # VRAI
≠
2: 0     # FAUX
1: 1     # VRAI
≠
1: 1     # VRAI
Et le test 0 = ″Restes de divisions par 4, 100 et 400″ est simplement le NOT en RPL (si le reste est 0, NOT donnera 1 et si le reste n’est pas nul, NOT donnera 0). D’où cette version très courte fonctionnant avec une seule année en paramètre :

Code : Tout sélectionner

« { 4 100 400 } MOD NOT OBJ→ DROP ≠ ≠ »
'BIS STO
OBJ→ met les éléments de la liste sur la pile en ajoutant au niveau 1 la taille de la liste (que l’on supprime avec DROP).

Vérifions :

Code : Tout sélectionner

1900
VAR BIS
0            # 1900 n'est pas bissextile
2000
BIS
1            # Bissextile
2024
BIS
1            # Bissextile
2022
BIS
0            # Pas bissextile
Pour extraire les années bissextiles d’une liste, on peut par exemple faire :

Code : Tout sélectionner

« DUP « BIS » MAP SWAP IFT »
'BISL STO

1: { 1900 2000 1908 2022 2024 }
VAR BISL
{ 2000 1908 2024 }
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

Pour terminer l'exercice sur les années bissextiles, voici une version pour les TI qui devrait être facilement adaptable dans d'autres langages :
Les TI graphiques se débrouillent plutôt bien avec les listes
Les TI graphiques se débrouillent plutôt bien avec les listes
Biss.png (10.83 Kio) Vu 4604 fois
1900 n'est pas bissextile, 2000 l'est
1900 n'est pas bissextile, 2000 l'est
19002000.png (8.86 Kio) Vu 4604 fois
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par FLISZT »

Schraf a écrit : 20 mars 2022 09:52 Exercice – Années bissextiles
Définition (Wikipédia) : Pour être bissextile, une année doit dans tous les cas être divisible par 4 ; mais si c’est une année de centenaire (comme 1800, 1900, etc.), elle doit en complément être divisible par 400.
Oh… vieil exercice d'algo !
Je crois que c'est ce jour-là (ou peu avant sur un magazine ?? ) que j'ai appris la méthode pour déterminer à coup sûr si une année était bissextile.

Solution RPL très scolaire ou mode "fatigué du dimanche" (y'a fallu que je m'y reprenne à deux fois pour écrire à peu près en français) :

Code : Tout sélectionner

<< → an
	<<
		IF an 4 / FP 0 == THEN	
			IF an 100 / FP 0 == THEN
				IF an 400 / FP 0 == THEN "Oui"
				ELSE "Non"
				END
			ELSE "Oui"
			END
		ELSE "Non"
		END
	>>
>>
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

Exercice - Suite de Robinson
Suites de Robinson : suite mathématique dont chaque terme se détermine en comptant combien de fois chaque chiffre apparaît dans le terme précédent.
Je renvoie vers Misez p’tit, Optimisez – N°15 (le jour des fourmis) pour plus d’explications sur cette suite.

En APL :

Code : Tout sélectionner

ROB ← {⊃ (+⌿ ⍵ ∘.∊ n) ,., n ← ∪⍵}
ROB 0
Output : 1 0        ⍝ Il y a 1 zéro
ROB 1 0
Output : 1 1 1 0    ⍝ 1 un et 1 zéro
(ROB ⍣ 10) 0         ⍝ Pour répéter 10 fois
Output : 3 3 2 2 1 4 3 1 1 0
Explications :

∪⍵ : On récupère les valeurs uniques du vecteur
⍵ ∘.∊ n : Matrice pour les tests d’appartenance (produit externe)

Code : Tout sélectionner

v ← 1 3 2 1 1 0   ⍝ Exemple de vecteur
∪ v                ⍝ Eléments uniques
Output : 1 3 2 0
v ∘.∊ ∪ v         ⍝ Matrice d'appartenance
1 0 0 0           ⍝ Positions des éléments
0 1 0 0           ⍝ du vecteur 1 3 2 1 1 0
0 0 1 0           ⍝ dans le vecteur 1 3 2 0
1 0 0 0
1 0 0 0
0 0 0 1
+⌿ : Somme des différentes colonnes

Code : Tout sélectionner

+⌿ v ∘.∊ ∪v
3 1 1 1
,., : Double concaténation, déjà entre les sommes et les éléments de ∪v puis concaténation de l’ensemble.

Nous allons créer un programme RPL en utilisant UN. (union) et PE. (Produit externe) que l’on a vus précédemment. Plus précisément nous obtiendrons :

Code : Tout sélectionner

1: {1}         # on part de 1 zéro
2: {0}
VAR ROB
1: {1 1}
2: {0 1}       # 1 zéro et 1 un
ROB
1: {1 3}
2: {0 1}       # 1 zéro et 3 un
ROB
1: {1 2 1}
2: {0 1 3}     # 1 zéro, 2 un et 1 trois
...
ROB
1: {1 3 2 3 1}
2: {0 1 2 3 4}   # La suite stationne
Idée du programme : on concatène les 2 listes (+), puis on la duplique (DUP) et on cherche les éléments uniques (UN.)
Ensuite on va créer la matrice d’appartenance, par exemple en utilisant « – NOT ». L’idée étant de soustraire du vecteur (niveau 1 ci-dessous) la valeur que l’on cherche. En appliquant NOT les 0 se transforment en 1 et les valeurs non nulles en 0. Le problème est que « == » ou « SAME » ne fonctionnent pas avec PE. d’où cette « astuce ».

Code : Tout sélectionner

2: { 1 2 }
1: { 1 1 1 2 2 1 2 }
« - NOT »
VAR PE.
1: {{1 1 1 0 0 1 0} {0 0 0 1 1 0 1}}
On a les endroits où apparaissent 1 et 2 dans le vecteur 1 1 1 2 2 1 2

Il suffit ensuite de faire les sommes des différentes listes (∑LIST) :

Code : Tout sélectionner

2: { 1 2 }
1: { 1 1 1 2 2 1 2 }
« - NOT ∑LIST»
VAR PE.
1: {4 3}
on obtient finalement :

Code : Tout sélectionner

« + DUP UN. SORT DUP ROT
 « - NOT ∑LIST » PE. SWAP
»
'ROB STO
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par FLISZT »

Année bissextile ou pas ?

… je ressors ce programme de mes archives de 2017 :

Code : Tout sélectionner

<<  → an
	<<
		an 4 MOD 0 == {an 100 MOD 0 == {an 400 MOD 0 == "oui" "non" IFTE } "oui" IFTE} "non" IFTE
	>>
>>
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

@FLISZT : c'est ça, la différence c'est l'utilisation de la double négation

Code : Tout sélectionner

«  → an
	«
	  an 4 MOD 0 == an 100 MOD 0 == an 400 MOD 0 == ≠ ≠ "oui" "non" IFTE
	»
»
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par FLISZT »

Schraf a écrit : 20 mars 2022 20:28 @FLISZT : c'est ça, la différence c'est l'utilisation de la double négation

Code : Tout sélectionner

«  → an
	«
	  an 4 MOD 0 == an 100 MOD 0 == an 400 MOD 0 == ≠ ≠ "oui" "non" IFTE
	»
»
« La double négation » ?! 8O … trop fort ! :)
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

@FLISZT : En fait, c'est même une quintuple négation que je mets dans mes explications, car faire le test "X 0 ==" donne 1 si X vaut 0 et 1 sinon, c'est exactement ce que fait la fonction NOT. On obtient :

Code : Tout sélectionner

«  → an
	«
	  an 4 MOD NOT an 100 MOD NOT an 400 MOD NOT ≠ ≠ "oui" "non" IFTE
	»
»
PS. Par contre je ne suis pas sûr que ce soit la meilleure façon d'expliquer à quelqu'un ce qu'est une année bissextile :D
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par zpalm »

Schraf a écrit : 21 mars 2022 08:47 PS. Par contre je ne suis pas sûr que ce soit la meilleure façon d'expliquer à quelqu'un ce qu'est une année bissextile :D
C’est sur que s’il faut commencer par expliquer le RPL c’est pas gagné :lol:
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par FLISZT »

Schraf a écrit : 21 mars 2022 08:47 @FLISZT : En fait, c'est même une quintuple négation que je mets dans mes explications, car faire le test "X 0 ==" donne 1 si X vaut 0 et 1 sinon, c'est exactement ce que fait la fonction NOT.
Allons bon ! Une quintuple négation maintenant ?!
J'ai comme l'impression que tu profites d'un certain vide juridique… c'est moche !
:D
zpalm a écrit : 21 mars 2022 08:52
Schraf a écrit : 21 mars 2022 08:47 PS. Par contre je ne suis pas sûr que ce soit la meilleure façon d'expliquer à quelqu'un ce qu'est une année bissextile :D
C’est sur que s’il faut commencer par expliquer le RPL c’est pas gagné :lol:
:D
… peut-être en demandant poliment à l'un des gurus du RPL ? Bill, Charles, Joe, Jim, Cyrille… la liste est longue !
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par Schraf »

Résumé express
En utilisant CHARS, on peut renommer les différentes commandes créées dans les chapitres précédents en se rapprochant de l’APL.

Ligne du haut : Union, transformer une chaine de caractères en liste, produit externe

Ligne du bas : Scan, produit interne et sélection

Image

Exemples
Sélection des reçus avec σ : On duplique les notes, on crée le vecteur booléen et on applique σ

Image

Ecran 1 : On ne récupère que les éléments unique d’une liste (à gauche la version APL)

Ecran 2 : On décompose une chaine et liste

Image

Produit externe : On fait la table de Pythagore des produits entre les liste {3 2} et {4 1 5}

Image

Produit interne : Prendre les minimums les 2 listes (càd min(3 ; 2), min(5 ; 1) et min(4 ; 8 )) et en faire le produit ( 2 * 1 * 4 = 8 )

Image

Scan : On garde le premier élément. Ensuite on regarde le max entre la valeur précédente et 5 et on multiplie le résultat par la nouvelle valeur. On obtient 4 puis max(4 ; 5) = 5 * 6 = 30 puis max(30 ; 5) = 30 * 7 = 210 puis max(210 ; 5) = 210 * 3 = 630

Image
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par FLISZT »

Pour toute calculatrice RPL…

Programme "Année bissextile ? " :

Code : Tout sélectionner

« 	
	DUP DUP

	4 MOD NOT
	  SWAP
	    100 MOD
	AND
	  SWAP
	    400 MOD NOT	
	OR
»
0 pour "non" ; 1 pour "oui"

BYTES retourne :

# 4946h
61
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: HP-48/49/50G : Quand le RPL rencontre APL

Message par C.Ret »

Schraf a écrit : 20 mars 2022 09:52Il peut aussi être intéressant de remarquer qu'avec les booléens X ≠ Y et équivalent à X XOR Y (OU exclusif)
Très juste.
FLISZT a écrit : 10 mai 2022 16:37 Pour toute calculatrice RPL…
BYTES retourne : # 4946h 61
C'est encore beaucoup, je pense qu'il y a trop de NOT et de SWAP. Au lieu de retourner tous les éléments du calcul, pourquoi ne pas faire le calcul dans l'autre sens ?

Code : Tout sélectionner

«  DUP 400 MOD 
  OVER 100 MOD XOR
  SWAP   4 MOD XOR NOT »
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.
Répondre

Retourner vers « Tous les Pockets »