Is 'HowToBasic' a parody?

Guía Completa de Programación en BASIC

05/08/2017

Valoración: 4.37 (12165 votos)

Sumergirse en el mundo de la programación puede parecer una tarea abrumadora, especialmente para los más jóvenes. Sin embargo, existen lenguajes diseñados para ser la puerta de entrada perfecta a este universo. Uno de ellos es BASIC, un lenguaje que, a pesar de sus años, sigue siendo una herramienta fantástica para enseñar los conceptos fundamentales de la programación. Su simplicidad, su reducido conjunto de comandos y su capacidad para ilustrar cómo funcionan los programas lo convierten en la elección ideal para principiantes.

What is a BASIC programming tutorial?
The tutorial is split into a number of lessons, each explaining a subject and giving one or more examples. The purpose of this tutorial is not just teaching how to program in BASIC language in particular, but also about programming ideas and concepts in general.

Este tutorial está diseñado como una serie de lecciones que te guiarán paso a paso, utilizando la versión AppleSoft BASIC. No te preocupes si no tienes un ordenador Apple II de la época; existen excelentes simuladores en línea donde podrás probar cada uno de los ejemplos que te presentaremos. Nuestro objetivo no es solo enseñarte a escribir código en BASIC, sino también a pensar como un programador, explorando conceptos universales como la recursividad, la búsqueda binaria, el ordenamiento de datos y mucho más.

Índice de Contenido

Los Bloques de Construcción de un Programa BASIC

Todo programa en AppleSoft BASIC se compone de una serie de líneas, cada una identificada por un número entero no negativo, conocido como "número de línea". Cuando el programa se ejecuta, las instrucciones se procesan en orden ascendente según estos números. Es una práctica común numerar las líneas en incrementos de 10 (10, 20, 30, etc.). ¿Por qué? Esta costumbre deja espacio para insertar nuevas líneas de código en el futuro sin tener que renumerar todo el programa. Por ejemplo, si necesitas añadir una instrucción entre las líneas 10 y 20, simplemente puedes usar el número 15.

Cada línea contiene comandos especiales que le dicen al ordenador qué hacer. Algunos de los más comunes son PRINT (para mostrar texto en pantalla), INPUT (para recibir datos del usuario), IF...THEN (para tomar decisiones) y FOR...TO (para crear bucles). También puedes incluir comentarios en tu código usando el comando REM (abreviatura de "remark" o "comentario"). El ordenador ignora por completo todo lo que sigue a un REM en una línea, pero es una práctica invaluable para que tú u otros programadores puedan entender la lógica del código en el futuro.

Ejemplo Práctico: El Algoritmo de Euclides

Para ver estos conceptos en acción, analicemos un programa que calcula el máximo común divisor (MCD) de dos números utilizando el famoso algoritmo de Euclides. Este ejemplo nos servirá para desglosar la estructura y la lógica de un programa BASIC.

05 REM CALCULA EL MCD USANDO EL ALGORITMO DE EUCLIDES 10 HOME: TEXT 20 LET A = 1071: LET B = 462 30 IF A < B THEN T = A: A = B: B = T 40 PRINT "A = "; A; ", B = "; B 50 C = A - INT (A / B) * B 60 A = B: B = C 70 IF B > 0 GOTO 40 80 PRINT "EL MCD ES "; A 90 END

Vamos a analizarlo línea por línea:

  • Línea 05: Un comentario que explica el propósito del programa.
  • Línea 10: El comando HOME limpia la pantalla, y TEXT asegura que estemos en modo texto. Usamos dos puntos (:) para poner múltiples comandos en una sola línea.
  • Línea 20: Asignamos los valores iniciales a nuestras variables A y B. El comando LET es opcional, pero mejora la legibilidad.
  • Línea 30: Una línea crucial. Usamos IF...THEN para comprobar si A es menor que B. Si la condición es verdadera, intercambiamos sus valores para asegurar que A siempre sea el número mayor.
  • Línea 40: Usamos PRINT para mostrar los valores actuales de A y B en cada paso del algoritmo.
  • Línea 50: Calculamos el resto de la división de A entre B y lo guardamos en la variable C. AppleSoft BASIC no tiene un operador de módulo (MOD), así que lo calculamos manualmente usando la función INT, que devuelve la parte entera de un número.
  • Línea 60: Actualizamos los valores de A y B según el algoritmo de Euclides.
  • Línea 70: Comprobamos si el algoritmo ha terminado. Si B es mayor que cero, usamos GOTO 40 para saltar de nuevo a la línea 40 y repetir el proceso. Esto crea un bucle.
  • Línea 80: Una vez que B es cero, el bucle termina y esta línea se ejecuta, imprimiendo el resultado final, que está almacenado en A.
  • Línea 90: El comando END detiene la ejecución del programa.

