Artículo publicado en el número 7 de RetroWiki Magazine
CONTANTES, READ/DATA/RESTORE
Una constante es un valor que no cambiará a lo largo de la ejecución del programa, en BASIC no existe la definición de constantes, pero se pueden simular usando variables. Pongo un ejemplo de un conversor de grados a radianes, para lo que usaremos el valor de PI, y luego guardaremos el valor de la relación entre grados y radianes. Una vez calculados estos valores, no cambiarán ya en el resto del programa:10 REM Constantes 20 LET PI=3.1416 30 LET RD=180/PI 40 INPUT "Valor en grados: ",G 50 IF (G=0) THEN STOP 60 LET R=G/RD 70 PRINT G;" grados son ";R;" radianes" 80 PRINT
En BASIC existe otro mecanismo para definir valores que no cambian a lo largo
de la ejecución, la instrucción DATA permite acceso secuencial a datos, es una
especie de almacén en el que almacenar cosas, con la limitación de que solo
se pueden ver de una en una y una tras otra.
Ejemplo sencillo, pedimos una fecha y la imprimimos en formato texto con el
nombre del mes en lugar de su número:
100 REM IMPRESION DE FECHAS110 INPUT "Dia: ";D120 IF (D=0) THEN STOP130 IF (D<1 or="">31) THEN PRINT "Dia no valido" :
GOTO 110140 INPUT "Mes: ";M150 IF (M=0) THEN STOP160 IF (M<1 or="">31) THEN PRINT "Mes no valido" :
GOTO 140170 INPUT "Año: ";A180 IF (A=0) THEN STOP190 LET M$=""200 RESTORE 400210 FOR I=1 TO M220 READ M$230 NEXT I240 PRINT : PRINT "Fecha: ";D; " de ";M$;" de ";A250 PRINT : PRINT260 GOTO 110400 DATA "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto"410 DATA "Septiembre","Octubre","Noviembre","Diciembre"
El programa pide primero día, mes y año, si se deja a cero cualquiera el programa
termina, si se introduce un día o mes fuera de rango también termina. Luego
pone en blanco la variable m$ (ojo, existe una variable llamada m y otra llamada
m$, son diferentes y no tienen nada que ver entre sí, lo he hecho así para que
se vea claramente este tema). Llama a la instrucción RESTORE, que vuelve
a poner a cero el contador interno para los DATA, lee el número de meses
indicado en la variable m el data correspondiente, la primera vez que pasa por
el bucle lee “Enero”, la segunda vez lee “Febrero”, y así sucesivamente. El
resultado de la ejecución del programa es este:
Pensemos que lo vamos a hacer multi formato o multi idioma, es muy sencillo
el cambio, ya que la instrucción RESTORE tiene como opción la línea a partir
de la cual empezamos a leer datos, por lo que solos necesario tener dos secuencias
de DATA
100 REM IMPRESION DE FECHAS 110 INPUT "Dia: ";D 120 IF (D=0) THEN STOP 130 IF (D<1) OR (D>31) THEN PRINT "Dia no válido" : GOTO 110140 INPUT "Mes: ";M 150 IF (M=0) THEN STOP 160 IF (M<1) OR (M>31) THEN PRINT "Mes no válido" : GOTO 140170 INPUT "Año: ";A 180 IF (A=0) THEN STOP 190 INPUT "Formato (C/L): ",F$ 200 IF (F$="l") THEN F$="L" 210 IF (F$="c") THEN F$="C" 211 IF (F$<>"L") AND (F$<>"C") THEN PRINT "Formato no válido"
: GOTO 190 220 REM Proceso ------------------------------- 230 LET M$="" 240 IF (F$="L") THEN RESTORE 400 241 IF (F$="C") THEN RESTORE 420 250 FOR I=1 TO M 260 READ M$ 270 NEXT I 280 PRINT : PRINT "Fecha: ";D; " de ";M$;" de ";A 290 PRINT : PRINT 300 GOTO 110 310 REM Datos ------------------------------- 400 DATA "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto" 410 DATA "Septiembre","Octubre","Noviembre","Diciembre" 420 DATA "Ene","Feb","Mar","Abr","May","Jun"
430 DATA "Jul","Ago","Sep","Oct","Nov","Dic"
Este programa es muy similar al anterior, solo que pide una variable adicional con el tipo de formato, la pone en mayúsculas para evitar comparaciones, y según su valor usa una u otra línea de DATA
Avanzamos con el BASIC, ir probando cosas de los DATA, que ofrecen un mecanismo sencillo para almacenar cosas en el propio programa.
Jose Antonio Vaqué Urbaneja, podéis
contactar conmigo en mi mail
contactar conmigo en mi mail

No hay comentarios:
Publicar un comentario