Mandatos Básicos Uso de Comandos Para Programar

March 25, 2018 | Author: Luis CaDe | Category: Derivative, Quotation Mark, Array Data Structure, Calculator, Computer Memory


Comments



Description

MANDATOS BÁSICOSNOTA: 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: direccionables con los nombres Z[1]. El índice puede ser cualquier expresión. Y además B[-1]=A y B[-2] provoca "Mem Error". Defm3 -> creamos tres nuevas variables adicionales. eso equivale a A[5]=F..etc. Por cierto. en todas las CASIO existe un comando Defm que nos permite añadir nuevas variables a costa de tomar espacio de memoria.B[1]=C. Cada variable nueva consume 4 bytes de RAM. A[29] sí sería válido. Con esto tenemos una potente herramienta de programación pero . el operador ~ también puede usarse con estas variables indexadas: 0->A[0]~A[28] es igual que 0->A~Z .. A[28]=Z A[29] -> ¡en principio provoca un "Mem Error"! (ver más adelante) De igual modo B[0]=B.Z[2] y Z[3].ej: Defm0 -> sólo existen variables A~Z.. Después de esta última instrucción. P.. El número máximo de variables depende del modelo de CASIO y de la memoria libre.ej: A[3+2] A[B] y si B=5. Pero esto no es problema. ¡puede que 28 elementos de memoria sean muy pocos!.A[0]=A A[1]=B A[2]=C . p... Se trata de "?" y permite leer un carácter o número desde el teclado. Mejoremos pues el ejemplo anterior: . Sintaxis: ?->nomvar P. Encerrando un texto entre comillas. ésta se evalua y se almacena en A. Esto permite reconocer las distintas letras del alfabeto. usamos las comillas ". 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. Si el carácter es un símbolo o una letra. Si el carácter es una expresión.ej: ?->A lee un carácter del teclado y lo almacena en A. Con este operador ya podemos hacer un nuevo programa interactivo. también de Tom Lynn. se almacena su código en A.éste se muestra en la pantalla de la CASIO. La tabla completa de códigos también puede consultarse en "The CASIO programming encyclopedia". y se usa por ejemplo en el HANGMAN (ahorcado) de Tom Lynn.Lectura por teclado de variables Veamos el primer comando específico de programación. deberemos teclear y pulsar <EXE>. En la pantalla de la CASIO aparece: "?" y el cursor. Su cometido es parar la ejecución y mostrar el contenido de la memoria ANS. El resultado por pantalla será el siguiente: 1 -Disp2 -Disp3 -Disp3 . a continuación se visualiza el mensaje "-Disp-" y se espera a que el usuario pulse <EXE>.ej: 1_ 2_ 3_ Visualiza los números 1. ¿Qué sucede cuándo queremos mostrar un resultado sin finalizar el programa? Con esta utilidad existe el símbolo " ∆ " (triangulito). P."INTRODUZCA NÚMERO:" ?->A "SU INVERSO ES:" A=1/A Si omitimos el salto de línea entre las comillas y ?.2 y 3. la interrogación se muestra inmediatamente después del texto. haciendo una pausa entre cada uno con el mensaje -Disp-. P. se realiza scroll de líneas hacia arriba con una ligera pausa predefinida entre línea y línea. de lo contrario se salta a la instrucción siguiente almandato. ni de posicionar el cursor. se ejecuta el mandato. De igual modo puede mostrarse el contenido de alguna variable o el resultado de una expresión: B[3]_ ó cos5_ son instrucciones válidas. no se conoce ningún modo de borrar la pantalla de texto de la CASIO. Observaciones sobre la salida de texto: -si la pantalla ya está llena.El último 3 aparece porque el programa ha terminado de ejecutarse (ver apartado anterior).>= y >. En los modelos clásicos.=. En las calculadoras de nueva generación. LA INSTRUCCION CONDICIONAL => ¿Qué sería un programa sin condiciones? Sin duda un aburrimiento. cuya sintaxis es: expresión booleana => mandato El funcionamiento es muy sencillo: si la expresión booleana es cierta. Pero las Casio disponen de un operador condicional =>. Es equivalente a la orden en BASIC: IF expresión booleana THEN mandato. es coonmutada al modo texto antes de rea lizar la salida. También existen formas más elegantes de inputación. -si la CASIO estaba en modo gráfico. La expresión booleana puede componerse utilizando los operadores de relación accesibles a través del menú "PRGM": <=.ej: . existen órdenes de formateo de texto y para limpiar la pantalla. 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" . Así que deberemos apañárnoslas para componer las expresiones.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). 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. ej. 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. Los nombres válidos son los números del 0 al 9. a partir de ahora omitiré este comentario). el intérprete CASIO ignora el resto de la línea. pues podemos usar la primera línea para "rotular" el programa. Cuando se introduce el símbolo "'". veríamos en el listado de programas: 0 'EDADES 1 empty 2 empty ... el de comentario. si hubiésemos intrucido el anterior listado en el área 0 y el resto estuvieran vacías. Esto es especialmente útil cuando se escribe en zonas de programa y no de edición. P. y los símbolos theta y zeta. Una vez que hemos marcado una zona del programa con una Lbl. En la primera línea hemos presentado un nuevo concepto.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. las letras de A a Z. la ejecución del programa se dirige a la zona marcada. podemos "saltar" a ella con el mandato Goto. Veamos un ejemplo sencillo: . 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. Veamos este ejemplo. con lo que se nos permite crear bucles (repeticiones sucesivas de una grupo de instrucciones) y otras estructuras de control. Esto es porque el Goto redirige la ejecución del programa a la etiqueta A.Goto A "Nunca me escribirán" Lbl A "Fin" La ejecución del programa anterior visualiza el mensaje "Fin". Su verdadera potencia no se descubre hasta que lo combinamos con la operación condicional =>. 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 -dispElefantes se balanceaban sobre la tela de una araña 2 . Visto así el Goto parece un poco inútil. y el mensaje entre medias nunca llega a ejecutarse. . Para que no rabien los amantes de la programación estructurada.. instrucción i condicion => Goto z FOR i:=A TO B DO . Al alcanzar A el valor 11... -disp10 Elefantes . veamos el modo de convertir las estructuras de control más populares a formas Goto: WHILE condicion DO BEGIN instrucción 1 .-dispElefantes . La clave del bucle está en la última sentencia.. se sale del bucle (en este caso también acaba la ejecución del programa). Mientras el valor de A (que se incrementa en cada paso del bucle con A+1->A) sea menor que 11. instrucción i END se traduce: Lbl z 'z es una etiqueta no usada instrucción 1 . el bucle se repite... .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 .. 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. vamos a ver un pequeño juego de adivinanzas. 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. . Tan sólo señalar que se usan las siguientes variables: I. Vamos a utilizar la función Ran# que genera un número aleatorio entre 0 y 1. 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". Vamos allá con el juego: 'ADIVINAR NUMERO.Para concluir. almacena el número que introduce el jugador. N. Ambas funciones se alcanzan por el menú MATH. almacena el número "pensado" por la calculadora. se sigue por Instruc2.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.. Como ejemplo ilustrativo de Isz.. Su efecto es: -Isz incrementa en uno la variable NOMVAR. Es equivalente a: a:=a+1 (o -1 si es Dsz) IF a<>0 THEN instruc1 instruc2 . se sigue por Instruc11 -Si NOMVAR=0. resto de programa .. y Dsz la decrementa en 1.. veamos una versión mejorada del programa anterior (la definitiva): 'ADIVINAR NUMERO PLUS. -Si NOMVAR<>0. Su sintaxis es: Isz/Dsz NOMVAR Instruc1 Instruc2 ... 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: . El número pensado se encontrará entre 0 y 10 por el nivel de dificultad. no nos preocupamos por el carácter condicional de dicha instrucción (de hecho podría sustituirse por K+1->K). El jugador introduce un nivel del 1 al 10 (observar la comprobación de nivel no válido).escalay xmin es el punto más pequeño de x visualizable. Al contrario del modo texto. -hemos añadido un contador del número de iintentos.20. xmáx es el punto más grande de x visualizable. vamos a hacer una tímida introducción al potente modo gráfico. escalax es el incremento entre punto y punto. consulta el manual para buscar los valores correctos. NOTA PARA LOS USUARIOS DE fx-6300G. Para ello usamos la orden RANGE: RANGE xmin. Para ello usamos la instrucción de incremento Isz.1.20) . Así. es decir.-hemos añadido el nivel de dificultad.ymin.1) a (20.ymáx. por ejemplo: RANGE 1. 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. en la variable K.1.xmáx. esto puede ser muy útil si deseas cuidar la presentación de tus programas).1 nos da una ventana gráfica con coordenadas X e Y válidas de (1.cfx-9850 y cfx-9950: las medidas usadas de aquí en adelante posiblemente no sean válidas en tu máquina. Lo primero que debe hacerse antes de comenzar a tratar con el modo gráfico es ajustar el rango. INTRODUCCION AL MODO GRÁFICO Después de conocer las principales órdenes CASIO. Obsérvese que como K nunca tendrá el valor 0. Análogamente para y. en el que el formato de salida es muy limitado reduciéndose a una simple terminal.20.escalax. la escala de la imagen y los puntos visibles. 1. los programas escritos con ambos rangos funcionarán en todas las calculadoras. Es natural alejar el rango de los ejes de coordenadas que se dibujan en x=0 e y=0.63. En realidad . pues la CASIO siempre los dibuja y puede hacer un mal efecto en nuestros programas.127.y con incremento de una unidad entre cada pixel.0.0 (en las calculadoras 9x50 la instrucción RANGE se ha renombrado a VIEWWINDOW) Sin embargo.95. El rango estándar recomendado que suele utilizarse en los programas es: Range 1.eje x | x=95 | eje y En las calculadoras de más resolución (9x50) un rango mejor es: ViewWindow 1.0 Como puedes ver.0.1. aunque con peor calidad si no es el rango óptimo.63. este rango evita que se vean los ejes: | |***************** y=63 |* * |* VENTANA * |* * |* * |***************** --------------------. La orden Line también es muy útil.10 .ej. Su función es una línea uniendo los dos últimos puntos marcados con Plot.10 Plot 20.1 Line Plot 10. de este modo se permite observar la imagen. La orden PLOT también puede usarse sin órdenes: Plot_ En este caso. usamos la orden PLOT. La orden para limpiar la pantalla gráfica es Cls. la calculadora ajustará automáticamente la imagen.b) (columna y fila) P.20_ Dibuja dos puntos en pantalla. el usuario puede mover el cursor gráfico con los cursores de la calculadora y marcar un punto con EXE.b dibuja un punto en (a. El símbolo de visualización _ es necesario pues sino la calculadora volvería inmediatamente a modo texto. esto dibuja un rectángulo: Cls Plot 1. Para dibujar un punto. Desde el programa podremos saber el punto marcado por el usuario leyendo las variables X e Y.podemos usar cualquier rango que deseemos.1 Plot 10. PLOT a. P.ej: (a partir de ahora supondremos la calculadora en rango estándar) Cls 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. . Nótese que las coordenadas del punto no pueden ser negativa por estar supuesto el rango estándar. la comprobación consiste en ver si el punto marcado está dentro del triángulo.1 Line Plot 10.10 Line Plot 10.1 Plot 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. podemos llamar a cualquier programa en memoria desde el programa principal. SUBRUTINAS Las subrutinas en realidad consisten en ejecutar un programa dentro de otro. de modo similar a cómo se usaban en el texto. los puntos y líneas se escriben en color azul.¡Quién sabe! Tal vez algún día este programa sea usado como test de alcoholemia para conductores. y esto sólo puede cambiarse en el menú de configuración de la calculadora.ej: Green Plot_ Orange Line_ Orange Plot 1. se retorna la ejecución al punto de llamada del programa principal.2 El color del cursor gráfico es azul por defecto. Es decir. Por defecto. 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 . Se permiten hasta 10 niveles de inclusión en las llamadas. Cuando el programa llamado finalice.naranja y verde) en la pantalla gráfica. Podemos forzar el uso de otro color anteponiendo los comandos Green u Orange. p. COLORES EN LOS GRÁFICOS En los modelos cfx es posible utilizar los tres colores (azul. y los usuarios de calculadoras anteriores a la fx-9700G deberán cambiar las referencias a "TRIYURSEL" por 0 y a "TRIDIBU" por 1 (u otras zonas de programa). Además. ¡veamos un interesante juego! EL JUEGO TRIYURSEL Este juego lo he diseñado especialmente para este manual. Esto quiere decir que la figura se moverá más veces y. Después.ej: Prog "SUBRUTINA" Como colofón de todo lo aprendido hasta ahora.-DispSOY EL PROGRAMA 0 -DispEl programa 1 es una subrutina del programa 0. 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. Ocupa dos zonas de memoria. la pantalla se borra y el jugador debe intentar acertar la posición de la última figura dibujada utilizando el cursor gráfico. P. estos se identifican escribiendo su nombre entre comillas. Sin más preámbulo. he aquí el programa. Para él me he basado en la idea del programa del test de miopía visto anteriormente. En los modelos de 32kbytes también pueden llamarse a programadas almacenados como archivos. el nivel de dificultad va aumentando en cada ocasión. especialmente. que el tamaño de la figura disiminuirá. . y creo he procurado que muestre todas las características que hemos visto hasta ahora. 0.M[0].M[1].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 .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. B Line Dsz O Goto 0 Cls Como puede observase.B+5 Line Plot A.B Plot A+5./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. "TRIDIBU" es una subrutina del programa principal que se encarga de dibujar la figura. Su "interfaz" es el siguiente: .B+5 Line Plot A.B Line Plot A+5. el valor máximo. el programa realiza un ajuste automático del rango de pantalla para mostrar la mejor imagen posible. 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. 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. y ver si coinciden. Veámoslo: 'DIBUJAR DERIVADA . La función a derivar debe estar almacenada en la memoria de gráficos Y1. ya que lo realmente interesante sería obtener el polinomio de la función derivada. A mayor incremento. Creo que el programa está suficientemente bien comentado como para que puedas entenderlo sin problemas. es posible el cálculo de derivadas en un punto de terminado. respectivamente (en este caso el cambio es sencillo). Salida : A y B. límites x e y. mayor velocidad pero menor exactitud. ¡Pruébalo! Observación: si usas una 9x50. H. El siguiente programa no lo logra. Efectos laterales : La variable O es afectada. número de repeticiones.Entrada: M[0] y M[1]. deberás cambiar M[0] y M[1] por M y N. y el incremento entre punto y punto. Desde la fx-7700. pero se acerca bastante. pues sólo hay que usar mi programa y luego superponer la gráfica de la función que has obtenido. El programa pide tres datos: el valor mínimo de x. posición inferior izquierda x e y de la última figura. Pero esto es algo limitado. Además. N.B. 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. ajustar el rango Range M.ESPERE!" 0->A:' Minimo 0->B:' Maximo ' Aquí ponemos a 0 el valor mínimo y el máximo.A."MIN"?->M "MAX"?->N "PASO"?->P "¡POR FAVOR.1.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.1 . T Line:' Esto hace que la gráfica dibujada sea continua.' Dibujar la derivada M->Z Cls Lbl 1 d/dx (Y1. Z+P->Z Z<=N=>Goto 1 Plot _ .Z)->T Plot Z.
Copyright © 2024 DOKUMEN.SITE Inc.