Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: HectorSersi en 11 Diciembre 2018, 19:00 pm



Título: Error al compilar
Publicado por: HectorSersi en 11 Diciembre 2018, 19:00 pm
Buenas, me sale un error al compilar y luego en la puntuación me salen numeros negativos cuando deberían salir numeros pequeños...Es un error que nunca me habia salido y no se por que es.

https://gyazo.com/dd40d2b77b7fa13ba755a169e3b819fe

Código
  1. bool esProbablePasarse(double puntosMaquina, const tCartasPorAparecer cartas)
  2. {
  3. int dato, variable = 0, variable2 = 0, probabilidad;
  4. bool pasarse;
  5. dato = 7.5 - puntosMaquina;
  6.  
  7. for (int i = dato; i < 8; i++)
  8. {
  9. variable = variable + cartas[i];
  10. }
  11.  
  12. for (int i = 0; i < 8; i++)
  13. {
  14. variable2 = cartas[i] + variable2;
  15. }
  16.  
  17. probabilidad = variable / variable2;
  18.  
  19. if (probabilidad < 0.5)
  20. {
  21. pasarse = false;
  22. }
  23. else
  24. pasarse = true;
  25.  
  26. return pasarse;
  27.  
  28. }


Título: Re: Error al compilar
Publicado por: AlbertoBSD en 11 Diciembre 2018, 19:12 pm
Código:
int dato;



Título: Re: Error al compilar
Publicado por: HectorSersi en 11 Diciembre 2018, 19:14 pm
Código:
int dato;



Me sigue dando el error


Título: Re: Error al compilar
Publicado por: AlbertoBSD en 11 Diciembre 2018, 19:20 pm
Par empezar el tipo de dato de la variable Dato es double no Int, no puedes o mas bien vas a tener errores por guardar un dato entero cuando realemnte esperas un tipo de dato flotante o double.

Segundo segun veo tu Screenshot.

Código:
for (int i = dato; i < 8; i++)
{
variable = variable + cartas[i];
}

Iguales i al valor de dato pero cuando realizas una Operacion en dato como:

Código:
dato = 7.5 - puntosMaquina;

El resultado no va a ser siempre el que esperes, a no ser que estes 100% seguro que la operacion siempre va a devolver un numero entero.

ahora el error que te aparece es que estas tratando de acceder a una region de memoria no valida, ya sea que te excediste del limite del arreglo o la variable cartas es apuntador No valido. (Cosas que no podemos saber por que no tenemos acceso al resto del codigo.

Te recomiendo colocar Mejores nombres a tus variables por que los nombres de "dato" y "variable" son muy escuetos.

Saludos


Título: Re: Error al compilar
Publicado por: HectorSersi en 11 Diciembre 2018, 19:42 pm
Par empezar el tipo de dato de la variable Dato es double no Int, no puedes o mas bien vas a tener errores por guardar un dato entero cuando realemnte esperas un tipo de dato flotante o double.

Segundo segun veo tu Screenshot.

Código:
for (int i = dato; i < 8; i++)
{
variable = variable + cartas[i];
}

Iguales i al valor de dato pero cuando realizas una Operacion en dato como:

Código:
dato = 7.5 - puntosMaquina;

El resultado no va a ser siempre el que esperes, a no ser que estes 100% seguro que la operacion siempre va a devolver un numero entero.

ahora el error que te aparece es que estas tratando de acceder a una region de memoria no valida, ya sea que te excediste del limite del arreglo o la variable cartas es apuntador No valido. (Cosas que no podemos saber por que no tenemos acceso al resto del codigo.

Te recomiendo colocar Mejores nombres a tus variables por que los nombres de "dato" y "variable" son muy escuetos.

Saludos

Gracias, como puedo haberme pasado si yo he definido el array como
Código
  1. typedef int tCartasPorAparecer[8];
  y con el for he hecho que lea hasta el 8 a si que no creo que me haya pasado... y lo de no valido no se como ver si es eso...


Título: Re: Error al compilar
Publicado por: K-YreX en 11 Diciembre 2018, 20:46 pm
Primero que tienes que cambiar todas las variables de <int> a <double> como ya te han comentado. Sino vas a perder los decimales de los cálculos.

El problema de compilación que te da puede ser por pasar ese tipo de dato así. Es una cosa que no te puedo decir seguro ya que nunca lo he usado.

Y el primer <for> tiene que empezar desde 0, la diferencia entre "variable" y "variable2" es que una tiene que tener el número de cartas de cada tipo por su valor y la otra tiene que acumular el número de cartas sólo. Por lo que lo puedes hacer todo en un mismo <for>.

Y por último, un código que sea:
Código
  1. bool variable;
  2. if(condicion)
  3.    variable = true;
  4. else
  5.    variable = false;
Es mejor suponer un valor inicial y solo lo cambias una vez:
Código
  1. bool variable = false;
  2. if(condicion)
  3.    variable = true;
Pero esto último es simplemente como recomendación, de la otra forma funciona igual. Suerte. :-X
PD: No cites un mensaje para responder, dale arriba del todo o abajo del todo donde pone "responder" y no agregues citas a no ser que sea para comentar algo específico de lo que ha dicho otra persona.


Título: Re: Error al compilar
Publicado por: CalgaryCorpus en 11 Diciembre 2018, 21:31 pm
Si la variable es booleana, más corto

Código
  1. variable = condicion;