Un cable con este programa, please!

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Galileo
rst 0
Mensajes: 41
Registrado: Dom Ago 12, 2007 10:50 pm
Ubicación: Murcia (España)
Contactar:

Un cable con este programa, please!

Mensaje por Galileo » Jue Jun 23, 2016 9:06 pm

Código: Seleccionar todo

   5 REM Funciona bien en Sam BASIC
  10 LET a=1
  20 LET n=1
  30 LET z=0.25
  40 LET g=SQR 0.5
  50 LET j=1
  60 LET old=0
  70 IF a=old THEN GO TO 150
  80 LET old=a
  90 LET x=(a+g)*.5
 100 LET g=SQR (a*g)
 110 LET z=z-n*(x-a)^2
 120 LET n=n+n
 130 LET a=x
 140 GO TO 70
 150 PRINT a^2/z
No tengo máquinas físicas, todo lo he probado en emulación. El caso es que en Sam BASIC funciona bien, pero no en un ZX Spectrum normal, ni con la ROM SE BASIC (que se supone corrige todos los bugs de BASIC del ZX). ¿Alguien sabría decirme por qué me suelta el mensaje Bad argument 110:1?

Para quien tenga curiosidad por saber de qué va el programa, estoy intentando resolver en Sinclair BASIC tantas tareas propuestas en la web RosettaCode.org como sea capaz. Esta en concreto está descrita en http://rosettacode.org/wiki/Arithmetic- ... lculate_Pi.
El Spectrum no necesita ser actualizado cada equis años, y SIEMPRE es compatible consigo mismo (chúpate esa, BG).

Avatar de Usuario
dandare
Herbert
Mensajes: 82
Registrado: Sab Jun 04, 2016 9:42 pm
Ubicación: I Register

Re: Un cable con este programa, please!

Mensaje por dandare » Jue Jun 23, 2016 9:45 pm

Hola,
te confirmo que en un +3 también da bad argument. No te puedo dar una respuesta clara, pero me imagino que tiene que ver con cómo implementa el basic la función (^). Cambiando esa línea por "LET z=z-n*(x-a)*(x-a)" tienes el resultado esperado.

Un saludo!
D.
_.. ._ _.

Galileo
rst 0
Mensajes: 41
Registrado: Dom Ago 12, 2007 10:50 pm
Ubicación: Murcia (España)
Contactar:

Re: Un cable con este programa, please!

Mensaje por Galileo » Vie Jun 24, 2016 10:18 pm

dandare escribió:Hola,
te confirmo que en un +3 también da bad argument. No te puedo dar una respuesta clara, pero me imagino que tiene que ver con cómo implementa el basic la función (^). Cambiando esa línea por "LET z=z-n*(x-a)*(x-a)" tienes el resultado esperado.

Un saludo!
D.
Gracias por confirmarlo. Al menos, este es un error que "da la cara".

A propósito, para la tarea que estoy llevando a cabo me gustaría saber si hay una ROM más apropiada que la SE BASIC (que, por lo demás, me parece bastante buena) o, tal vez, un emulador diferente al ZX Spin y que se amolde mejor a mi propósito.
El Spectrum no necesita ser actualizado cada equis años, y SIEMPRE es compatible consigo mismo (chúpate esa, BG).

Avatar de Usuario
dandare
Herbert
Mensajes: 82
Registrado: Sab Jun 04, 2016 9:42 pm
Ubicación: I Register

Re: Un cable con este programa, please!

Mensaje por dandare » Sab Jun 25, 2016 12:53 am

Hola, no tengo mucha información sobre opciones de basic para spectrum. En su día usé el beta basic y el colt (que compilaba) y me gustaban los dos, aunque te hablo de hace casi 30 años! Por lo que puedo tener recuerdos erróneos :)

Por lo menos, puedes probarlos, que no cuesta nada, a ver si te gustan.
Respecto a emuladores, creo que te vale cualquiera para lo que quieres. Yo uso spectaculator porque me gusta el debugger y, de vez en cuando, uso fuse.
El que te resulte más familiar y te guste más, valdrá :).

Suerte!
_.. ._ _.

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Un cable con este programa, please!

Mensaje por mcleod_ideafix » Jue Jun 30, 2016 10:38 pm

El operador a^b se implementa en Sinclair BASIC como EXP (b*LN a). El problema es que aunque a^b está definido en Matemáticas para a<0 si b vale 2, la implementación que se usa en el Spectrum no permite que a sea nunca negativo, ya que no existe el logaritmo de un número negativo.

Y en tu programa, el error de argumento inválido ocurre porque en determinado momento, x vale alrededor de 0.85 y a vale 1, por lo que su resta es un valor negativo y de ahí el fallo.

La solución: o bien multiplicas por si mismo, como te ha dicho dandare, o bien pones valor absoluto, así: (ABS (x-a))^2

En la versión del Acorn BBC Basic que existe para Spectrum no se da este problema.
Web: ZX Projects | Twitter: @zxprojects

Galileo
rst 0
Mensajes: 41
Registrado: Dom Ago 12, 2007 10:50 pm
Ubicación: Murcia (España)
Contactar:

Re: Un cable con este programa, please!

Mensaje por Galileo » Vie Jul 01, 2016 5:35 pm

Gracias por la explicación, mcleod_ideafix. Así pués, no es un bug propiamente dicho, sino una implementación del operador limitada por su diseño.

P.D.: La verdad es que no me gusta nada BBC Basic.
El Spectrum no necesita ser actualizado cada equis años, y SIEMPRE es compatible consigo mismo (chúpate esa, BG).

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot], Google [Bot] y 8 invitados