Tengo el siguiente programa que pretende resolver el problema denominado "Casting out nines"
http://rosettacode.org/wiki/Casting_out_nines:
Código: Seleccionar todo
10 LET Base=10
20 LET N=2
30 LET c1=0
40 LET c2=0
50 LET k=1
60 IF k>=(Base^N) THEN GO TO 150
70 LET c1=c1+1
80 IF FN m(k,Base-1)=FN m(k*k,Base-1) THEN LET c2=c2+1: PRINT k;" ";
90 LET k=k+1
100 GO TO 60
150 PRINT '"Trying ";c2;" numbers instead of ";c1;" numbers saves ";100-(c2/c1)*100;"%"
160 STOP
170 DEF FN m(a,b)=(a/b-(INT (a/b)))*b: REM Mod function
El resultado no es el esperado, se salta números. El problema radica en la comparación de la línea 80. Si pruebo a hacer
el resultado es 1. Lo mismo con
. Pero cuando comparo ambos resultados (1=1) el resultado es... 0 (¡falso!). He probado a guardar el resultado de ambas llamadas en sendas variables. Las compruebo y, efectivamente, obtengo 1 en cada una. Pero cuando confronto ambas variables (a=b) el resultado vuelve a ser 0 (???). Si asigno a la variable A el valor 1 y hago lo mismo con la variable B, funciona correctamente (A=B -> 1). Lo he probado con SE BASIC y pasa exactamente igual. Sin embargo, Sam BASIC sí ofrece el resultado correcto.
El Spectrum no necesita ser actualizado cada equis años, y SIEMPRE es compatible consigo mismo (chúpate esa, BG).