Ver Mensaje Individual
  #13 (permalink)  
Antiguo 20/01/2012, 19:02
gonzo13
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por tig0 Ver Mensaje
te petaba porque lo que hacia el programa era intentar acceder a la posicion a[-2] y a[-1], las cuales evidentemente, no son accesibles.

en python puedes representar numeros mayores que enteros de 64 bits pero en c++ no. para representar numeros mayores que el maximo de un entero de 64 bits (2 ^ 64) deberias usar una libreria externa.
El código no accede a las posiciones a[-1] y a[-2], puesto que al calcular los valores, el índice i tiene un valor inicial de dos (i = 2) y en cada iteración se incrementa en uno su valor, no se decrementa (i++).

Cita:
Iniciado por drakgoku1 Ver Mensaje
2 ^64 vaya ...

Es decir el que hizo o hizieron C / C++ su nota de la uni o del master era muy por debajo que los que hicieron python :) , eso parece :D

Bueno todos sabemos que python es más nuevo eso esta claro , pero casi todo va en C/c++ :)

Entonces que librería tengo que utilizar para que no me salga negativo ?
El nombre correcto del error se conoce como desbordamiento (u overflow en inglés), y se produce porque intentas activar más bits de los que tienes disponibles. Es decir, si dispones de 16 bits para un tipo entero, activas todos los bits a 1 (obteniendo el valor decimal límite) e intentas sumar 1 de nuevo, la variable se desborda y, por decirlo de alguna manera, "los bits se reinician". Generalmente, el desbordamiento es complicado de depurar, aunque aquí salta a la vista.

Para evitar los números negativos al desbordar (aunque en este caso te facilitan el darte cuenta porque se trata de matemáticas y la suma de dos números positivos no puede generar un número negativo), podrías usar el tipo de dato unsigned int, que sólo trabaja con valores positivos, aunque esto no te evitaría el problema, simplemente lo retrasaría.

Dependiendo de qué Sistema Operativo estés usando y qué versión del mismo, los límites de cada tipo de dato pueden variar. Por ejemplo, en Sistemas Operativos Unix, puedes consultar el rango en la libreria /usr/include/limits.h

Un saludo,
gonzo.