Interactuando con el Usuario: El Comando INPUT

El programa anterior es útil, pero siempre calcula el MCD de los mismos dos números. Para hacerlo más interactivo, podemos usar el comando INPUT, que pausa el programa y espera a que el usuario introduzca un valor desde el teclado.

20 PRINT "INTRODUCE EL PRIMER NUMERO: ";: INPUT A 22 PRINT "INTRODUCE EL SEGUNDO NUMERO: ";: INPUT B 25 IF A <= 0 OR B <= 0 OR A <> INT(A) OR B <> INT(B) THEN HOME: GOTO 20

Hemos reemplazado la línea 20 original por dos nuevas líneas que piden al usuario los valores para A y B. Además, hemos añadido la línea 25, una validación importante. Usando los operadores lógicos OR y <> (distinto de), comprobamos si los números introducidos son naturales (mayores que cero y enteros). Si no lo son, limpiamos la pantalla y volvemos a pedirlos.

Creando Bucles: La Clave de la Automatización

Como vimos en el ejemplo del MCD, la capacidad de repetir un conjunto de instrucciones es fundamental en la programación. A esto se le llama un bucle o iteración. AppleSoft BASIC ofrece principalmente dos formas de crear bucles.

Is HowToBasic a good YouTube channel?
March 24, 2018. HowToBasic is recognized by the Wikitubia community as one of the best on YouTube! Community content is available under CC-BY-SA unless otherwise noted.

Bucles con GOTO

Ya lo hemos utilizado. Consiste en una instrucción GOTO que, bajo cierta condición evaluada con un IF, hace que el programa salte hacia atrás a una línea anterior para repetir un bloque de código. Es flexible, pero si se usa en exceso, puede llevar a lo que se conoce como "código espagueti", difícil de leer y depurar.

Bucles con FOR...TO

Esta es una forma mucho más estructurada y legible de crear bucles, especialmente cuando sabemos de antemano cuántas veces queremos que se repita una acción. La estructura es simple: FOR I = 1 TO 10 ... NEXT I. Este código ejecutará las instrucciones entre FOR y NEXT diez veces. La variable `I` (conocida como variable de control) se incrementará automáticamente en 1 en cada iteración.

10 REM SUMA DE LOS NUMEROS DEL 1 AL 10 20 S = 0 30 FOR N = 1 TO 10 40 S = S + N 50 PRINT "N = "; N; ", SUMA = "; S 60 NEXT N 70 END

El comando FOR también puede incluir un parámetro opcional STEP para definir el incremento. Por ejemplo, FOR N = 1 TO 10 STEP 2 haría que N tomara los valores 1, 3, 5, 7 y 9.

Tabla Comparativa de Bucles

CaracterísticaBucle GOTOBucle FOR..TO
EstructuraManual con GOTO y una condición IF.Estructurado con FOR, TO, STEP y NEXT.
Variable de controlDebe ser inicializada e incrementada manualmente.La variable se gestiona automáticamente.
Condición de salidaSe debe definir explícitamente con un IF.Implícita cuando la variable alcanza el valor final.
LegibilidadMenos legible, puede llevar a "código espagueti".Más legible y estructurado.
Uso idealBucles con condiciones de salida complejas o no numéricas.Bucles con un número conocido de iteraciones.

¡Añadiendo Color! Los Modos Gráficos

BASIC no se limita solo al texto. AppleSoft BASIC incluye dos modos gráficos principales: baja resolución (LO-RES) y alta resolución (HI-RES).

  • Modo LO-RES (Baja Resolución): Se activa con el comando GR. Ofrece una cuadrícula de 40x48 píxeles y una paleta de 16 colores. Es ideal para gráficos de bloques y llenados de color rápidos. Los comandos clave son COLOR=N para establecer el color, PLOT X,Y para dibujar un píxel, y HLIN y VLIN para dibujar líneas horizontales y verticales.
  • Modo HI-RES (Alta Resolución): Se activa con HGR (modo mixto con texto) o HGR2 (pantalla completa). Ofrece una resolución mucho mayor de 280x192 píxeles, pero con una paleta más limitada de 8 colores. Aquí, se usa HCOLOR=N para el color y HPLOT X,Y para dibujar un punto. Una gran ventaja es que HPLOT también puede dibujar líneas entre dos puntos cualesquiera: HPLOT X1,Y1 TO X2,Y2.

El siguiente programa, por ejemplo, dibuja una compleja figura tridimensional (un hiperboloide) usando únicamente líneas rectas en modo de alta resolución.

