• Domingo 12 de Mayo de 2024, 03:05

Autor Tema:  Uso De Listas  (Leído 2207 veces)

sirespi

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Uso De Listas
« en: Domingo 14 de Noviembre de 2004, 21:48 »
0
Buenas a todos.

Aver os comento una cosilla. Tengo una aplicacion que lela un contador cada que recibo datos por elpuerto serie. COmo esta aplicacion , en teoria, se debe de tirar funcionando hasta varios dias, tengo el siguiente problema.

El contador es una variable tipo long, y cada vez qeu recibo un dato por el puerto serie, lo aumento en uno. El problema esta en que llegara un momento en qeu supere el valor tope (2147483647) y entonces me dara un mensaje de desbordamiento. Me han dicho que hay algo llamado lista (nunca llegue a verlas en c++) que me puede solucionar el tema

Alguien sabe com ova esto. Es facil o requiere mucho codigo???

Un saludo y gracias

scorpion25acv

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Uso De Listas
« Respuesta #1 en: Lunes 15 de Noviembre de 2004, 04:07 »
0
Salu2 sirespi,

se me ocurre una idea, talves puedas usar otro contador, para q en el caso de q el primero llegue al tope , lo reinicies, y aumentes el segundo,  por ejem ..

Código: Text
  1. Dim Contador1, Contador2 as Long
  2.  
  3. ' y en alguna parte del codigo preguntas
  4.  
  5. IF Contador1 >= 2147483647 Then
  6.   Contador1 = 0
  7.  Contador2 = Contador2 + 1
  8. End If
  9.  
  10.  
Entonces, talves si el segundo se desborda puedes usar un tercero y lugo calculas o cuentas el total a partir del primero segun cantidad de reinicios del contador.

Para el caso de listas ason estructuras de datos, hya hay de varios tipos Listas enlazadas, doblemente enlazadas, listas circulares, asi como tambien hay de otros tipos de estructuras como las pilas, pero la verdad en VB no las he usado, las vi alguna vez en pascal, de maner  muy basicas , pero si quieres, te paso ese codigo de ejmplo...
Espero te sirva de ayuda...

sirespi

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: Uso De Listas
« Respuesta #2 en: Jueves 18 de Noviembre de 2004, 07:52 »
0
Gracias scorpion.

El problema que le veo a usar otra variable, que ya lo pense, es qeu tengo que seguir lelvando la cuenta. POr lo tanto, si empiezo con otra variable, le tengo qeu sumar lo que llevaba del primer contador, y automaticamente la vuelvo a desbordar.

Estoy mirando, porque he hecho unos calculos e igual a la velocidad que recibo datos por el puerto serie puedo con la variable long puedo tener para almacenar datos durante mas de 50 dias seguidos, espero que eso les valga, sino te pregunto los de las listas o las pilas esas

Sagutxo

  • Miembro MUY activo
  • ***
  • Mensajes: 320
    • Ver Perfil
Re: Uso De Listas
« Respuesta #3 en: Jueves 18 de Noviembre de 2004, 11:41 »
0
Salu2. Solo un comentario.
No te es posible usar un double como contador, porque solo con los decimales que tiene creo que tendrás de sobras.

Dudo que no hayas pensado en esto, pero por si acaso :)

Agur. :comp:
Mi mujer tiene un físico bárbaro!!!. Einstein.

sirespi

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: Uso De Listas
« Respuesta #4 en: Viernes 19 de Noviembre de 2004, 07:43 »
0
Hola SAgutxo.

No me es posibl eusar una variable double, ya qu elo que tengo qeu contar son ciclos. Cada vez qeu entro en el evento de recepcion del puerto serie, cuento 1, no puedo contar 0.9, porque sino, al final del muestreo, diria que he entrado, por ejemplo, 89,4 veces en el evento. Tiene que ser variable enteras.

Pero bueno, muchas gracias, yo creo que la final no va a hacer falta, pero nunca viene mal aprender algo para futuras cosas.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Uso De Listas
« Respuesta #5 en: Viernes 19 de Noviembre de 2004, 09:43 »
0
Hola Sirespi.

Sagutxo da una opción adecuada...

Con un tipo double puedes almacenar números desde 1,79769313486232E308 a
-4,94065645841247E-324 para valores negativos y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos.

En una variable double ocupa en almacenamiento 8 bytes, un long tan sólo 4.
A una variable double le puedes asignar tranquilamente el valor 1.

Además de esto, sería muy buena idea utilizar como incremento para el contador un valor decimal. Para hayar la cuenta final, tan sólo habría que multiplicar el contador por la unidad seguida de tantos ceros como decimales tenga el incremento:
Código: Text
  1.  
  2. Private dContador As double
  3.  
  4. Private Sub SumaUno()
  5.    dContador = dContador + 0.001
  6. End Sub
  7.  
  8. Private Sub Resultado
  9.    MsgBox "Cuenta: " & dContador * 1000
  10. End Sub
  11.  
  12.  

Ten en cuenta que aunque utilizaras más variables, al querer sumar el contenido de una con el valor de la siguiente multiplicado por su valor máximo podrías obtener un desbordamiento de igual forma. Tendrías que usar variables (una matriz dinámica sería lo tal) de tipos más pequeños y luego mediante una función operar entre cada una para ir 'montando' el número en un string.

Chao.