Autor Tema: Incremento de variable en for  (Leído 3178 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Incremento de variable en for
« en: 11 de Septiembre de 2006, 15:18:18 »
Hola, estoy realizando un programa que mapea toda una memoria pero me ha surguido una duda. Yo hago lo siguiente:

Código: [Seleccionar]
for(dir=0;dir<=65535;++dir)

pero he notado que cuando llego al tope de dir en caso de que ponga 65534 termina de grabar y me muestra los datos pero cuando pongo 65535 se convierte en un ciclo interminable. Ahora bien, mi pregunta es si por ejemplo tengo una variable de tipo long int al llegar a su maximo valor (65535) y la incremento en 1, automaticamente se va a 0 o a 65536, digo esto porque tal vez sea esa la causa de tener un ciclo infinito. De antemano gracias.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Incremento de variable en for
« Respuesta #1 en: 11 de Septiembre de 2006, 15:34:40 »
Ponlo de esta manera, haber que tal:
Código: C
  1. for(dir=0;dir<=65535;dir++)
Es igual, lo que cambia es el incremento, que esta vez es post-incremento.

PD: Es curioso, pero estube haciendo hace tiempo prácticas con éste bucle sobre post-incremento y pre-incremento...haber qué resultados te da a tí.


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Incremento de variable en for
« Respuesta #2 en: 11 de Septiembre de 2006, 15:58:20 »
Ahora bien, mi pregunta es si por ejemplo tengo una variable de tipo long int al llegar a su maximo valor (65535) y la incremento en 1, automaticamente se va a 0 o a 65536, digo esto porque tal vez sea esa la causa de tener un ciclo infinito.

badtzdizzy depende de como esté definida el tipo "long int" en el compilador que estás usando.

En C18 por ejemplo, ira a 65536 porque una long int está definida como de 32 bits, es decir que llega hasta 4,29x10^12 aproxidamente
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Incremento de variable en for
« Respuesta #3 en: 11 de Septiembre de 2006, 17:16:01 »
Hola a ambos, respondiendo a vszener, pues hice lo que me dijiste y no, sigue en el bucle infinito. Y con respecto a lo maunix me pregunta de como está definida la variable, lo que yo leí del compilador este tipo de variable va de 0 a 65535. Entonces solo restaria saber si este tipo de variable al incrementarla en 1 vuelve a cero o qué pasa con ella?

De antemano muchas gracias por su ayuda.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Incremento de variable en for
« Respuesta #4 en: 11 de Septiembre de 2006, 17:38:07 »
Una de Aritmética:

Con 8 díigitos binarios o bits, 0 ó 1, pueden realizarse 2^8 (léase dos elevado a ocho) combinaciones distintas desde 00000000 a 11111111. O sea 256 combinaciones posibles desde 0 (en decimal) a 255 (en decimal) que completan las 256 que decimos que "caben" en 8 bits, por lo que ciertamente cuando incrementas una variable de 8 bits cuyo contenido es 255 el resultado es de nuevo 0.
 

Homólogamente con 16 dígitos binarios, 0 ó 1, pueden realizarse 2^16 (léase dos elevado a dieciseis) combinaciones distintas desde 0000000000000000 a 1111111111111111. O sea 65536 combinaciones posibles desde 0 (en decimal) a 65535 (en decimal) que completan las 65536 que decimos que "caben" en 16 bits, por lo que ciertamente cuando incrementas una variable de 16 bits cuyo contenido es 65535 el resultado es de nuevo 0.

Homólogamente con 32 dígitos binarios, 0 ó 1, pueden realizarse 2^32 ...  :mrgreen:

 
 
« Última modificación: 11 de Septiembre de 2006, 17:40:32 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Incremento de variable en for
« Respuesta #5 en: 11 de Septiembre de 2006, 17:45:48 »
Creo que va a ser eso.
La diferencia entre preincrementar o postincrementar es que empezará a ejecutarse el bucle con la variable "dir" valiendo 0 ó 1.
Si quieres que el bucle realice 65536 iteraciones ponlo mejor así,creo que debería funcionar:

dir = 0;
do {

...
...
dir++;

} while (dir != 0);

Desconectado djpalas

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 595
    • Microtronic
Re: Incremento de variable en for
« Respuesta #6 en: 11 de Septiembre de 2006, 17:49:20 »
Se me ha adelantado RedPic

Como muy bien explicado por el compañero, las variables de 16Bits van desde 0 a 65535.

Si usas un for como:

Código: C++
  1. for(dir=0;dir<=65535;dir++)

En el momento de que dir tiene el valor 65535, según la condición del for es aceptable y se realiza las operaciones oportunas del bucle. Una ves termina el bucle actualiza 65535+1=0, puesto que se genera un desbordamiento (overflow). Es la causa de que siempre es un bucle infinito.

Si quieres que se realice un bucle 65535 veces tienes que poner esta condición.

Código: C++
  1. for(dir=0;dir<65535;dir++)

Si quieres que cumpla 65536 veces, como el compañero Modulay ha dicho debería de funcionar perfectamente.

Saludos desde Cádiz, España
Web personal: http://www.microtronic.es

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Incremento de variable en for
« Respuesta #7 en: 11 de Septiembre de 2006, 18:48:21 »
Hola a ambos, respondiendo a vszener, pues hice lo que me dijiste y no, sigue en el bucle infinito. Y con respecto a lo maunix me pregunta de como está definida la variable, lo que yo leí del compilador este tipo de variable va de 0 a 65535. Entonces solo restaria saber si este tipo de variable al incrementarla en 1 vuelve a cero o qué pasa con ella?

De antemano muchas gracias por su ayuda.

Si se vuelve a cero, la condicion <= a 65535 es siempre verdadera.

En ese caso, el bucle jamás dejará de ejecutarse....

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Incremento de variable en for
« Respuesta #8 en: 12 de Septiembre de 2006, 11:36:21 »
Hola a todos

Muchas gracias a todos por sus respuestas, tomé la opción de Modulay porque con ella si puedo mapear toda la memoria, pero de verdad muchas gracias por la explicación ahora ya todo me ha quedado muy claro.

Saludos