Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Simulador de sistema de apuesta, no encuentro el error!!

Estas en el tema de Simulador de sistema de apuesta, no encuentro el error!! en el foro de C/C++ en Foros del Web. Hola, hice un programa en C que simula un sistema de apuesta pero me imprime mal la variable (apuesta), tampoco funciona como deberia pero creo ...
  #1 (permalink)  
Antiguo 30/04/2012, 09:37
 
Fecha de Ingreso: abril-2012
Ubicación: Mexico
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Simulador de sistema de apuesta, no encuentro el error!!

Hola, hice un programa en C que simula un sistema de apuesta pero me imprime mal la variable (apuesta), tampoco funciona como deberia pero creo q es por eso de que la variable no toma el valor q deberia creo q es un error en el tipo de dato pero no lo se me pueden ayudar este es el codigo.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

void encuentraMayor (long long int veces[N][N],long long int bank[N][N]);
long long int SistemaB (long long int (*bankroll),long double (*apuesta),long long int semilla,long long int vueltas, float prcnto_g, float prcnto_p);

int main()
{    
    long long int na[N][N], i, j, s, p;
    long long int v[N][N];
    long long int bank[N][N];
    long double apuesta[N][N];
    long long int manos=10000;
    float a_g, a_p;
    
    a_g=0.1;
    a_p=0.1;
    
    srand (time (NULL));
    
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            v[i][j]=0;
        }        
    }
                    
    for (p=0;p<100;p++)
    {
        
        for (i=0;i<N;i++)
        {
            for (j=0;j<N;j++)
            {
                apuesta[i][j]=10;
            }        
        }
        
        for (i=0;i<N;i++)
        {
            for (j=0;j<N;j++)
            {
                bank[i][j]=100;
            }        
        }        
        
        s=rand () %RAND_MAX;    
     
        for (i=0;i<N;i++)        
        {
            for (j=0;j<N;j++)
            {
                na[i][j]=SistemaB (&(bank[i][j]),&(apuesta[i][j]),s,manos,a_g,a_p);
                a_g=(i+1)/10;
                a_p=(j+1)/10;                
            }
        }
        
        printf ("\n");
        
        for (i=0;i<N;i++)        
        {
            for (j=0;j<N;j++)
            {
                printf ("%lld   ",bank[i][j]);
            }
            printf ("\n");
        }
        
        encuentraMayor (v,bank);              
    }
    
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            printf ("%lld,%lld = %lld\n",i,j,v[i][j]);
        }        
    }
    
    return (EXIT_SUCCESS);
}

void encuentraMayor (long long int veces[N][N],long long int bank[N][N])
{
    long long int i, j, mayor=-2;
        
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            if (bank[i][j]>mayor)
            {
                mayor=bank[i][j];
            }
        }
    }
    
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            if (mayor==-1)
            {
                break;
            }
           
            if (bank[i][j]==mayor)
            {
                veces[i][j]++;
            }
        }
    }    
    
    return ;
}

long long int SistemaB (long long int (*bankroll),long double (*apuesta),long long int semilla,long long int vueltas, float prcnto_g, float prcnto_p)
{
    long long int na=0, banknet=(*bankroll), bi=(*bankroll), b=1, qpaso;
    
    srand (semilla);
    
    (*apuesta)=10;
    
    do
    {
        qpaso=rand () %2;
        
        if ((*apuesta)>(*bankroll))
        {
            printf ("B Fondos insuficientes %LF\n",(*apuesta)); /*esto es lo que imprime mal, imprime algo asi como esto: -6374687364187346817264*/
            (*bankroll)=-1;
            break;
        }
        
        if ((*bankroll)<banknet)
        {
            bi=banknet;            
            b=0;            
            if (qpaso==1)
            {
                (*bankroll)+=(*apuesta);
            }
            else
            {
                (*bankroll)=(*bankroll)-(*apuesta);
            }
        }
        else
        {   
            if (qpaso==1)
            {
                if (b==0)
                {
                    (*apuesta)=10;
                    b=1;
                }
                
                (*bankroll)+=(*apuesta);                
                banknet=(*bankroll);                
                (*apuesta)=(banknet-bi)*prcnto_g;
            }
            else
            {
                (*bankroll)=(*bankroll)-(*apuesta);
                (*apuesta)=(*apuesta)*prcnto_p;
            }        
        }
        
        if (((*apuesta)-(int) (*apuesta))<.6)
        {
            (*apuesta)=(int)(*apuesta);
        }
        else
        {                    
            (*apuesta)=((int) (*apuesta))+1;
        }
        
        na++;
        
    }while (na<vueltas);
    
    return na;
}
  #2 (permalink)  
