GUÍA JABA DE PROGRAMACIÓN PARA LAS CALCULADORAS

CASIO FX

 

Escrita por JABA, versión 1.30, mayo de 2003

Un pequeño preludio a la versión 1.30

Mucho tiempo ha pasado desde que hice público lo que no era más que un documento personal que escribí una tarde para volcar mis propios conocimientos a modo de copia de seguridad. Os agradezco la aceptación que ha tenido esta sencilla guía, hasta el punto de haberse convertido en uno de los más importantes recursos de Casio en español en todo el mundo (el único en el momento de su publicación),  y confío en que os fuera una ayuda para introduciros a este interesante mundo de las calculadoras.

Ahora, cinco años después, he reorganizado mi página web y he presentado un poco mejor este documento. No obstante, está obsoleto en lo referente a las nuevas calculadoras Casio Álgebra.

Me gustaría encontrar gente dispuesta a ayudarme a realizar una versión 2.00 de este documento, mejor escrita, más organizada, ampliada y corregida. Así pues, lanzo este llamamiento a los canales de la RED por si alguien está dispuesto a recoger la botella y a echarme una mano.

 

Puedes contactar conmigo en mi correo pero te ruego que no me escribas preguntando cómo se usa cierta función de la calculadora que no entiendes (¡para eso está el manual!) y, sobre todo, que no me pidáis manuales porque no los tengo.

 

Notación

La notación usada es la estándar del formato CTF (CASIO TEXT FORMAT). Resumiendo los principales tokens:

_ representa el triangulito de visualización accesible por el menú PRGM

>=,<=,=,<>(distinto) son accesibles por PRGM-REL

FICHEROS INCLUIDOS

El pack de apoyo completo de la Guía de Programación Casio incluye:

-este fichero de texto que es la guía en ssí

-el juego de ejemplo VOLDAR versión cfx-98800, en formato CTF.

-los programas PL2CTF y CTF2PL (al final dde la guía hablaremos de ellos)

Introducción

La primera calculadora CASIO programable que tuve fue la fx-6300g, aunque tardé algún tiempo en apreciar su verdadero potencial. Precisamente cuando empecé a hacerlo dicha calculadora tuvo un terrible accidente :-), gracias a lo cual adquirí la calculadora que despertaría mi interés por el mundo de las calculadoras CASIO: la fx-7700GE. Después tuve la mayor de la familia clásica: una CFX-9800G. Finalmente, poseo una cfx-9850G.Por cierto; volví a comprarme una 6300: es muy útil porque tras la apariencia de una calculadora más o menos normal se esconde una potencia enorme (realmente sólo limitada por su escasa memoria de 1kb).  Las calculadoras CASIO son algo más que eso: realmente están en el umbral entre calculadora y ordenador. Constan de un lenguaje de programación sencillo pero muy versátil que abre la puerta no sólo a la "automatización de cálculos" como sugiere el incompleto manual, sino a todo un mundo de aplicaciones científicas, juegos... e incluso la creación de imágenes fractales. Sin embargo el manual de las CASIO FX es muy incompleto en el sentido de la programación y alguien que lo lea no se hace a la idea de lo que realmente puede conseguirse. Es por eso por lo que decidí escribir esta GUIA en la que podrás encontrar descripciones sobre programación, una serie de ejemplos selectos, información adicional, así como una lista de las mejores direcciones CASIO de Internet. Muchos programas e informaciones han sido extraidas de éstas. Se supone que estás familiarizado con el uso normal de la calculadora CASIO, y que tienes alguna experiencia en programación.

    Soy aficcionado a la programación desde edad muy temprana (pues sí, empecé con el famoso Spectrum). Actualmente soporto un bombardeo diario de técnicas de programación estructurada, medidas de la complejidad de algoritmo y demás zarandajas que pueden llegara hacerte odiar algo que te apasionaba. Gracias a las CASIO, he vuelto a sentir el verdadero espíritu de la programación artesanal.

ACERCA DE LAS CALCULADORAS CASIO

Hay dos estilos de calculadoras programables CASIO desde el punto de vista de su programación.

- Nueva generación: fx-7400,fx-9750,cfx-98850,cfx-9950 y cfx-9970.

- Clásicas: el resto de modelos.

Las calculadoras de nueva generación incluyen un nuevo lenguaje de programa ción que mejora los puntos flacos del anterior; realmente esto se nota desde el punto de vista de la programación de videojuegos pues se ha potenciado la presentación de texto y, especialmente, la interactividad. Se han incluido sentencias IF-THEN,WHILE,FOR,LOOP y BREAK. Sin embargo, a pesar de que hacen más cómoda la programación, las antiguas instrucciones pueden lograr los mismos efectos. Además, algunas características del lenguaje clásico han desaparecido. Especialmente dura e incomprensible es la eliminación de los arrays (A[0]..etc), aunque esto puede suplirse utilizando matrices, pero siempre con cierta incomodidad. Esta guía no hablará de momento de estas nuevas calculadoras (puede que se haga en futuras versiones). En cuanto a los programas de ejemplo, la mayoría funcionarán en ellas mientras no usen arrays.

 Esta es la historia de las distintas calculadoras CASIO:

HISTORIA DE LAS CALCULADORAS PROGRAMABLES CASIO CLÁSICAS

Los modelos superiores siempre pueden ejecutar programas diseñados para modelos inferiores o en la misma columna.