10 HOME: HGR2: HCOLOR=1 20 PI = 3.14159 30 FOR A = 0 TO 2 * PI STEP PI / 60 40 X1 = 140 + 80 * COS (A) 50 Y1 = 96 + 30 * SIN (A) 60 X2 = 140 + 40 * COS (A + PI) 70 Y2 = 96 + 90 * SIN (A + PI) 80 HPLOT X1,Y1 TO X2,Y2 90 NEXT A 100 END

Subrutinas y Código Estructurado con GOSUB

A medida que los programas crecen, se vuelve esencial organizarlos en bloques lógicos y reutilizables. Para esto, BASIC nos ofrece las subrutinas. Una subrutina es un bloque de código que realiza una tarea específica y que puede ser "llamado" desde diferentes partes del programa principal.

Se utiliza el comando GOSUB seguido del número de línea donde comienza la subrutina. Por ejemplo, GOSUB 1000 transfiere el control a la línea 1000. La gran diferencia con GOTO es que, cuando la subrutina finaliza con el comando RETURN, el programa "recuerda" desde dónde fue llamada y continúa la ejecución justo en la instrucción siguiente al GOSUB. Esto permite reutilizar código de forma limpia y estructurada.

What is a BASIC programming tutorial?
The tutorial is split into a number of lessons, each explaining a subject and giving one or more examples. The purpose of this tutorial is not just teaching how to program in BASIC language in particular, but also about programming ideas and concepts in general.
10 REM PROGRAMA PRINCIPAL 20 PRINT "VOY A LLAMAR A LA SUBRUTINA..." 30 GOSUB 1000 40 PRINT "...HE VUELTO DE LA SUBRUTINA." 50 END 1000 REM ESTA ES LA SUBRUTINA 1010 PRINT "ESTOY DENTRO DE LA SUBRUTINA!" 1020 RETURN

Arrays: Almacenando Colecciones de Datos

Hasta ahora, cada variable guardaba un único valor. Pero, ¿qué pasa si necesitamos almacenar una lista de valores, como las notas de 30 estudiantes? Crear 30 variables diferentes sería muy poco práctico. La solución son los arrays (también conocidos como arreglos o matrices).

Un array es una estructura que puede contener múltiples valores del mismo tipo, accesibles a través de un índice. Se declaran con el comando DIM (dimensión). Por ejemplo, DIM NOTAS(30) crea un array llamado `NOTAS` que puede almacenar 30 valores numéricos. Para acceder al quinto elemento, usaríamos NOTAS(5). Los arrays también pueden ser de cadenas de texto (ej. DIM NOMBRES$(30)) e incluso multidimensionales para estructuras más complejas como tablas o coordenadas (ej. DIM PUNTO(10, 2) para almacenar las coordenadas X e Y de 10 puntos).

Preguntas Frecuentes (FAQ)

¿Por qué BASIC es un buen lenguaje para empezar?

BASIC fue diseñado con la simplicidad en mente. Su sintaxis es cercana al inglés, tiene un conjunto de comandos reducido y no requiere la comprensión de conceptos abstractos complejos desde el principio. Esto permite a los principiantes obtener resultados visibles rápidamente, lo cual es muy motivador.

¿Necesito un ordenador antiguo para programar en AppleSoft BASIC?

No. Aunque originalmente se ejecutaba en ordenadores como el Apple II, hoy en día existen numerosos simuladores y emuladores en línea que recrean perfectamente el entorno de AppleSoft BASIC. Puedes escribir, probar y ejecutar todos los ejemplos de este tutorial directamente en tu navegador web moderno.

¿Cuál es la diferencia entre un bucle FOR y un bucle GOTO?

Un bucle FOR...TO es una estructura de control diseñada específicamente para iterar un número predefinido de veces. Es más legible y seguro. Un bucle creado con IF y GOTO es más manual y flexible, permitiendo condiciones de salida más complejas, pero puede hacer que el código sea más difícil de seguir si no se usa con cuidado.

¿Qué son las subrutinas y para qué sirven?

Las subrutinas (invocadas con GOSUB...RETURN) son bloques de código reutilizables. Permiten descomponer un programa grande en partes más pequeñas y manejables, cada una con una función específica. Esto mejora la organización, la legibilidad y facilita la depuración del código, ya que una misma lógica no necesita ser escrita varias veces.

¿Por qué mi programa se ejecuta para siempre?

Probablemente has creado un "bucle infinito". Esto ocurre comúnmente en los bucles con GOTO cuando la condición de salida nunca se cumple. Revisa la lógica de tu comando IF para asegurarte de que en algún momento la condición para continuar el bucle se vuelva falsa y permita que el programa continúe o termine.

Si quieres conocer otros artículos parecidos a Guía Completa de Programación en BASIC puedes visitar la categoría Juegos.

Subir