Mario de Lama
malar@arrakis.es
http://www.arrakis.es/~malar
Hay cuatro tipos de test en la HP48:
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 8 | 9 | < | 1 | |
| 9 | 8 | < | 0 | |
| 5 | 'A' | < | Obtenemos '5 < A' si el flag -3 está desactivado, en otro caso se evalúa el algebraico |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| "B" | "A" | 1 | ||
| 5 | 6 | 0 | ||
| "A" | "a" | 0 | El código del carácter "A" es el 65 mientras que el del "a" es el 97 |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 8 | 8 | \<= | 1 | |
| 9 | 8 | \<= | 0 | |
| "A" | "a" | \<= | 1 |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 8 | 8 | \>= | 1 | |
| 9 | 8 | \>= | 1 | |
| "A" | "a" | \>= | 0 |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 8 | 8 | = = | 1 | |
| "1" | 1 | = = | 0 | |
| 'A' | 'A' | = = | Obtenemos 'A = = A' si el flag -3 está desactivado, en otro caso se evalúa el algebraico |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 8 | 8 | \=/ | 0 | |
| "1" | 1 | \=/ | 1 | |
| 'A' | 'A' | \=/ | Obtenemos 'A \=/ A' si el flag -3 está desactivado, en otro caso se evalúa el algebraico |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 1 | 1 | SAME | 1 | |
| 'A' | 1 | SAME | 0 | |
| "1" | 1 | SAME | 0 |
| Arg.1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 'X*Y^3' | 'X' | LININ | 1 | Si representamos esta función respecto de X obtenemos una recta |
| 'X^2*Y^3' | 'X' | LININ | 0 | Si representamos esta función respecto de X obtenemos una parábola |
| Arg. 1 | Arg. 2 | Función | Resultado |
|---|---|---|---|
| 1 | 1 | AND | 1 |
| 1 | 0 | AND | 0 |
| 0 | 1 | AND | 0 |
| 0 | 0 | AND | 0 |
| Arg. 1 | Arg. 2 | Función | Resultado |
|---|---|---|---|
| 1 | 1 | OR | 1 |
| 1 | 0 | OR | 1 |
| 0 | 1 | OR | 1 |
| 0 | 0 | OR | 0 |
| Arg. 1 | Arg. 2 | Función | Resultado |
|---|---|---|---|
| 1 | 1 | XOR | 0 |
| 1 | 0 | XOR | 1 |
| 0 | 1 | XOR | 1 |
| 0 | 0 | XOR | 0 |
| Arg. | Función | Resultado |
|---|---|---|
| 1 | NOT | 0 |
| 1.34 | NOT | 0 |
| 0 | NOT | 1 |
| Arg. 1 | Arg. 2 | Función | Resultado | Comentario |
|---|---|---|---|---|
| 'A' | 'B' | AND OR XOR NOT | Obtenemos 'A (función) B' si el flag -3 está desactivado, en otro caso se evalúa el algebraico obrando entonces según el tipo de datos contenidos en las variables A y B |
Cada carácter de las cadenas se convierte al código de carácter correspondiente (por ejemplo, el de "A" es el 65, ver la función NUM) y este código al binario correspondiente, a continuación se efectúa la comparación lógica entre las cadenas (aplicamos la función AND OR XOR NOT correspondiente) y realizamos el proceso anterior al contrario para volver a obtener la cadena resultado.
Todos los siguientes ejemplos han sido efectuados con 7 como longitud de palabra (ver las funciones STWS y RCWS en la guía de usuario).
| Carácter | Código | Binario | |
|---|---|---|---|
| Arg. 1 | "A" | 65 | #1000001b |
| Arg. 2 | "B" | 66 | #1000010b |
| Función | AND | AND | |
| Resultado | "@" | 64 | #1000000b |
| Carácter | Código | Binario | |
|---|---|---|---|
| Arg. 1 | "A" | 65 | #1000001b |
| Arg. 2 | "B" | 66 | #1000010b |
| Función | OR | OR | |
| Resultado | "C" | 67 | #1000011b |
| Carácter | Código | Binario | |
|---|---|---|---|
| Arg. 1 | "A" | 65 | #1000001b |
| Arg. 2 | "B" | 66 | #1000010b |
| Función | XOR | XOR | |
| Resultado | carácter 3 | 3 | #0000011b |
CODIFICAR
|4: | |4: |
|3: | |3: |
|2: "Cadena a codificar"| |2: |
|1: "Clave"| ----> |1: "Cadena codificada"|
|CODER ### ### ### ### ### | |CODER ### ### ### ### ### |
+--------------------------+ +--------------------------+
DESCODIFICAR
|4: | |4: |
|3: | |3: |
|2: "Cadena a descodificar"| |2: |
|1: "Clave"| ----> |1: "Cadena descodificada"|
|CODER ### ### ### ### ### | |CODER ### ### ### ### ### |
+--------------------------+ +--------------------------+
CÓDIGO
\<<
\->STR SWAP @ Asegura que ambos argumentos sean cadenas
\->STR @ convirtiéndolas si no lo son
DUP SIZE @ Halla la longitud de la cadena a codificar.
ROT @ Coloca la pila de la forma:
@ 3: Cadena a cifrar, 2: su longitud, 1: clave
WHILE @ Se inicia el bucle Mientras ...Repite... End
DUP2 @ Duplica los niveles 1: y 2:
SIZE @ Calcula la longitud de la cadena clave.
> @ Comprueba si la longitud de la cadena a cifrar
@ es aún mayor que la de la clave
REPEAT @ Si aún es mayor se ejecuta lo siguiente
DUP + @ Dobla la longitud de la cadena clave sumándola a si misma.
END @ Si la cadena de la clave ya es mayor o igual que
@ la cadena a cifrar salimos del bucle
1 ROT SUB @ Asegura que ambas cadenas tengan igual longitud
@ obteniendo de la cadena clave justo los primeros
@ n elementos, siendo n la longitud de la cadena a cifrar
XOR @ Codifica o descodifica.
\>>
| Carácter | Código | Binario | |
|---|---|---|---|
| Arg. | "A" | 65 | #1000001b |
| Función | NOT | NOT | |
| Resultado | "3/4" | 190 | #0111110b |
Ya lo hemos visto en el ejemplo anterior
Estos códigos son:
| Objeto | Nš tipo | Objeto | Nš tipo |
|---|---|---|---|
| Número real | 0 | Nombre XLIB | 14 |
| Número complejo | 1 | Directorio | 15 |
| Cadenas | 2 | Librería | 16 |
| Función real | 3 | Backup | 17 |
| Función compleja | 4 | Funciones incorporadas | 18 |
| Lista | 5 | Comandos incorporados | 19 |
| Nombre global | 6 | Binarios System RPL | 20 |
| Nombre local | 7 | Reales largos | 21 |
| Programa | 8 | Complejos largos | 22 |
| algebraico | 9 | Matriz enlazada | 23 |
| Enteros binarios | 10 | Carácter | 24 |
| Gráfico | 11 | Code | 25 |
| Etiquetas | 12 | Library data | 26 |
| Unidades | 13 | External | 26-31 |