Supongamos que nuestros tres números son O
(PEEK
23674), 255
(PEEK
23673) Y 255
(PEEK 23672).
Esto significa que hace unos 21 minutos que se encendió el ordenador. El
valor de la expresión será (65536*0+256*255+255)/50=1310.7.
Pero hay un peligro oculto: la próxima vez que se incremente el contador en l/50 segun
dos, los tres número
s
cambiarán al, Oy O. Alguna vez ocurrirá esto en el preciso momen
to en que el ordenador está calculando la expresión; entonces el +3 leerá el número O en
PEEK
23674, pero
los
otros dos valores cambiarán a cero
antes
de que el programa los
haya leído. El valor de la expresión será en ese caso (65536*0+256*0
+0)/50=0,
que evi
dentemente no es
correcto.
Una manera sencilla de evitar este problema es evaluar la expresión dos veces seguidas y
tomar la respuesta mayor. Si observa cuidadosamente el programa anterior, verá que ha
ce esto implícitamente.
Veamos un truco para aplicar esta regla. Defina las funciones:
10
DEF FN
m(x,y)=(x+y+
AB5
(x-y))/2:
REM
el mayor de x e y
20
DEF FN
uO=(65536*
PEEK
23674+256*
PEEK
23673+
PEEK 23672)/50:
REM
tiempo (puede ser incorrecto)
30 DEF FN
tO=
FN
m(
FN ut). FN
u()):
REM
tiempo (correcto)
Podemos cambiar los tres números del contador para que den el
tiempo
real en vez del
tiempo que lleva el ordenador encendido. Por ejemplo, para poner
el
contador en hora
a las 10 de la ma
ñana,
observemos que 10 horas son
IOx60 x60x50=
18ססoo0
cincuenta
vos
de segundo y que
180ססoo=65536*27+256*119+64.
Por
eso
debemos escribir los números 27, 119 y 64 en las tres posiciones de memoria, y
eso se hace con la siguiente orden:
POKE
23674,27:
POKE
23673,119:
POKE
23672,64
En los países en los que la frecuencia de la red de energía eléctrica sea de 60 Hz, el número
50 que aparece en todos estos programas debe ser cambiado por
60.
La función
INKEY$
(que no lleva argumento) lee el teclado
.
Si
en el momento de evaluar
INKEY$
tenemos pulsada una tecla sola (o combinada con
1
MAYUSCULAS
1),
el resultado
es el carácter que esa tecla da normalmente; de lo
contrario,
el resultado es la cadena
vacía.
Pruebe este programa, que funciona como una máquina de escribir:
10
IF INKEY$
<> ...,
THEN GO TO
10
20 IF INKEY$ = .... THEN GO TO 20
30 PRINT INKEY$ ;
40 GO TO
10
La línea 10 espera hasta que usted retira sus dedos del teclado; la línea 20 espera hasta
que pulsa una nueva tecla.
Sección 18. Control del tiempo
139