Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: reylor en 14 Enero 2019, 09:47 am



Título: Error con un número
Publicado por: reylor en 14 Enero 2019, 09:47 am
La cosa es que mi programa funciona correctamente, hasta que saca un numero y el contador se vuelve loco. El código es un bingo, el cual crea dos cartones y va creando bolas y gana el primer cartón que descarte mas números, y lo que pasa, es que, todo funciona bien, hasta que sale el numero 88, cuando sale ese número, los contadores se vuelven locos y no he conseguido encontrar el error tonto que tendré, si alguien me puediese ayudar..!. Les dejo el código abajo, con la parte donde yo creo que esta el error separado por /*****, gracias.
Código:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>

void ImprimoPrincipio();
int GeneradorNumero();
void ImprimirCarton1(int[]);
void ImprimirCarton2(int[]);

int main(void){
    int y=0, z, a, sacadas[100], bolas=0, final=0, contador1=0, contador2=0;
    int numerosCarton1 [100], numerosCarton2[100], numerosBolas[100];
    int vectorCarton1[20], vectorCarton2[20];
    srand(time(NULL));
    ImprimoPrincipio();
    for(int i=0;i<100;i++){             //Genero numeros de Carton1 (100)
        numerosCarton1[y]=i+1;
        y++;
    }
    y=0;
    for(int j=0;j<100;j++){             //Genero numeros de Carton2 (100)
        numerosCarton2[y]=j+1;
        y++;
    }
    y=0;
    for(int u=0;u<100;u++){             //Genero numeros de bolas (100)
        numerosBolas[y]=u+1;
        y++;
    }
    for(int i=0;i<20;i++){                  //Creo vectorCarton1 (20)
        do{
            z=GeneradorNumero();
        }while(numerosCarton1[z]==0);
        vectorCarton1[i]=numerosCarton1[z];
        numerosCarton1[z]=0;
    }
    for(int j=0;j<20;j++){                      //Creo vectorCarton2 (20)
        do{
            z=GeneradorNumero();
        }while(numerosCarton2[z]==0);
        vectorCarton2[j]=numerosCarton2[z];
        numerosCarton2[z]=0;
    }
    printf("\nCarton1:\n");
    ImprimirCarton1(vectorCarton1);
    printf("\nCarton2:\n");
    ImprimirCarton2(vectorCarton2);
    getchar();
    do{
        system("cls");
        ImprimoPrincipio();
        do{
            z=GeneradorNumero();
        }while(numerosBolas[z]==0);
        a=numerosBolas[z];
        numerosBolas[z]=0;
        sacadas[bolas]=a;
        printf("Bolas: ");
        for(int i=0;i<=bolas;i++){
            printf("%d ", sacadas[i]);
        }
        bolas++;
        //**************************************************
        for(int j=0;j<20;j++){
            if(vectorCarton1[j]==a&&a!=88){
                vectorCarton1[j]=0x58;
                contador1++;
                printf("\nContador1=%d\n",contador1);
            }
            if(vectorCarton1[j]==a&&a==88){
                vectorCarton1[j]=0x58;
                contador1++;
                printf("\nContador1=%d\n",contador1);
            }
        }
        for(int u=0;u<20;u++){
            if(vectorCarton2[u]==a&&a!=88){
                vectorCarton2[u]=0x58;
                contador2++;
                printf("\nContador2=%d\n",contador2);
            }
            if(vectorCarton2[u]==a&&a==88){
                vectorCarton2[u]=0x58;
                contador2++;
                printf("\nContador2=%d\n",contador2);
            }
        }
        //******************************************************
        printf("\nCarton1:\n");
        ImprimirCarton1(vectorCarton1);
        printf("\nCarton2:\n");
        ImprimirCarton2(vectorCarton2);
        if(contador1==20){
            printf("Gana el Jugador 1\n");
            final=1;
        }
        if(contador2==20){
            printf("Gana el Jugador 2\n");
            final=1;
        }
        getchar();
    }while(final==0);
    return 0;
}

void ImprimoPrincipio(void){
    printf("----------------------------\n");
    printf("Juego del bingo simplificado\n");
    printf("----------------------------\n");
}

int GeneradorNumero(void){
    int num;
    num=rand()%100;
    return num;
}

void ImprimirCarton1(int vectorCarton1[]){
    int v;
    for(int j=0;j<20;j++){
        if(vectorCarton1[j]==0x58){
            printf("%c", vectorCarton1[j]);
            printf("  ");
            if(j==4||j==9||j==14||j==19){
                printf("\n");
            }
        }else{
            printf("%d",vectorCarton1[j]);
            v=vectorCarton1[j]/10;
            if(v<1){
                printf("  ");
            }else{
                printf(" ");
            }
            if(j==4||j==9||j==14||j==19){
                printf("\n");
            }
        }
    }
}

void ImprimirCarton2(int vectorCarton2[]){
    int v;
    for(int j=0;j<20;j++){
        if(vectorCarton2[j]==0x58){
            printf("%c", vectorCarton2[j]);
            printf("  ");
            if(j==4||j==9||j==14||j==19){
                printf("\n");
            }
        }else{
            printf("%d",vectorCarton2[j]);
            v=vectorCarton2[j]/10;
            if(v<1){
                printf("  ");
            }else{
                printf(" ");
            }
            if(j==4||j==9||j==14||j==19){
                printf("\n");
            }
        }
    }
}



Título: Re: Error con un número
Publicado por: MAFUS en 14 Enero 2019, 12:51 pm
Tienes código redundante y cosas que se pueden simplificar pero explícame esto. Porque por una cosa u otra el programa hace lo mismo exactamente.

Código
  1. if(vectorCarton1[j]==a&&a!=88){
  2.    vectorCarton1[j]=0x58;
  3.    contador1++;
  4.    printf("\nContador1=%d\n",contador1);
  5. }
  6. if(vectorCarton1[j]==a&&a==88){
  7.    vectorCarton1[j]=0x58;
  8.    contador1++;
  9.    printf("\nContador1=%d\n",contador1);
  10. }


Título: Re: Error con un número
Publicado por: reylor en 14 Enero 2019, 13:02 pm
Porque he intentado solucionar el problema con la bola 88, poniendo esos dos ifs, porque pensaba que así, cuando la bola fuera distinta a 88, se metiera en un if, y si es igual se meta en otro, porque he visto que lo que realmente hace el programa es que cuando detecta la bola 88, empieza a sumar en los contadores sin ningún control.


Título: Re: Error con un número
Publicado por: CalgaryCorpus en 14 Enero 2019, 15:26 pm
Cuando marcas lo ya visitado con el numero 0x58 estas usando el numero 88 para marcar.
Esto podria marcar varias posiciones antes que pueda aparecer el 88.
Cuando este aparece finalmente, tu logica hara que la condicion sea cierta para todas las posiciones que has marcado, y haras entonces que el contador crezca tanto como marcas haya.

Solucion?  Usa un valor mayor que 100 para marcar.


Título: Re: Error con un número
Publicado por: reylor en 14 Enero 2019, 15:42 pm
No lo he entendido bien, ¿a que te refieres exactamente?, por cierto, muchas gracias por la ayuda.


Título: Re: Error con un número
Publicado por: CalgaryCorpus en 14 Enero 2019, 16:03 pm
Reemplaza cada 0x58 por un numero mayor que 100, por ejemplo 101.


Título: Re: Error con un número
Publicado por: reylor en 14 Enero 2019, 16:04 pm
vale, ahora si, muchas gracias!