Entre paréntesis se indica el número de bytes que se dejan disponibles para programación. La memoria de la calculadora es mayor.

Originales Icon Menu Power Graphic Icon Menu Modelos 32K

(GRAPHICS) Power Graphic

___________________________________________________________________________

fx-6300G fx-7300G fx-7700G fx-7700GE fx-9700GE

(400) (500) fx-7700GB fx-7700GH (24000)

fx-7700Gbus (4000)

fx-7000G fx-7400 (4000) cfx-9800G

fx-7000GA (500) (24000)

fx-7000GB fx-8700G

(422) (15000)

fx-7500G fx-8700GB

(4006) (16000)

fx-8500G

(11555)

La serie POWER GRAPHICS añadió: puerto de comunicaciones, gráficas polares, paramétricas y de inecuaciones; zoom de factor y de caja, scroll de gráficos múltiples, inicialización de rango, integración, modo de matriz, fracciones, permutaciones, combinaciones, probabilidades normales, unidades del sistema internacional.

 La serie Icon Menu Power Graphics añadió: diferenciales, uso de matrices en programas, resolvedor de ecuaciones... y por supuestos, menú de iconos.  Los modelos de 32K añadieron: números complejos, modo de tabla, gráficos dinámicos, resolvedor de ecuaciones mejorado, mayor tamaño de matrices (255x255), sumatorios, resolvedor gráfico (raíces, cruces, máximos,mínimos),y una CPU acelerada que permite cálculos más rápidos. La cfx-9800G añade además una pantalla tricolor (azul,verde y naranja); aunque la velocidad de salida de texto es muy reducida. La serie 9x50 añade: lenguaje de programación mejorado, combinación de todos los modos de funcionamiento en uno RUN, resolvedor de ecuaciones por Newton, gráficos de red para recurrencias (convergencias y divergencias), modo de estadística muy mejorado, listas, cónicas, modo de transmisión de datos mejorado, memoria para volcados de pantalla, memoria para rangos, pantalla de alta resolución y mejor aprovechamiento de la memoria. Por último, hay un modelo de gama baja, 7400, con el lenguaje de programación de las series de nueva generación.

CONEXION DE LA CALCULADORA Y EL PC

    A partir de la FX-7700G, la CASIO dispone de un interfaz que nos permite comunicarnos con otras calculadoras y el ordenador (PC o MAC). Esto es especialmente útil al programador, pues no sólo nos permite tener una extensa biblioteca de programas y datos en el ordenador, sino que hace realmente cómoda la escritura de programas. CASIO vende el pack programa-cable para conexión con el ordenador, del cual hay varios modelos:

-CASIO FA-121 v 1.0:  A pesar de que el programa de trabajo es en principio bastante bueno, desgraciadamente está lleno de bugs, aunque con un poco de control puede sacársele bastante partido. Incluye una fuente TRUE-TYPE con los símbolos y funciones de CASIO. Está traducido a distintos idiomas. Dispone de funciones de edición de todas las zonas de programa y FILE EDITOR, pero no pueden editarse ni enviarse las zonas de variables, funciones,etc... tan sólo recibirse. También es capaz de almacenar "snapshots" de la pantalla de la calculadora en varios formatos gráficos. El editor es aceptable, con funciones de búsqueda y sustitución. Soporta la norma MDI con lo que pueden editarse varias zonas a la vez. No soporta las CASIO 9x50.

- CASIO FA-121 v 2.0: creo que corrige loss numerosos bugs de la primera versión.

- CASIO FA-122: esta nueva versión soportaa las nuevas calculadoras fx-9x50, y usa un nuevo formato de fichero comprimido. Ahora CASIO proporciona gratuitamente este programa en su página de Internet.

- FX-INTERACE : es un programa de una terccera empresa, Yellow Computing, con un magnífico entorno y sin duda el mejor producto para la comunicación con la calculadora.

Sin embargo el conjunto cable-programa es bastante caro, y en Internet pueden encontrarse tanto programas freeware (el más famoso es CAS) como esquemas del cable de comunicación.

El formato estándar para escribir en el PC programas de CASIO es el CTF, en el que se usa un convenio de símbolos para representar el juego de caracteres de CASIO. Este libro y los ejemplos incluidos usan la notación CTF, de la que podrás encontrar abundante información el la web de CAS, aunque te introduciré al uso de esta notación.

CONCEPTOS BÁSICOS

Las CASIO tienen distintos modos de funcionamiento (p.ej, en la 7700GE son COMP,MATRIX,SD,REG y BASE-N). En cada modo, se admiten unas operaciones de terminadas; p.ej, no es posible calcular determinantes en modo BASE-N (referirse al manual CASIO para información sobre cada modo). Igualmente, cada programa que escribamos en la CASIO estará diseñado para un modo específico de trabajo (aunque más adelante veremos que hay formas de combinar mandatos de distintos modos en un único programa). Desgraciadamente no está permitido el uso del modo BASE-N en programación, ni siquiera usando el truco mencionado puede hacerse (esto cambia en las calculadoras de nueva generación).

En los modelos de menos de 32kb, hay varias zonas de programas identificadas con un número o letra; cada una puede contener un programa distinto. P.ej, en la fx6300g son las zonas Prog0 a Prog9, y en la fx7700GE son además ProgA a ProgZ, prog(theta) y prog(zeta).

