Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Resta da siempre como resultado 0
#1
Hola,

este código no funciona más en todas las versiones de la 1.9.3 en adelante. Hasta la 1.9.2 funcionaba. Empleadas bajo Windows 10.

Debeo restar 1 de una variable a dos dimensiones, pero el resultado es siempre 0 aunque el valor inicial no es 1:

Code:
SUB addest()

  CLS

  ' Determina qué habilidad estamos entrenando (1-5)

  w = abi(7,n)

  ' -----------------------------------------------------------------------
  ' ACA ESTÁ EL PROBLEMA:

  ' Sube de 1 el número de turnos de entrenamiento requerido

  abi(6,n) = abi(6,n) - 1

  ' EL RESULTADO ES SIEMPRE 0 AUNQUE abi(6,n) EN ESTE CASO ESTÁ PUESTO A 5
  ' -----------------------------------------------------------------------

  ' Si el entrenamiento aún no ha terminado, sale

  IF abi(6,n) > 0 THEN PRINT AT 8,1; "TURNI: ";abi(6,n); AT 1,3; PAPER naz; "\{i7} PILOTA IN ADDESTRAMENTO ": GOTO esci3

  ' Calcula el resultado del entrenamiento

  pseudorand()

' risultadd:

  abi(w,n) = abi(w,n) + rand

  ' Nivel maximo 9

  IF abi(w,n) > 9 THEN abi(w,n) = 9

  ' Imprime el resultado

  PRINT AT 1,3; PAPER naz; "\{i7} RISULTATO ADDESTRAMENTO "

  ' Marca el piloto nuevamente como disponible

  pilost$(n) = "D"

esci3:

  PRINT AT 4,1; pilo$(n); AT 6,2; abl$(w); ": "; abi(w,n)

  premitasto()

END SUB


Si en lugar de la variable dimensionada empleo una variable fija, el código funciona como deseado:

Code:
SUB addest()

  CLS

  ' Determina qué habilidad estamos entrenando (1-5)

  w = abi(7,n)
  k = abi(6,n)

  ' Sube de 1 el número de turnos de entrenamiento requerido

  k = k - 1

  ' Si el entrenamiento aún no ha terminado, sale

  IF k > 0 THEN PRINT AT 8,1; "TURNI: ";k; AT 1,3; PAPER naz; "\{i7} PILOTA IN ADDESTRAMENTO ": GOTO esci3

  ' Calcula el resultado del entrenamiento

  pseudorand()

' risultadd:

  abi(w,n) = abi(w,n) + rand

  ' Nivel maximo 9

  IF abi(w,n) > 9 THEN abi(w,n) = 9

  ' Imprime el resultado

  PRINT AT 1,3; PAPER naz; "\{i7} RISULTATO ADDESTRAMENTO "

  ' Marca el piloto nuevamente como disponible

  pilost$(n) = "D"

esci3:

  abi(6,n) = k

  PRINT AT 4,1; pilo$(n); AT 6,2; abl$(w); ": "; abi(w,n)

  premitasto()

END SUB
Reply
#2
Descubrií la solucción al problema  Big Grin

En todas las ocasiones del utilizo de la variable dimensionada abi(8,10) había una donde la segunda dimensión estaba definida sobre 15 en lugar de 10. Esto causaba faltas en la localización en la memoria del contenido de la variable.

Por consiguiente, el código ahora funciona también con la versión 1.9.6.

Perdoneme por la falsa alarma  Angel
Reply
#3
Si compilas con --debug-array te comprueba los Index out of Range (a costa de menos velocidad y memoria). Lo puedes compilar con eso temporalmente y ver si el programa funciona (te debería salir al BASIC con ese error).
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)