Ir ao conteúdo
  • Cadastre-se

C Erro em geração aleatória de cartelas RESOLVIDO


Henrique Negri

Posts recomendados

Olha pessoal eu tenho que fazer um trabalho para a minha faculdade que é um bingo onde as cartelas são geradas e é efetuado o sorteio, porém cada cartela tem que possuir números que não se repitam e entre as cartelas podem se repetir o numero mas no meu código estão repetindo os números da mesma cartela, se alguém puder me ajudar com esse problema agradeço segue o código abaixo e o que está ocorrendo:   

Citação

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int lin=5, col=5;
int tabela [5][5][5];

int geração()
{
    int numero;
    numero=(rand() % 99);
    return (numero);
}
void geracao_cartela()
{
    int i, j, k=0, qc, numero, l, p;
    printf("\nQuantas pessoas irao jogar?\n");
    scanf("%d", &qc);
    printf("\nGerando as cartelas\n");
    while (k<qc){ /// qc= quantidade de cartelas
        for (i=0; i<lin; i++){
            for (j=0; j<col; j++){
                numero= geração();
                tabela [j][k]= numero;
                for (l=0; l<lin; l++){
                    for (p=0; p<col; p++){
                        if (tabela[l][p]==tabela[j]){
                            numero= geração();
                            tabela[j][k]= geração();
                        }
                    }
                }
            }
        }
        for (i=0;i<5;i++){
            for (j=0;j<5;j++){
                printf("%d\t",tabela [j][k] );
            }
            printf("\n");
        }
        getchar();
        getchar();
        k++;
    }

}

/**void verificacao()
{
    int i, j, k, qc;
    for (k=0;k<qc; k++){
        for (i=0;i<lin;i++){
            for (j=0;j<col;j++){
                if
            }
        }
    }

}*/
void main(){
    int qc, numero;
    int tabela [5][5][5];
    srand(time(NULL));

    geracao_cartela();
}
 

 

Capturar.PNG

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Henrique Negri O problema está na sua verificação de números iguais, você usa p onde ficaria k, segue uma versão melhor:

//..dentro do while
for (i=0; i<lin; i++){
  for (j=0; j<col; j++){
    //gera numero
    numero = geração();
    //busca numeros iguais/diferente
    for (l=0; l<lin; l++){
      for (p=0; p<col; p++){
        if(numero == tabela[l][p][k]){
          //gera novo numero
          numero = geração();
          //verificar novamente
          l = 0; p = 0;
        }
      }
   }
  //ja tem numero nao usado
  tabela[i][j][k] = numero;
  }
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Henrique Negri   nesse print que você postou os números não estão se repetindo não, mas lá no seu código realmente os números se repetem por que você está usando quatro loop e em alguns caso você usa a variável k e isso atrapalha na hora de colocar os números certos, então seu código com algumas modificações ficaria assim :

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int lin=5, col=5,numero;
int tabela [5][5];
int geração()
{
    numero=(rand() % 99);
    return (numero);
}
void geracao_cartela()
{
    int i, j, k=0, qc,h,l, p;
    printf("\nQuantas pessoas irao jogar?\n");
    scanf("%d", &qc);
    printf("\nGerando as cartelas\n");
    while (k<qc){ /*/// qc= quantidade de cartelas*/
        for (i=0; i<lin; i++){
            for (j=0; j<col; j++){
                do{
                    h=0;
                    numero = geração();
                    h=verifica();
                }while(h==1);
                tabela [i][j]= numero;
            }
        }
        for (i=0;i<5;i++){
            for (j=0;j<5;j++){
                if(tabela[i][j] <10)
                    printf("0%d\t",tabela [i][j] );
                else
                    printf("%d\t",tabela [i][j] );
            }
            printf("\n");
        }
        getch();
        printf("\n");
        k++;
    }
}
int verifica(){
    int i,j;
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            if(numero == tabela[i][j]){
                return 1;
            }
        }
    }
    return 0;
}
/**void verificacao()
{
    int i, j, k, qc;
    for (k=0;k<qc; k++){
        for (i=0;i<lin;i++){
            for (j=0;j<col;j++){
                if
            }
        }
    }
}*/
int main(){
    int qc;
    int tabela [5][5][5];
    srand(time(NULL));
    geracao_cartela();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!