Antiguo 30/04/2012, 13:45
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Simulador de sistema de apuesta, no encuentro el error!!

Hola! no uses long double apuesta[N][N]; por algun motivo no lo toma o da error, solo usa double apuesta[N][N]; PAra imprimir no utilices LF me parece que no es valido ese formato, usa lf
Otra cosa q vi es que comparas un long con un double, ejemplo if((*apuesta)>(*bankroll)). tenes que castear el double a long para que la comparacion sea mas correcta
Como no tengo idea de como trabaja el sistema de apuesta no te puedo decir mas, ya que cosas como
Código C:
Ver original
  1. if (((*apuesta)-(int) (*apuesta))<.6)
  2.         {
  3.             (*apuesta)=(int)(*apuesta);
  4.         }
no entiendo para q lo haces. ¿¿¿apuesta - apuesta¿¿?? ¿y a apuesta le volves a asignar apuesta????

Saludos

PD: pone un resumen de como trabaja el sistema de apuesta
  #3 (permalink)  
Antiguo 30/04/2012, 15:41
 
Fecha de Ingreso: abril-2012
Ubicación: Mexico
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Simulador de sistema de apuesta, no encuentro el error!!

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! no uses long double apuesta[N][N]; por algun motivo no lo toma o da error, solo usa double apuesta[N][N]; PAra imprimir no utilices LF me parece que no es valido ese formato, usa lf
Otra cosa q vi es que comparas un long con un double, ejemplo if((*apuesta)>(*bankroll)). tenes que castear el double a long para que la comparacion sea mas correcta
Como no tengo idea de como trabaja el sistema de apuesta no te puedo decir mas, ya que cosas como
Código C:
Ver original
  1. if (((*apuesta)-(int) (*apuesta))<.6)
  2.         {
  3.             (*apuesta)=(int)(*apuesta);
  4.         }
no entiendo para q lo haces. ¿¿¿apuesta - apuesta¿¿?? ¿y a apuesta le volves a asignar apuesta????

Saludos

PD: pone un resumen de como trabaja el sistema de apuesta
En la parte que dices de volver a asignarle apuesta lo que hago es redondearla.

El sistema se supone que simula el lanzamiento de una moneda funciona asi:

inicias con una cantidad de dinero (bankroll), y se fija un numero de vueltas (partidas), la apuesta inicial es 10, si pierdes apuestas un porcentage de la ultima apuesta (prcnto_p) y sigues apostando hasta recuperar lo perdido, si ganas apuestas un porcentage de lo ganado hasta el momento (prcnto_g).

todo esto lo hace con diferentes valores de los porcentajes.

lo que tiene que imprimir son los bankrolls finales y hacer un conteo con la funcion encuentraMayor para saber combinacion de porcentajes obtiene el mayor bankroll.
  #4 (permalink)  
Antiguo 30/04/2012, 16:44
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Simulador de sistema de apuesta, no encuentro el error!!

ahhh ok ahora entiendo un poco mejor, hicist los cambio q t marq y te anda mejor??
  #5 (permalink)  
Antiguo 30/04/2012, 17:08
 
Fecha de Ingreso: abril-2012
Ubicación: Mexico
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Simulador de sistema de apuesta, no encuentro el error!!

acabo de cambiar los tipos double a enteros para ver si funcionaba con valores enteros y si lo hizo!!
significa que el error esta en las operaciones que hago con (*apuesta), pero sigo sin saber cual es el error, alguna idea??

Etiquetas: encuentro, funcion, int, programa, simulador, sistema, apuestas, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.