TI-BASIC - TI-BASIC

TI-Basic es el nombre oficial de una BÁSICO -como lenguaje integrado en Texas Instruments (TI) 's calculadoras gráficas . TI-BASIC es una familia de idiomas de tres versiones diferentes e incompatibles, lanzadas en diferentes productos:

TI rara vez se refiere al idioma por su nombre, pero el nombre TI-BASIC se ha utilizado en alguna documentación para desarrolladores.

Para muchas aplicaciones, es la forma más conveniente de programar cualquier calculadora TI, ya que la capacidad de escribir programas en TI-BASIC está incorporada. También se puede utilizar el lenguaje ensamblador (a menudo denominado "asm"), y existen compiladores C para la traducción en ensamblador: TIGCC para calculadoras basadas en Motorola 68000 (68k) y SDCC para calculadoras basadas en Zilog Z80 . Sin embargo, ambos son compiladores cruzados , lo que no permite la programación en la calculadora. TI-BASIC es considerablemente más lento que el lenguaje ensamblador (porque tiene que ser interpretado ), lo que lo hace más adecuado para escribir programas para resolver rápidamente problemas matemáticos o realizar tareas repetitivas, en lugar de programar juegos o aplicaciones con uso intensivo de gráficos. Algunos libros de instrucciones de matemáticas incluso ofrecen programas en TI-BASIC (generalmente para la variante generalizada utilizada por la serie TI-82/83/84).

Aunque es algo minimalista en comparación con los lenguajes de programación utilizados en las computadoras, TI-BASIC es, no obstante, un factor importante en la comunidad de programación. Debido a que las calculadoras gráficas de TI son necesarias para las clases de matemáticas avanzadas en muchas escuelas secundarias y universidades, TI-BASIC a menudo brinda la primera visión que muchos estudiantes tienen del mundo de la programación.

Wikilibros

Wikilibros tiene libros de texto sobre programación TI-BASIC:

Sintaxis

La sintaxis de todas las versiones de TI-BASIC es algo diferente de las implementaciones típicas de BASIC. El lenguaje en sí tiene algunas capacidades básicas de programación estructurada , pero se limita a no usar o permitir espacios en blanco o sangría. También depende de un conjunto de caracteres algo no estándar , con caracteres específicos para la asignación (la flecha "STO" derecha, no disponible en la mayoría de los conjuntos de caracteres), raíces cuadradas y cúbicas , y otros símbolos matemáticos, así como entradas tokenizadas. y almacenamiento de palabras clave. Todas las declaraciones comienzan con dos puntos, que también funcionan como separadores de declaraciones dentro de las líneas. En los modelos TI-83/84, los paréntesis de cierre, los corchetes, las llaves y las comillas se pueden omitir opcionalmente al final de una línea o antes del token STO para ahorrar espacio, aunque a veces es mejor dejarlos activados. Por ejemplo, en los modelos TI 83/84, la función de bucle for funciona mucho más lento sin cerrar paréntesis en determinadas circunstancias.

Las expresiones usan notación infija , con prioridad de operador estándar . Muchas declaraciones exigen argumentos entre paréntesis, similar a la sintaxis utilizada para funciones matemáticas. La sintaxis para la asignación (copia de datos en una variable) es inusual con respecto a la mayoría de los lenguajes de programación convencionales para computadoras; en lugar de usar una declaración let similar a BASIC con un signo igual, o un operador similar a algol:= , TI-BASIC usa un operador "STO" de flecha derecha con la sintaxis: fuente → destino . Esto es similar a varias calculadoras japonesas, como las de Casio, Canon y Sharp, que a menudo han empleado una sintaxis similar, desde que aparecieron las primeras calculadoras alfanuméricas japonesas del mercado masivo a fines de la década de 1970 y principios de la de 1980.

Flujo de control

Las declaraciones de flujo de control incluyen bloques if-then-else , bucles for , bucles while y ciclos de repetición , aunque no instrucciones de cambio . Las principales declaraciones de flujo de control son:

 If condition
 Then
 ...
 Else
 ...
 End

 For(variable,start,stop,step)
 ...
 End

 While condition
 ...
 End

 Repeat condition
 ...
 End