No es tarea de este manual explicarte cómo introducir programas, para ello puedes consultar el libro de la calculadora. Lo que sí te recuerdo es que el modo en que se escribe el programa es por defecto el modo en el que estabas trabajando antes de meterte en el modo de programación. En los modelos de 32kb, también puedes cambiarlo accediendo al menú SETUP del modo de programación. Estos potentes modelos,cfx9800 y fx9700, disponen además de una función de edición de ficheros (FILE EDITOR). Además de las zonas de programa habituales, pueden crearse ficheros de texto con un nombre específico (p.ej "MI PROGRAMA"). Estos ficheros pueden editarse, borrarse, renombrarse o ejecutarse. Además, funcionando en modo FILE el editor dispone de características mejoradas como búsqueda de cadenas. Sin embargo, puede ser algo incómodo de teclear en la calculadora pues por defecto la pone en modo alfabético. Este último modo tiene una ventaja adicional: se permite proteger el acceso a los ficheros mediante una contraseña.

    En las nuevas calculadoras 9x50, el modo de programa normal no existe y sólo queda el modo de edición de ficheros.

LA PANTALLA

La CASIO dispone de dos modos de pantalla: el modo de texto (16 columnas y 8 filas) y el modo gráfico (96x64 puntos). Ambos modos son monocromáticos excepto en la CFX-9800G, donde cada punto puede ser azul, naranja o verde. También es importante señalar la independencia de los modos: podemos trabajar en la pantalla de texto o gráfica sin alterar el contenido de la otra; en cualquier momento podemos cambiar la pantalla activa pulsando la tecla G<->T. P.ej, si dibujamos un monigote en modo gráfico, y pasamos al modo texto para escribir un mensaje, al volver al modo gráfico seguirá estando el monigote.

OBSERVACIÓN: la CASIO FX-9700GE y las CASIO de nueva generación disponen de una pantalla de mayor resolución (127x64). Todas las CASIO de nueva generación excepto la fx-9750G disponen de una pantalla tricolor similar a la de la 9800.

    La excepción a todo esto es la fx-6300g,donde ambas pantallas van mezcladas, y sólo se dispone de una línea de texto (no recuerdo las medidas exactas), aunque se aplica la misma ley de conservación de imágenes.

MANDATOS BÁSICOS

    NOTA: se supone que el lector está familiarizado con el manejo de la CASIO y sabe dónde encontrar todos los símbolos y órdenes que aquí se mencionan. De lo contrario, un buen vistazo al manual sería recomendable antes de comenzar.

Un programa CASIO es una secuencia de mandatos válidos, donde cada mandato puede ser:

a) un cálculo normal (p.ej: 3+2+1)

b) una instrucción especial de programación

Cada mandato deberá estar separado por:

-un salto de línea (EXE) (no aplicable en fx6300G).

-dos puntos (:)

-una instrucción de visualización (_).

El programa sólo se detiene si ocurre un error o se ejecuta el último mandato.

Cuando esto sucede, se muestra por la pantalla de texto el contenido de la memoria ANS (es decir, el resultado de la última operación). En caso de estar en modo MATTRIX, lo que se muestra es la matriz ANS.

Veamos un primer ejemplo (los usuarios de la fx6300G deben sustituir los saltos de línea por ":" de ahora en adelante):

3+2*10

Ans*3

Al ejecutar el programa anterior, el resultado obtenido es:

69

(recordamos que Ans contiene el valor de la última operación ejecutada).

    De momento, sabemos que en un programa podemos meter una secuencia de cálculos que también podríamos hacer manualmente. De igual forma que hemos puesto los sencillos cálculos anteriores, pueden escribirse instrucciones cualesquiera, a condición de que sean válidas en el modo que estamos escribiendo el programa.

Así, por ejemplo:

Det [[1,2,3][4,5,6][2,4,4]] (el el modo MATRIX)

Eso muestra el determinante de la matriz de tamaño 3x3 correspondiente. Esa orden sólo funcionará en modelos fx-7700GE y superiores, pues hasta entonces no era posible usar el modo MATRIX en programación.

d/dx(x^2+5,1) muestra f'(1) donde f=x^2+5 (modo COMP).

Mat A[3,2] muestra la componente de índice (3,2) de la matriz A, en modo

MATRIX.

Variables

En las CASIO, se utilizan las memorias en lugar de variables. Todas las CASIO tienen 28 memorias, de la A a la Z, y además a partir de la fx-7000 hay dos memorias adicionales: theta y zeta.

Para almacenar un valor en una variable se utiliza el operador (->):

5->A (almacena 5 en A)

B+2->C (almacena el contenido de B más 2 en C)

5+6i->R (almacena el complejo 5+6i en C - sólo fx9700+)

Y luego es posible utilizar los valores en las variables en cálculos posteriores:

B*3+Ans/(3+1)

El operador ~ permite asignar un mismo valor a un rango de variables:

4->B~E almacena 4 en B,C,D y E.

Arrays

Puede usarse una variable, p.ej, A, como un array, y acceder a sus elementos de forma indexada. P.ej A[0],A[1],A[2]... teniendo en cuenta lo siguiente:

A[0]=A

A[1]=B

A[2]=C

...

A[28]=Z

A[29] -> ¡en principio provoca un "Mem Error"! (ver más adelante)

De igual modo B[0]=B,B[1]=C,etc... Y además B[-1]=A y B[-2] provoca "Mem

Error".

El índice puede ser cualquier expresión, p.ej:

A[3+2]

