TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: CompSystems en 07 de Diciembre de 2014, 20:23:35

Título: QBASIC64 funciones y subrutinas
Publicado por: CompSystems en 07 de Diciembre de 2014, 20:23:35
Hola, programo calculadoras en derivados del QBASIC, por ejemplo las calculadoras de Texas Instruments lo llaman TI-BASIC, las hp'Calcs HP'BASIC.

Estoy portando unos códigos de calculadoras a QBASIC para PC, el inconveniente máximo que encontré es que cuando se pasan valores a funciones y subrutinas QBASIC las ASUME como VALOR POR REFERENCIA, pero realizando un truco, el cual es haciendo una copia de la variable, la variable original nunca se manipula, por ende permanece su valor original, bueno el problema que tengo ahora es que no logro pasar una matriz o vector,  por eejmplo

CALL RecibeVector(a) llama a la función RecibeVector(a) y aquí falla el programa por que?

Codigo

Código: Visual Basic
  1. ' PROGRAMACION MODULAR
  2. DECLARE SUB PorReferencia(c as integer)
  3. DECLARE SUB PorCopia(c as integer)
  4. DECLARE SUB NoRetornaNada(a as integer, b as integer)
  5. DECLARE FUNCTION FuncionDoble (b as integer)
  6. DECLARE SUB RecibeVector ( v(1 TO 10) as integer)
  7. DECLARE SUB ReceivesMatrix ( m( 1 TO 3 , 1 TO 4) as integer)
  8.  
  9. PRINT FuncionDoble(5) ' Escribir FuncionDoble(5);
  10.  
  11. CALL NoRetornaNada(3, 9) ' Llamado a un procedimeiento se requiere de CALL // imprime dentro del procedimiento
  12.  
  13. DIM c AS INTEGER
  14. c = 0 ' c<-0;
  15. CALL PorReferencia(c) ' PorReferencia(c);
  16. PRINT c 'Escribir c;
  17.  
  18. c = 0 ' c<-0;
  19. CALL PorCopia(c) ' PorCopia(c);
  20. PRINT c 'Escribir c;
  21.  
  22. DIM a(1 TO 10) as integer, b(1 TO 3, 1 TO 4) as integer' en base uno ' Dimension a[10],b[3,4];
  23.  
  24.  
  25. CALL RecibeVector( a() ) ´ Se requeire llamar el nombre de la variable con parentesis vacios
  26. CALL RecibeMatriz( b() )
  27.  
  28. 'FinProceso
  29.  
  30. FUNCTION FuncionDoble (b as integer) ' Funcion a<-FuncionDoble(b por copia)
  31. b_copia = b ' truco para hacer una variable por copia por que por defecto en QBASIC son por referencia
  32. FuncionDoble = 2 * b_copia ' a=2*b; // OJO: se requiere que la variable de salida de PSEINT se renombre con el mismo nombre de la funcion
  33. END FUNCTION ' FinFuncion
  34.  
  35. SUB NoRetornaNada (a as integer, b as integer) ' SubProceso NoRetornaNada(a,b)
  36. a_copia = a ' truco para hacer una variable por copia por que por defecto en QBASIC son por referencia
  37. b_copia = b
  38. PRINT a_copia + b_copia ' escribir a+b;
  39. END SUB ' FinSubProceso
  40.  
  41. SUB PorReferencia (b as integer) ' SubProceso PorReferencia(b por referencia)
  42. b = 7
  43. END SUB ' FinSubProceso
  44.  
  45. SUB PorCopia (c as integer) ' SubProceso PorCopia(c por copia)
  46. c_copia = c ' truco para hacer una variable por copia
  47. c_copia = 7
  48. END SUB ' FinSubProceso
  49.  
  50. SUB RecibeVector (v( 1 TO 10) as integer)   ' SubProceso RecibeVector(v)
  51. INPUT "v(1)=", v(1) ' Leer v[1];
  52. PRINT "v(1)="; v(1)
  53. END SUB ' FinSubProceso
  54.  
  55. SUB RecibeMatriz (m( 1 TO 3 , 1 TO 4) as integer) ' SubProceso RecibeMatriz(m)
  56. INPUT "m(1,1)=", m(1, 1) ' Leer m[1,1];
  57. END SUB ' FinSubProceso


PD un buen resumen de QBASIC

 http://www.angelfire.com/ga/metalsystem/manuales.html

Compilador mas reciente de QBASIC

http://www.qb64.net/

Título: Re: QBASIC64 funciones y subrutinas
Publicado por: CompSystems en 09 de Diciembre de 2014, 17:01:09
Solucionado, faltaba colocarle paréntesis vacio a la variable del arreglo

CALL RecibeVector( a() )

Para los que les interese QB64 puede crear applicaciones para Android-OS.