Inusuales para un lenguaje de alto nivel, las implementaciones de TI-BASIC incluyen declaraciones IS> (Incrementar y Omitir si es mayor que) y DS <(Disminuir y Omitir si es menor que), construcciones generalmente asociadas con lenguajes ensambladores . Se pueden etiquetar secciones de programas ; sin embargo, particularmente en los modelos Z80, las etiquetas funcionan como destinos para instrucciones o funciones Goto enMenu( lugar de como etiquetas de programa o bloque.

La disponibilidad de funciones y subrutinas depende de la implementación; las versiones disponibles en las calculadoras descendientes de TI-82 ni siquiera admiten una función similar a GOSUB , aunque es posible llamar a programas entre sí y compartir variables entre programas. Los diseños basados ​​en TI-89/92 pueden tener acceso a funciones compartidas, esencialmente programas capaces de devolver un valor.

Tipos de datos

TI-BASIC es un lenguaje de tipado fuerte y dinámico . Los tipos de datos disponibles difieren considerablemente entre las versiones 68k y Z80. No es posible crear tipos de datos definidos por el usuario sin utilizar una biblioteca escrita en ensamblado. Las listas se utilizan a menudo como reemplazo de estructuras .

TI-83/84 (Z80)

  • Variables numéricas , incluyendo A- Zy Θ(theta). Estos permiten almacenar números reales o números complejos (implementados como pares de reales) en formato de punto flotante . Los valores pueden oscilar entre 1 E -99 y 1 E 99 con hasta diez dígitos de precisión. Sin embargo, el límite de 27 variables puede ampliarse mediante el uso de listas, matrices y la manipulación de la notación de números enteros. Se puede utilizar una lista o matriz para contener variables reales únicas a las que se puede hacer referencia individualmente. Los enteros se pueden concatenar en una sola variable real delimitándolos como las mitades de enteros y decimales de un número real; A continuación, se accede a cada mitad de forma independiente a través de los comandos iPart y fPart. Las variables con valores binarios se pueden almacenar como un solo entero mediante la conversión entre base 2 y base 10.
  • Cadenas , incluidas Str0- Str9. Estos pueden almacenar cualquier número de caracteres o incluso nombres de funciones, siempre que haya memoria disponible. Se pueden evaluar como una expresión con la expr()función, que se encuentra en el catálogo.
  • Listas, incluido - , con la capacidad de crear listas adicionales. Se trata esencialmente de matrices unidimensionales que se utilizan para almacenar un número real o complejo en cada uno de sus elementos . La dimensión de una lista, su número de elementos, puede oscilar entre 1 y 999, aunque la memoria disponible puede ser un factor limitante . Cuando la dimensión de una lista se establece por debajo de lo que había sido, los elementos al final se cortan. Cuando se establece más alto, los elementos adicionales al final se rellenan con ceros. Las dimensiones se establecen almacenando un número válido en el nombre de la lista. Las listas predeterminadas se denominan L 1 –L 6 , pero se pueden crear listas personalizadas. Esto se hace configurando la dimensión de una lista a la que se hace referencia con el token L en el , seguido de un nombre que varía de 1 a 5 caracteres que comienza con una letra mayúscula - y . Se puede acceder a los elementos individuales de las listas colocando el número de elemento entre paréntesis después del nombre de la lista.L1L6 dim( ListsAZΘ
  • Matrices , incluidas [A]- [J]. Sus elementos están sujetos a las mismas restricciones que las listas. Sus dimensiones pueden definirse hasta 99x99 elementos, aunque, de nuevo, la memoria disponible lo limitará. No es posible crear matrices definidas por el usuario, por lo que solo se pueden utilizar las diez integradas.
  • Ecuación variables, entre ellas - , - , y , , . Se trata esencialmente de cadenas que almacenan ecuaciones. Se evalúan para devolver un valor cuando se utilizan en una expresión o programa. Los valores específicos, (constante, C) se pueden insertar para la variable independiente (X) siguiendo el nombre de la ecuación (dependiente, Y) por el valor constante entre paréntesis. En el siguiente ejemplo, se utiliza "(4)" (sin ningún motivo en particular). ( (4) devolvería el valor de en X = 4)Y0Y9r1r6uvwY1Y1

Los tipos de datos que no se pueden manipular directamente incluyen:

  • Imágenes ( Pic0- Pic9)
  • Programas ( prgm)
  • Bases de datos de gráficos ( GDB0- GDB9)

TI-89 (68k)

  • Enteros, que pueden almacenar una gran cantidad de datos. Las calculadoras 68k pueden almacenar números muy grandes, tan altos como , con perfecta precisión.
  • Números reales, usando coma flotante decimal . Estos almacenan hasta 14 dígitos significativos según el modelo de calculadora.
  • Números complejos , implementados como pares de reales.
  • Instrumentos de cuerda
  • Listas, que son listas enlazadas unidimensionales que admiten operaciones por elementos. En las calculadoras 68k, los elementos pueden ser números enteros, reales, números complejos, cadenas o expresiones.
  • Matrices , con elementos sujetos a las mismas restricciones en listas
  • Expresiones simbólicas , exclusivas de la serie 68k.

Los tipos de datos que no se pueden manipular directamente (escribir solo su nombre en una línea resultaría en un error) incluyen:

  • Imágenes
  • Datos
  • Programas
  • Funciones

Variables

La flexibilidad en el uso de variables varía ampliamente según el modelo de calculadora. Por ejemplo, en la TI-84 Plus , están disponibles todas las letras del idioma inglés, así como theta (Θ).

TI-83/84 (Z80)

En la TI-83/84, el programador puede crear listas cuyos nombres tengan hasta cinco caracteres. Todos los demás tipos de datos son limitados, como las 27 variables reales o complejas, y un número de nombres de variables predefinidos de otros tipos (por ejemplo, las matrices tienen que ser una de las diez variables [A]- [J]). En la TI-83/84, ciertas variables como Ansy las variables financieras tienen direcciones fijas en la RAM, lo que las hace mucho más rápidas de acceder que las variables de 27 letras. Ansactúa como una variable especial que contiene el resultado del último código evaluado. Una línea con solo una variable aún se evaluará y su contenido se almacenará Anscomo resultado. Debido a que Ansse reevalúa con tanta frecuencia, la mayoría de las veces se usa para almacenar cálculos muy temporales o para mantener valores que de otra manera serían lentos para acceder, como elementos de una lista. Todas las variables son globales.

TI-89 (68k)

Por el contrario, las calculadoras 68k permiten que todos los nombres de variables tengan hasta ocho caracteres alfanuméricos, incluido el griego . Además, las variables pueden agruparse en "carpetas" o hacerse locales para un programa declarándolas con la Localdeclaración.

Comentarios

TI-83/84 (Z80)

Los programadores de Z80 a menudo comienzan las líneas con "(comillas dobles) para indicar un comentario. Las líneas que comienzan con" en realidad se ejecutan cambiando la Ansvariable, pero esto no afecta nada más que el rendimiento a menos que Ansse lea inmediatamente después.

TI-89 (68k)

Las calculadoras 68k permiten que los programas incluyan comentarios de una sola línea , utilizando © como símbolo de comentario. Si aparece un comentario como la primera línea después de la declaración "Prgm", se muestra en la barra de estado cuando se selecciona el programa en el catálogo; estos comentarios se utilizan a menudo para documentar los nombres o tipos de parámetros. El intérprete de 68k tiene una función incorporada para almacenar el número de caracteres de espacio al comienzo de una línea, esto permite la sangría .

Funciones

TI-83/84 (Z80)

La versión Z80 de TI-BASIC hace que "funciones" explícitas como las de 68k sean imposibles. Sin embargo, todas las variables son globales, por lo que las funciones se pueden emular estableciendo variables, similares a los argumentos, antes de llamar a otro programa. Los valores de retorno no existen; la Returninstrucción detiene el programa actual y continúa donde se llamó al programa.

TI-89 (68k)

La versión 68k de TI-BASIC permite crear funciones definidas por el usuario. Las funciones tienen la misma sintaxis que los programas, excepto que usan las palabras clave Func... en EndFunclugar de Prgm... EndPrgm, y no se les permite usar instrucciones que realicen E / S, modifiquen variables no locales ni llamen a programas. Sin embargo, las funciones pueden todavía ser no pura , ya que pueden llamar funciones integradas, tales como getTime(), getKey()o rand(). Todas las funciones tienen un valor de retorno, que en ausencia de una Returndeclaración explícita es la última expresión evaluada.

Extensiones de idioma de terceros

Las aplicaciones de terceros, en orden cronológico Omnicalc, xLIB, Celtic y Doors CS, han sobrecargado las funciones TI-BASIC en las calculadoras Z80 para proporcionar funciones de lenguaje adicionales. Las bibliotecas de terceros sobrecargan las funciones sum () , real () , det () e identity () , que son manejadas e interpretadas por sus respectivas aplicaciones. Entre las funciones adicionales se encuentran rutinas de dibujo de formas rápidas, herramientas de mapas de sprites y mosaicos, habilidades de acceso y modificación de programas e IVA, características de construcción de GUI y mucho más, la mayoría de las cuales normalmente están restringidas para su uso por programadores de ensamblaje. Todas las funciones requieren que una aplicación como Doors CS 7.0 esté presente en la calculadora del usuario, lo que a veces se considera una detracción del uso de las bibliotecas.

Ejemplos de

Hola Mundo

Los siguientes programas, cuando se ejecutan, mostrarán la frase " HELLO, WORLD!".

TI-83/84 (Serie Z80)

:Disp "HELLO, WORLD!"

TI-89 (Serie 68k)

(PD: este código se puede acortar a solo la función Disp, como en la TI-83/84, y hellowld, prgm y endprgm se generan automáticamente).

:hellowld()
:Prgm
:ClrIO
:Disp "HELLO, WORLD!"
:Pause
:ClrIO
:DispHome
:EndPrgm

TI-Nspire

text "HELLO, WORLD!"

TI-Nspire CX

text "HELLO, WORLD!"

Listas y bucles

TI-83/84 (Serie Z80)

PROGRAM:LISTS
:"ASK FOR THE NUMBER OF VARIABLES
:Input "NUMBER OF VARS? ",A
:"VALIDATE INPUT OR STOP
:If A<1 or fPart(A)
:Stop
:"A FOR LOOP TO ASK FOR EACH VALUE TO BE IN THE LIST
:For(N,1,A
:Input "VAR ",B
:"STORE THE VALUE INTO THE NTH ELEMENT
:B→L1(N)
:End
:"IMPLICITLY RETURN THE FINAL LIST
:L1

TI-89 (Serie 68k)

lists()
:Prgm
:  Local n,i,c © Declare local variables n, i, and c.
:  {}→list © Initialize list as an empty list.
:  Input "Number of variables?",n 
:  For i,1,n
:    Input "Variable #"&string(i),c © & concatenates i after it is converted to a string.
:    c→list[i]
:  EndFor
:EndPrgm

Las listas tienen muchos nombres posibles, esto permite que muchos programas manipulen muchas listas sin anular los datos anteriores. Las listas de la TI-82 no pueden tener nombres personalizados (L 1 a L 6 están preprogramados). La TI-85 y la TI-86 no tienen la capacidad de manejar un nombre de variable con subíndices. La TI-81 es completamente incapaz de manejar listas. Las listas pueden ser utilizadas por las numerosas funciones integradas de TI-BASIC para calcular estadísticas, incluidos varios análisis de regresión y más . Estos se pueden llamar dentro de los programas, sin embargo, aún muestran la información mientras pausan la ejecución y no pueden almacenar resultados específicos en variables.

Recursividad

La recursividad es posible. Se puede llamar a un programa desde dentro de sí mismo o desde dentro de otro programa.

TI-83/84 (Serie Z80)

El siguiente ejemplo se utiliza para calcular factoriales . Para que funcione, Xes el parámetro de la función factorial y Adebe ser igual a 1.

PROGRAM:FACT
:If X=0
:Then
:Disp A
:Stop
:End
:XA→A
:X-1→X
:prgmFACT

TI-89 (Serie 68k)

factui()
:Prgm
:  Local n
:  Define fact(x)=Func
:    If x=0
:      Return 1
:    Return x*fact(x-1)
:  EndFunc
:  Input "Input a number", n
:  Disp "n! = "
:  Disp fact(n)
:EndPrgm

Funciones

La serie 68k distingue entre programas y funciones. Las funciones son como los programas, excepto que no permiten declaraciones que realicen E / S, incluida la modificación de variables no locales, y devuelven un valor, que en ausencia de una Returndeclaración explícita es la última expresión evaluada.

fact(x)
:Func
:  If x=0
:    Return 1
:  If x<0
:    Return undef
:  x*fact(x-1)
:End Func

Editores y herramientas

El crecimiento de la comunidad de aficionados a las calculadoras gráficas en la década de 1990 trajo consigo el intercambio y la colaboración, incluida la necesidad de compartir el código TI-BASIC en listas de correo y foros de discusión. Al principio, esto se hizo escribiendo el código TI-BASIC de la pantalla de una calculadora en una computadora a mano o, a la inversa, ingresando programas manualmente en las calculadoras. Los programas TI-BASIC se almacenan en un formato tokenizado , no se pueden editar con editores de texto de computadora estándar, por lo que a medida que la comunidad de programación de calculadoras maduró, surgió la necesidad de un convertidor automático. El formato para los programas TI-BASIC almacenados en computadora generados por la aplicación TI-GraphLink de Texas Instruments fue finalmente decodificado y se crearon herramientas de terceros para manipular estos archivos. TI creó un editor BÁSICO que incluyó en ciertas versiones del programa de vinculación TI-GraphLink, pero no ha ganado un uso generalizado. En particular, utilizó un conjunto de caracteres personalizado que no se mostraba correctamente cuando se copiaba y pegaba en foros.

En 2005, Joe Penna creó OptiBASIC, una herramienta de traducción para convertir texto del editor TI-GraphLink en Unicode estándar. El proyecto pronto se expandió para incluir un optimizador TI-BASIC basado en expresiones regulares. Independientemente, Christopher "Kerm Martian" Mitchell de Cemetech comenzó a crear un convertidor en línea para extraer contenido de texto plano (y luego en formato HTML y BBCode ) de programas TI-BASIC tokenizados, que se expandieron para incluir un editor de programas en línea, exportador y TI. -83 Plus emulador. El proyecto SourceCoder absorbió OptiBASIC a finales de 2005. El único otro editor importante de TI-BASIC actualmente en uso es TokenIDE (o "Tokens"), creado por Shaun "Merthsoft" McFall. Un editor fuera de línea, Tokens puede importar, editar y exportar programas TI-BASIC, incluye herramientas para rastrear el tamaño y la corrección del programa, y ​​ofrece características auxiliares como un editor de imágenes / sprites. Construido alrededor de definiciones de token almacenadas en archivos XML , está diseñado para ser extensible para trabajar con cualquier asignación de token especificada por el usuario.

Los programas de la serie NSprire, así como las calculadoras TI 92 plus y Voyage 200 se pueden transferir y guardar en formato de texto plano y claro (Ansi / Ascii / ISO 8859- *) y hay varios IDE para la programación de calculadoras TI. Una serie de definiciones de sintaxis de TextPad , fragmentos de código y gráficos están disponibles para las calculadoras de TI, y las definiciones de sintaxis también se han convertido al formato utilizado por el editor de Zeus . El formato de texto claro también se utiliza para el intérprete de Lua en la calculadora.

Existe un proyecto independiente para desarrollar un intérprete de PC para la variante TI89-92-Voyage 200 de TI Basic que permitiría ejecutar programas para la calculadora directamente, así como programas combinados de otros lenguajes que llaman a este intérprete. El intérprete usa archivos estándar de entrada, salida, error y registro y configuración especificables en modo consola en Windows, y un segundo programa para replicar los gráficos usados ​​en la calculadora estaría relacionado con él de la misma manera que las herramientas Tk que están integradas con Tcl , Perl , Rexx , C y otros idiomas. Un proyecto relacionado para desarrollar un tipo de herramienta Tk para su uso por VBScript es la fuente de esta herramienta. También se prevé una tercera herramienta que integra TI Basic del lado del PC con programas de hojas de cálculo y bases de datos a través de motores VBA y WSH. Este proyecto también incluye un shell de estilo Unix del lado de la calculadora e intérpretes de Rexx y Perl, un intérprete de Fortran 77, así como convertidores para ir y venir entre los diversos lenguajes de programación de calculadoras Casio, HP, Sharp y Texas Instruments y hacia y de esos y varios lenguajes de secuencias de comandos .

Ver también

Referencias

enlaces externos