A[B] y si B=5, eso equivale a A[5]=F.

Con esto tenemos una potente herramienta de programación pero ... ¡puede que 28 elementos de memoria sean muy pocos!. Pero esto no es problema, en todas las CASIO existe un comando Defm que nos permite añadir nuevas variables a costa de tomar espacio de memoria.

P.ej:

Defm0 -> sólo existen variables A~Z.

Defm3 -> creamos tres nuevas variables adicionales, direccionables con los nombres Z[1],Z[2] y Z[3].

Después de esta última instrucción, A[29] sí sería válido.

    El número máximo de variables depende del modelo de CASIO y de la memoria libre. Cada variable nueva consume 4 bytes de RAM.

 Por cierto, el operador ~ también puede usarse con estas variables indexadas:

0->A[0]~A[28] es igual que 0->A~Z

Lectura por teclado de variables

Veamos el primer comando específico de programación. Se trata de "?" y permite leer un carácter o número desde el teclado.

Sintaxis: ?->nomvar

P.ej: ?->A lee un carácter del teclado y lo almacena en A.

En la pantalla de la CASIO aparece:

"?" y el cursor; deberemos teclear y pulsar <EXE>.

Si el carácter es una expresión, ésta se evalua y se almacena en A.

Si el carácter es un símbolo o una letra, se almacena su código en A. Esto permite reconocer las distintas letras del alfabeto, y se usa por ejemplo en el HANGMAN (ahorcado) de Tom Lynn. La tabla completa de códigos también puede consultarse en "The CASIO programming encyclopedia", también de Tom Lynn.

Con este operador ya podemos hacer un nuevo programa interactivo. Este es muy sencillo y calcula el inverso de un número:

?->A

A=1/A

¿Cómo podemos escribir en la pantalla de texto para comunicarnos con el usuario? Para este cometido, usamos las comillas ". Encerrando un texto entre comillas,éste se muestra en la pantalla de la CASIO. Mejoremos pues el ejemplo anterior:

"INTRODUZCA NÚMERO:"

?->A

"SU INVERSO ES:"

A=1/A

Si omitimos el salto de línea entre las comillas y ?, la interrogación se muestra inmediatamente después del texto.

¿Qué sucede cuándo queremos mostrar un resultado sin finalizar el programa? Con esta utilidad existe el símbolo "_" (triangulito). Su cometido es parar la ejecución y mostrar el contenido de la memoria ANS, a continuación se visualiza el mensaje "-Disp-" y se espera a que el usuario pulse <EXE>.

P.ej:

1_

2_

3_

Visualiza los números 1,2 y 3, haciendo una pausa entre cada uno con el mensaje -Disp-. El resultado por pantalla será el siguiente:

1

-Disp-

2

-Disp-

3

-Disp-

3

El último 3 aparece porque el programa ha terminado de ejecutarse (ver apartado anterior).

De igual modo puede mostrarse el contenido de alguna variable o el resultado de una expresión: B[3]_ ó cos5_ son instrucciones válidas.

Observaciones sobre la salida de texto:

-si la pantalla ya está llena, se realiza scroll de líneas hacia arriba con una ligera pausa predefinida entre línea y línea.

-si la CASIO estaba en modo gráfico, es coonmutada al modo texto antes de rea lizar la salida.

-en la fx-6300g, Disp es en realidad un inndicador de la pantalla LED.

En los modelos clásicos, no se conoce ningún modo de borrar la pantalla de texto de la CASIO, ni de posicionar el cursor. En las calculadoras de nueva generación, existen órdenes de formateo de texto y para limpiar la pantalla. También existen formas más elegantes de inputación. En las CASIO cfx-9800,cfx-9850 y cfx-9950 existe la posibilidad de cambiar el color de la línea a imprimir, utilizando las órdenes Green o Orange accesibles por el menú COLOR (no existe órden Blue porque es el color por defecto).

Así:

Green "SOY VERDE"

muestra SOY VERDE en color verde (evidentemente).

Observación: ¡la salida de texto es MUY lenta en las CFX! (sin embargo los

gráficos parecen ser más rápidos (?) ).

LA INSTRUCCION CONDICIONAL =>

¿Qué sería un programa sin condiciones? Sin duda un aburrimiento. Pero las Casio disponen de un operador condicional =>, cuya sintaxis es:

expresión booleana => mandato

El funcionamiento es muy sencillo: si la expresión booleana es cierta, se ejecuta el mandato; de lo contrario se salta a la instrucción siguiente al

mandato.

Es equivalente a la orden en BASIC: IF expresión booleana THEN mandato.

La expresión booleana puede componerse utilizando los operadores de relación accesibles a través del menú "PRGM": <=,=,>= y >.

P.ej:

A<=B => "A es menor que B"

Desgraciadamente las CASIO clásicas no disponen de operadores lógicos tales como AND u OR (esto se soluciona en las 9x50). Así que deberemos apañárnoslas para componer las expresiones.

La más sencilla es el AND:

un hipotético

A>B AND A>C => C->A

deberá escribirse:

A>B => A>C => C->A

Para simular un OR debemos crear varias instrucciones condicionales, una por cada expresión:

A>B OR A>C => "HOLA" es:

A>B => "HOLA"

A>C => "HOLA"

Aplicando estas dos normas con algo de cuidado podemos realizar cualquier expresión. Por ejemplo:

(A>1 AND A<10) OR (B=C AND C=D) => "VALE"

es:

