ON GoTo en el Spectrum ---------------------- El Basic del Spectrum es famoso por carecer de la sentencia ON GOTO/GOSUB, cuya sintaxis era: ON cond GOTO n1,n2, n3,... etc. y ON cond GOSUB n1,n2, n3,... etc - muy utiles para saltos condicionales Debido a ello se recurrió a varias alternativas: 1) el metodo de Atari - el GOTO calculado: GOTO (n*cond) - Ejemplo: GOTO 100*n - saltas a la linea dependiendo de 'n' 2) el GoTo computado: GOTO n1*(cond=1)+n2*(cond=2)+... etc 3) el Goto con AND - o sea 'ir a n1 si cond1' : GOTO (n1 AND cond1)+(n2 AND cond2)+(... etc) De lo contrario había que hacer uso de una gran catidad de lineas: IF cond1 THEN GOTO n1 ... etc Claro está todo eso quedaba atras con el BetaBasic, pero sino se puede usar como en el caso del +3... Ahora tengo esta otra alternativa con FN: DEF FN o(n,a$)=VAL a$((n-1)*5+1 TO (n-1)*5+4) En este caso todos los numeros se almacenan dentro de una cadena como valores de 4 digitos mas un separador que puede ser la coma, un espacio o lo que sea. Veamos la funcion en accion: 1) Ejemplo de ON Goto: 100 REM demo ON GOTO 120 CLS : LET a$="Precio total " 140 INPUT "Introducir precio F.F. "';p 160 PRINT "Seleccione Impuesto" 200 PRINT "1-1 a 8 CV" 220 PRINT "2-8 a 12 CV" 240 PRINT "3-12 a 16 CV" 260 PRINT "4-Mayor a 16 CV" 280 INPUT i 300 GO TO FN o(i,"0320,0360,0420,0460") 310 PRINT "Seleccione correctamente" 315 GO TO 160 320 PRINT a$;p+p*.14 340 GO TO 140 360 PRINT a$;p+p*.20 400 GO TO 140 420 PRINT a$;p+p*.25 440 GO TO 140 460 PRINT a$;p+p*.40 480 GO TO 140 2) Ejemplo de ON Gosub: 1000 REM demo ON GOSUB 1010 LET a$="Bifurcacion a subrutina " 1020 INPUT "Introduzca opcion 1-3 ";h 1040 GO SUB FN o(h,"1500,1600,1700") 1050 GO TO 1020 1500 REM subrutina 1 1520 PRINT a$;1 1540 RETURN 1600 REM subrutina 2 1620 PRINT a$;2 1640 RETURN 1700 REM subrutina 3 1720 PRINT a$;3 1740 RETURN 9990 DEF FN o(n,a$)=VAL a$((n-1)*5+1 TO (n-1)*5+4) La ventaja con las funciones DEF del Spectrum es que son ubicables en cualqueir numero linea. 3) Otros ejemplos: 50 INPUT a 100 IF a=1 THEN LET beta =100 110 IF a=2 THEN LET beta =300 120 IF a=3 THEN LET beta =500 todas estas lineas pueden ser reemplazadas por: 100 LET beta = FN o(a,"0100,0300,0500,0460") siempre y cuando los valores sean numeros de solo 4 digitos Es mas simple y ahorra codigo pues ya no tiene uno que tipear tanto AND, parentesis y signos +. Como se ve en los ejemplos puede usarse no solo con GOTO, también con RESTORE, RUN, y PRINT y la imaginacion es el limite. Francisco Leon zx_if1@hotmail.com