A>1 => A<10 => "VALE"

B=C => C=D => "VALE"

Como colofón de este epígrafe vamos a presentar un sencillo programa:

'EDADES

"Dime tus años"?->E

E<20 => Orange "Aún eres joven"

E>20 => E<45 => Green "Eres de mediana edad"

E>20 => E>45 => "Eres un viejecito"

(los usuarios de calculadoras no cfx deben eliminar los comandos Orange y Green, a partir de ahora omitiré este comentario).

En la primera línea hemos presentado un nuevo concepto, el de comentario. Cuando se introduce el símbolo "'", el intérprete CASIO ignora el resto de la línea. Esto es especialmente útil cuando se escribe en zonas de programa y no de edición, pues podemos usar la primera línea para "rotular" el programa. P.ej, si hubiésemos intrucido el anterior listado en el área 0 y el resto estuvieran vacías, veríamos en el listado de programas:

0 'EDADES

1 empty

2 empty

...

Veamos ahora un ejemplo de ejecución:

Dime tus años? 19

Aún eres joven

SALTOS Y BUCLES

La orden "Lbl" (de "Label"=etiqueta) permite "marcar" ciertos puntos del programa con nombres para luego poder saltar hacia ellos. Los nombres válidos son los números del 0 al 9, las letras de A a Z, y los símbolos theta y zeta.

Una vez que hemos marcado una zona del programa con una Lbl, podemos "saltar" a ella con el mandato Goto. Su sintaxis es "Goto etiqueta", donde etiqueta es el nombre de una etiqueta que esté en el mismo programa (puede estar antes o después del Goto). Al realizar el Goto, la ejecución del programa se dirige a la zona marcada.

Veamos un ejemplo sencillo:

Goto A

"Nunca me escribirán"

Lbl A

"Fin"

La ejecución del programa anterior visualiza el mensaje "Fin". Esto es porque el Goto redirige la ejecución del programa a la etiqueta A, y el mensaje entre medias nunca llega a ejecutarse.

Visto así el Goto parece un poco inútil. Su verdadera potencia no se descubre hasta que lo combinamos con la operación condicional =>, con lo que se nos permite crear bucles (repeticiones sucesivas de una grupo de instrucciones) y otras estructuras de control.

Veamos este ejemplo, algo más interesante:

'ELEFANTES

1 -> A

Lbl 1

A_

"Elefantes se balanceaban sobre la tela de una araña"

A+1->A

A<=10 => Goto 1

La ejecución produce:

1

-disp-

Elefantes se balanceaban sobre la tela de una araña

2

-disp-

Elefantes ...

-disp-

10

Elefantes ...

La clave del bucle está en la última sentencia. Mientras el valor de A (que se incrementa en cada paso del bucle con A+1->A) sea menor que 11, el bucle se repite. Al alcanzar A el valor 11, se sale del bucle (en este caso también acaba la ejecución del programa).

    Para que no rabien los amantes de la programación estructurada, veamos el modo de convertir las estructuras de control más populares a formas Goto:

WHILE condicion DO

BEGIN

instrucción 1

..

instrucción i

END

se traduce:

Lbl z 'z es una etiqueta no usada

instrucción 1

...

instrucción i

condicion => Goto z

FOR i:=A TO B DO

BEGIN

blablabla

END

lo podemos escribir:

A -> i

Lbl z

A>B => Goto w

blablabla

A+1 -> A

Goto z

Lbl w

Y, finalmente:

REPEAT

blablabla

UNTIL condicion

lo pondremos:

Lbl z

blablabla

condicion => Goto w

Goto z

Lbl w

...

Para concluir, vamos a ver un pequeño juego de adivinanzas. Vamos a utilizar la función Ran# que genera un número aleatorio entre 0 y 1.

Nótese que para obtener un número aleatorio natural entre 0 y N la fórmula es:

 Int(NRan#)

donde Int es la función numérica que devuelve la parte entera de un número. Ambas funciones se alcanzan por el menú MATH.

Vamos allá con el juego:

'ADIVINAR NUMERO, POR JABA

Int(100Ran#) -> N ' Piensa el número secreto entre 0 y 100

"¡ADIVINA EL NUMERO!"

Lbl 1

? -> I ' Intento del jugador

I<N => "ES MAS GRANDE"

I>N => "ES MAS PEQUEÑO"

I<>N => Goto 1

'Se sale del "While", el número fue acertado

"FELICIDADES"

"ENCONTRASTE EL NUMERO SECRETO"_

El entendimiento del programa creo que es muy sencillo, y lo dejo como ejercicio para el lector. Tan sólo señalar que se usan las siguientes variables:

I, almacena el número "pensado" por la calculadora.

N, almacena el número que introduce el jugador.

LAS INSTRUCCIONES DE INCREMENTO Y DECREMENTO

Las instrucciones de incremento y decremento (Isz y Dsz respectivamente) no nos propocionan ninguna funcionalidad nueva que no puediéramos conseguir con los mandatos ya conocidos, pero ahorran espacio y aumentan la legibilidad del programa.

Su sintaxis es:

Isz/Dsz NOMVAR

Instruc1

Instruc2

... resto de programa ...

Su efecto es:

-Isz incrementa en uno la variable NOMVAR,, y Dsz la decrementa en 1.

-Si NOMVAR<>0, se sigue por Instruc11

-Si NOMVAR=0, se sigue por Instruc2.

Es equivalente a:

a:=a+1 (o -1 si es Dsz)

IF a<>0 THEN instruc1

instruc2

...

Como ejemplo ilustrativo de Isz, veamos una versión mejorada del programa anterior (la definitiva):

'ADIVINAR NUMERO PLUS, POR JABA

'COMPATIBILIDAD: fx-6300G y superiores

Lbl 0

"Dificultad (1-10)"

? -> D

D>10 => Goto 0

D<1 => Goto 0

Int((D*10)Ran#) -> N ' Piensa el número secreto entre 0 y la dificultad*10

0 -> K ' Pon a cero el número de intentos

"¡ADIVINA EL NUMERO!"

Lbl 1

Isz K ' Usada nueva oportunidad

? -> I ' Intento del jugador

I<N => "ES MAS GRANDE"

I>N => "ES MAS PEQUEÑO"

I<>N => Goto 1

'Se sale del "While", el número fue acertado

"FELICIDADES"

"ENCONTRASTE EL NUMERO SECRETO"

"INTENTOS USADOS:"

K_

En esta nueva versión hemos hecho dos cambios:

-hemos añadido el nivel de dificultad. El jugador introduce un nivel del 1 al 10 (observar la comprobación de nivel no válido). El número pensado se encontrará entre 0 y 10 por el nivel de dificultad.

-hemos añadido un contador del número de iintentos, en la variable K. Para ello usamos la instrucción de incremento Isz. Obsérvese que como K nunca tendrá el valor 0, no nos preocupamos por el carácter condicional de dicha instrucción (de hecho podría sustituirse por K+1->K).

INTRODUCCION AL MODO GRÁFICO

Después de conocer las principales órdenes CASIO, vamos a hacer una tímida introducción al potente modo gráfico. Al contrario del modo texto, en el que el formato de salida es muy limitado reduciéndose a una simple terminal, el modo gráfico es mucho más potente y versátil (Tom Lynn ha creado unas rutinas que permiten realizar salida de texto en modo gráfico en cualquier posición deseada; esto puede ser muy útil si deseas cuidar la presentación de tus programas).

NOTA PARA LOS USUARIOS DE fx-6300G,cfx-9850 y cfx-9950: las medidas usadas de aquí en adelante posiblemente no sean válidas en tu máquina; consulta el manual para buscar los valores correctos.

Lo primero que debe hacerse antes de comenzar a tratar con el modo gráfico es ajustar el rango, es decir, la escala de la imagen y los puntos visibles. Para ello usamos la orden RANGE:

RANGE xmin,xmáx,escalax,ymin,ymáx,escalay

xmin es el punto más pequeño de x visualizable.

xmáx es el punto más grande de x visualizable.

escalax es el incremento entre punto y punto.

Análogamente para y.

Así, por ejemplo:

RANGE 1,20,1,1,20,1

nos da una ventana gráfica con coordenadas X e Y válidas de (1,1) a (20,20)

y con incremento de una unidad entre cada pixel.

Es natural alejar el rango de los ejes de coordenadas que se dibujan en x=0 e y=0, pues la CASIO siempre los dibuja y puede hacer un mal efecto en nuestros programas.

El rango estándar recomendado que suele utilizarse en los programas es:

Range 1,95,0,1,63,0

Como puedes ver, este rango evita que se vean los ejes:

|

|***************** y=63

|* *

|* VENTANA *

|* *

|* *

|*****************

--------------------- eje x

| x=95

|

eje y

En las calculadoras de más resolución (9x50) un rango mejor es:

ViewWindow 1,127,0,1,63,0

(en las calculadoras 9x50 la instrucción RANGE se ha renombrado a VIEWWINDOW)

Sin embargo, los programas escritos con ambos rangos funcionarán en todas las calculadoras, aunque con peor calidad si no es el rango óptimo. En realidad podemos usar cualquier rango que deseemos, la calculadora ajustará automáticamente la imagen.

La orden para limpiar la pantalla gráfica es Cls.

Para dibujar un punto, usamos la orden PLOT.

PLOT a,b dibuja un punto en (a,b) (columna y fila)

P.ej: (a partir de ahora supondremos la calculadora en rango estándar)

Cls

Plot 10,10

Plot 20,20_

Dibuja dos puntos en pantalla. El símbolo de visualización _ es necesario pues sino la calculadora volvería inmediatamente a modo texto, de este modo se permite observar la imagen.

La orden PLOT también puede usarse sin órdenes:

Plot_

En este caso, el usuario puede mover el cursor gráfico con los cursores de la calculadora y marcar un punto con EXE. Desde el programa podremos saber el punto marcado por el usuario leyendo las variables X e Y.

 La orden Line también es muy útil. Su función es una línea uniendo los dos últimos puntos marcados con Plot.

P.ej, esto dibuja un rectángulo:

Cls

Plot 1,1

Plot 10,1

Line

Plot 10,10

Line

Plot 10,1

Line_

Y con un poco más de astucia, podemos averiguar si el usario es miope o no:

"¡Intente acertar dentro del rectángulo!"_

Cls

Plot 1,1

Plot 10,1

Line

Plot 10,10

Line

Plot 10,1

Line

Plot_ ' esperar entrada del posible miope

X<=10 => Y<=10 => Goto 1 ' Marcó dentro del triángulo

"¡Miope!"_

Goto 2

Lbl 1

"¡Enhorabuena!"

Lbl 2

Como puede verse, la comprobación consiste en ver si el punto marcado está dentro del triángulo. Nótese que las coordenadas del punto no pueden ser negativa por estar supuesto el rango estándar.

    ¡Quién sabe! Tal vez algún día este programa sea usado como test de alcoholemia para conductores.

COLORES EN LOS GRÁFICOS

    En los modelos cfx es posible utilizar los tres colores (azul,naranja y verde) en la pantalla gráfica, de modo similar a cómo se usaban en el texto.

     Por defecto, los puntos y líneas se escriben en color azul. Podemos forzar el uso de otro color anteponiendo los comandos Green u Orange, p.ej:

Green Plot_

Orange Line_

Orange Plot 1,2

    El color del cursor gráfico es azul por defecto, y esto sólo puede cambiarse en el menú de configuración de la calculadora.

SUBRUTINAS

Las subrutinas en realidad consisten en ejecutar un programa dentro de otro. Es decir, podemos llamar a cualquier programa en memoria desde el programa principal. Cuando el programa llamado finalice, se retorna la ejecución al punto de llamada del programa principal. Se permiten hasta 10 niveles de inclusión en las llamadas. Una inclusión más provocará un "NeError"

Por ejemplo (se indica en que zona de programa debes almacenar cada uno):

PROGRAMA 0

Prog 1

"Y YO EL PROGRAMA 0"_

PROGRAMA 1

"SOY EL PROGRAMA 1"_

El resultado de ejecutar el programa 0 es:

SOY EL PROGRAMA 1

-Disp-

SOY EL PROGRAMA 0

-Disp-

El programa 1 es una subrutina del programa 0.

En los modelos de 32kbytes también pueden llamarse a programadas almacenados

como archivos, estos se identifican escribiendo su nombre entre comillas. P.ej:

Prog "SUBRUTINA"

Como colofón de todo lo aprendido hasta ahora, ¡veamos un interesante juego!

EL JUEGO TRIYURSEL

Este juego lo he diseñado especialmente para este manual, y creo he procurado

que muestre todas las características que hemos visto hasta ahora. Para él

me he basado en la idea del programa del test de miopía visto anteriormente.

El juego consiste en lo siguiente: el usuario ve una figura (un rectángulo)

moviéndose aleatoriamente por la pantalla un número determinado de veces.

Después, la pantalla se borra y el jugador debe intentar acertar la posición

de la última figura dibujada utilizando el cursor gráfico.

Además, el nivel de dificultad va aumentando en cada ocasión. Esto quiere

decir que la figura se moverá más veces y, especialmente, que el tamaño de la

figura disiminuirá.

Sin más preámbulo, he aquí el programa. Ocupa dos zonas de memoria, y los

usuarios de calculadoras anteriores a la fx-9700G deberán cambiar las refe-

rencias a "TRIYURSEL" por 0 y a "TRIDIBU" por 1 (u otras zonas de programa),

debido a que no disponen de facilidad de editor de ficheros.

PROGRAMA TRYYURSEL

'TRIYURSEL BY JABA

10 -> M[0]:' Límite x

7 -> M[1]:' Límite y

1 -> H:'Número de movimientos

Lbl 0

M[0]+5 -> M[0]:'Incrementar tamaño de pantalla x

M[1]+3 -> M[1]:'Incrementar tamaño de pantalla y

Range 1,M[0],0,1,M[1],0

"¡ABRE LOS OJOS!"_

Prog "TRIDIBU"

Isz h

'En A y en B se ha devuelto la posición inferior izquierda del último dibujo

Plot_:'Entrada del usuario

X<=A+6 => Y<=B+6 => X>=A => Y>=B => Goto 2

"HAS FALLADO"_

Goto 3

Lbl 2

"¡BRAVO!"

Lbl 3

Goto 0

/PROGRAMA "TRIDIBU"/

H->O:'Copiar el número de movimientos a otra variable para no perderlo

Lbl 0

Cls

Int( (M[0]-6)Ran#)+1 -> A:'Restar 6 y sumar 1 para evitar alcanzar los bordes

de la pantalla al dibujar el rectángulo

Int( (M[1]-6)Ran#)+1 -> B

'Dibujar el rectángulo

Plot A,B

Plot A+5,B

Line

Plot A+5,B+5

Line

Plot A,B+5

Line

Plot A,B

Line

Dsz O

Goto 0

Cls

Como puede observase, "TRIDIBU" es una subrutina del programa principal que

se encarga de dibujar la figura. Su "interfaz" es el siguiente:

Entrada: M[0] y M[1], límites x e y. H, número de repeticiones.

Salida : A y B, posición inferior izquierda x e y de la última figura.

Efectos laterales : La variable O es afectada.

Creo que el programa está suficientemente bien comentado como para que puedas

entenderlo sin problemas. ¡Pruébalo!

Observación: si usas una 9x50, deberás cambiar M[0] y M[1] por M y N, respec-

tivamente (en este caso el cambio es sencillo).

UN PROGRAMA MÁS SERIO

    ¡Cualquiera podría decir que sólo utilizamos la calculadora para jugar!

    Por ello te presento el siguiente programa que da un enfoque algo más serio a la programación.

    Desde la fx-7700, es posible el cálculo de derivadas en un punto de terminado. Pero esto es algo limitado, ya que lo realmente interesante sería obtener el polinomio de la función derivada.

    El siguiente programa no lo logra, pero se acerca bastante. Lo que hace es dibujar la gráfica de la derivada de una función dada. Puede ser excepcionalmente útil si deseas comprobar la correción de una derivada dada, pues sólo hay que usar mi programa y luego superponer la gráfica de la función que has obtenido, y ver si coinciden.

El programa pide tres datos: el valor mínimo de x, el valor máximo, y el incremento entre punto y punto. A mayor incremento, mayor velocidad pero menor exactitud. La función a derivar debe estar almacenada en la memoria de gráficos Y1.

Además, el programa realiza un ajuste automático del rango de pantalla para mostrar la mejor imagen posible.

Veámoslo:

'DIBUJAR DERIVADA

"MIN"?->M

"MAX"?->N

"PASO"?->P

"¡POR FAVOR,ESPERE!"

0->A:' Minimo

0->B:' Maximo

' Aquí ponemos a 0 el valor mínimo y el máximo, así logramos que el ajuste

vertical de rango sea el más cerrado posible a la gráfica.

M->Z

' Z almacena el punto actual de cálculo

' Primera pasada: buscamos máximo y mínimo para ajustar el rango

Lbl 0

d/dx (Y1,Z)->T

' Almacenar en T la derivada en el punto de Z de Y1

' Veamos si cambian el máximo y/o el mínimo

T<A=>T->A

T>B=>T->B

' Cerrar el bucle

Z+P->Z

Z<=N=>Goto 0

' Con el máximo y el mínimo, ajustar el rango

Range M,N,1,A,B,1

' Dibujar la derivada

M->Z

Cls

Lbl 1

d/dx (Y1,Z)->T

Plot Z,T

Line:' Esto hace que la gráfica dibujada sea continua.

Z+P->Z

Z<=N=>Goto 1

Plot _

EL JUEGO VOLDAR

    VOLDAR es un auténtico juego de ROL para las CASIO FX, y posiblemente el programa más adictivo jamás creado para funcionar en una CASIO (ejem). VOLDAR es demasiado extenso para explicarlo aquí, pero está bien estructurado y deberías entenderlo con tus nuevos conocimientos. Puedes descargar versiones para CFX9850 y para CFX9800 en mi página de descarga.

    Los diversos ficheros que componen VOLDAR están en el subdirectorio VOLDAR. Se incluyen dos versiones, una para el interface PL-121 y otra en ASCII puro. La versión de ASCII se obtuvo directamente de la de PL-121 gracias a mi programa PL2CTF.

    Posibles adaptaciones a otros modelos:

-CASIO fx6300: no hay manera de hacer funccionar VOLDAR en esta calculadora

sin "castrarlo".

-CASIO fx7700GE: con un poco de trabajo puuede hacerse funcionar VOLDAR. Lo que hay que hacer es cambiar todos los nombres de programa (como GENPER o VERPER) a nombres de áreas de programa para que puedan ser almacenados en la 7700. También hay que eliminar todas las referencias a colores. El programa ocupa unos 3200 bytes, con lo que dejará muy poca memoria libre. Además, debemos eliminar las dos rutinas de guardar y recuperar situaciones (programas G y L) pues usan un tamaño de matriz demasiado grande para la 7700.

-CASIO fx9700G: sólo hay que eliminar los comandos de colores.

Como curiosidad, los programas G y C de VOLDAR. Estos programas permiten guardar y recuperar el estado de la calculadora en cualquier momento en una matriz, almacenando en ella todas las memorias. Desgraciadamente estos programas no funcionarán en modelos más bajos que la 9700 porque usa una matriz de 1x31 que no admiten esas calculadoras.

UN TRUCO PARA COMBINAR MODOS DE TRABAJO

Es posible combinar distintos modos de trabajo en un mismo programa, p.ej,

MATRIX y BASE-N. Esto puede hacerse usando la memoria de función para copiar instrucciones escritas en un modo distinto al del programa en el propio programa.

Ejemplo:

Entramos en el modo MATRIX y tecleamos:

DET Mat A

y esto lo almacenamos en la memoria de función f1 (sino sabes cómo, mira el manual de la CASIO).

Ahora escribimos un programa en el modo COMP, y cuando queramos podemos recuperar las órdenes de f1, de tal modo que podemos escribir cosas como:

cos DET Mat A que de otra forma no serían posibles.

Nota: la memoria de función también es muy útil para copiar programas entre distintas áreas.

Desgraciadamente la memoria de función no puede emplearse en el modo de edición de fichero de las fx-9700 y cfx-9800, lo cual es una limitación seria e incomprensible.

EL PROGRAMA PL2CTF

Este programa creado por mí es muy sencillo pero puede ahorrar mucho trabajo; su cometido es convertir un fichero en formato del interfaz PL121 al formato estándar CTF.

EL PROGRAMA CTF2PL

Realiza el trabajo inverso. Y éste sí que es especialmente útil para los que tengan el interfaz PL-121 y no deseen construir el cable de CAS.

LOS PROGRAMAS DE EJEMPLO

    En el directorio PROGRAMAS puedes encontrar algunos programas seleccionados por mí en formato CTF; muchos no han sido escritos por mí sino por grandes expertos en programación de calculadoras cuyas direcciones de e-mail podrás encontrar en los propios programas.

    Es especialmente interesante el generador de fractales tipo Julia-Mandelbrot, desgraciadamente reservado sólo a aquellos cuyos modelos de calculadora admitan números complejos.

(c) 1998-2003 Javier Basilio 1