roesler 0 Denunciar post Postado Outubro 29, 2007 Saudações! Seguinte, estou tentando fazer um trabalho pra faculdade, mas estou com muita dificuldade. Se alguém poderia me ajudar, seria grato. Faça um programa para simular um jogo de bingo com 6 jogadores, observando que: O Bingo é um jogo composto por 90 bolas numeradas de 01 a 90; As bolas são sorteadas aleatoriamente; Cada jogador pode possuir no máximo duas cartelas e cada cartela possui 15 números aleatórios diferentes; As rodadas são contínuas e os resultados possíveis são: quadra, linha, bingo e acumulado (Prêmio Máximo); Quadra: o primeiro jogador a preencher 4 números horizontais de qualquer das linhas da cartela, prêmio R$100,00; Linha: o primeiro jogador a preencher os 5 números horizontais de qualquer das linhas da cartela, prêmio R$ 120; Bingo: o primeiro jogador a preencher todos os números da cartela, prêmio R$300,00; Acumulado: o primeiro jogador a preencher a cartela até a 40a bola, prêmio R$400,00. O programa deverá ler o nome de cada jogador o número de cartelas que irá utilizar e informar os resultados atingidos, finalizando quando não houver mais bolas a sortear ou quando não houver mais prêmios a oferecer, considerando que cada um dos prêmios só poderá ocorrer uma vez. Utilize funções conforme sua própria avaliação na divisão das tarefas, mas, no mínimo utilize 1 funções para cada uma das tarefas: • sortear as bolas; • sortear os números das cartelas; • verificar os resultados. -------------------------------------------------------------------------------------------------------------- Segue abaixo o que eu consegui fazer... #include<stdio.h> #include<conio.h> #include<stdlib.h> #include <dos.h> void aleatorio(int M[3][5],int m, int n){ int i,j; srand(time(NULL)); randomize(); for (i=0;i<m;i++){ for(j=0;j<n;j++){ if(j==0){ M[i][j]=random(15)+1; } if(j==1){ M[i][j]=random(15)+31; } if(j==2){ M[i][j]=random(15)+45; } if(j==3){ M[i][j]=random(15)+60; } if(j==4){ M[i][j]=random(15)+75; } } } } void imprime(int M[3][5], int m, int n){ int i,j; for (i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%.2d\t", M[i][j]); } printf("\n"); } } void main () { clrscr(); printf("\t\t\t\tBINGO\n"); int op; char names[5,20]; do { int A[3][5],lin,col;{ aleatorio(A,3,5); printf("\t\tBINGO:\n"); imprime(A,3,5); getch(); } printf("Deseja gerar nova cartela de bingo?\n1-SIM ou 2-NAO"); scanf("%d",&op); } while(op==1); int r; int k; k = 0; printf("\t\t\t\tSORTEANDO...\n"); printf("\t\t\t\t------------\n\n"); srand(100); for (k=0;k<90;k++) { printf("%d\t\t",rand() % 90); delay(100); } sound(550); nosound(); printf("\n\t\tDeseja visualizar os resultados? S \ N"); getch(); } void sorteia(int max) { int m; int r; srand(time(NULL)); r = random(89)+1; scanf("%i",&r); printf("Numero sorteado: %i",r); } Eu gostaria de antes de sortear as tabelas, que o programa pedisse o nome do jogador e o armazenasse em um vetor. E também não sei como se faz os testes para quadra, linha, bingo, etc... Sei que não é tão simples o programa, mas qualquer ajuda é bem vinda, só pra me da uma luz e eu prosseguir. Se alguém souber algum material relacionado com eses problemas também será bem vindo. Ah, outra coisa, como faço para que os numeros sorteados não sejam repetidos? PS: Não quero nada pronto não, apenas algumas dicas, para que eu possa proceguir, pois travei aqui. Desde ja, agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Myho 2 Denunciar post Postado Outubro 29, 2007 Legal cara... continua ai q uma hora a coisa vai A unica maneira q conheço para evitar sortear numeros repetidos é a maneira q ctz você ja pensou... guardar em um vetor os numeros sorteados e comparar o novo numero sorteado com o vetor... E nao entendi bem qual a dificuldade de guardar o nome dos jogadores ou do jogador, se for soh isso, o codigo abaixo ai deve resolver... char nome[30]; cin>>nome; cout << nome; A verificação, me parece q vai ter q ser feita bem no braço... cheio de if's para verificar linhas e colunas... mas isso é pensando or cima... sei la... se eu tive mais ideias eu tento da mais uma mão =] Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Outubro 30, 2007 Bom, para ler o nome o nosso amigo Miho ja deu uma explanada. Para o sorteio eu faria da seguinte maneira. São 90 números, de 01 a 90... Então , teria um array de 90 posições. Do tipo char mesmo. Para cada numero sorteado, 1 a 90 (indice do array), marcar com 1 no array. Obviamente se ja estiver marcado é por que ja saiu. (não esquecer de zerar o array) Para a cartela... struct cartela { int nLinha1[5]; int nLinha2[5]; int nLinha3[5]; } Bom agora não tem milagre... Você vai precisar percorrer cada linha da cartela. Você poderá utilizar uma Cartela auxiliar... Onde você marcará o resultado, para não mexer na Cartela dos números(caso queira imprimi-la depois). /*resultado, ja que a cartelaAux só vai conter se o número foi sorteado ou não*/ int nSoma = 0; for(int i = 0; i < 5; i++) { nSoma += cartelaAux.nLinha1[n]; } if( nSoma == 4) quadra if( nSoma == 5) linha depois de fazer para cada linha verificar se todas as linhas juntas somam 15. Mais ou menos isso. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Giovani 104 Denunciar post Postado Outubro 30, 2007 Conforme Regras do Fórum iMasters o título do tópico será editado. Sai: TRABALHO, BINGO Entra: Bingo Compartilhar este post Link para o post Compartilhar em outros sites
roesler 0 Denunciar post Postado Outubro 30, 2007 Olá! Muito obrigado pelas dicas, foram muito bem aproveitadas. Segue o codigo abaixo do que estou fazendo. Não tenho a minima idéia se estou indo pelo caminho certo. Ps: Algumas funções ali ainda não tem nada haver ainda, mais pra ter alguma base. #include<stdio.h> #include<conio.h> #include<stdlib.h> #include <dos.h> #define MAX 6 struct jogador { char nome[5]; int vet[89]; int cartelas[3][5]; int x; int num_cartela[12]; } add_info[MAX]; /*--------------------------------*/ livre(void); void entrar(void); void mostrar(void); /*--------------------------------*/ livre(void) { register int t; for (t=0; add_info[t].nome[0] && t<MAX;++t); if (t==MAX) return -1; /* nenhum elemento livre */ return t; } /*-------------entrar-------------*/ void entrar(void) { int slot; char s[80]; slot = livre(); if (slot>5) { printf("\n\nJa possui 6 jogadores"); return; } else { printf("\n\n\nDigite o nome do jogador: "); gets(add_info[slot].nome); slot = slot + 1; } } /*-------------------------------*/ void mostrar(void) { register int t; for (t=0;t<MAX;++t) { if (add_info[t].nome[0]) { printf("%s\n", add_info[t].nome); printf("%i\n", add_info[t].num_cartela); } printf(""); } } void sorteio(int M[3][5],int m, int n){ int i,j; srand(time(NULL)); randomize(); for (i=0;i<m;i++){ for(j=0;j<n;j++){ if(j==0){ M[i][j]=random(15)+1; } if(j==1){ M[i][j]=random(15)+31; } if(j==2){ M[i][j]=random(15)+45; } if(j==3){ M[i][j]=random(15)+60; } if(j==4){ M[i][j]=random(15)+75; } } } } void imprime(int M[3][5], int m, int n){ int i,j; printf("\n"); textcolor(RED); cprintf("CARTELA SORTEADA"); printf("------------------\n\n"); for (i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%.2d\t", M[i][j]); } printf("\n"); } } void main () { clrscr(); printf("\t\t\t\tBINGO VERSAO 1.0 BETA\n"); printf("\t\t\tCurso Ciencia da Computacao\n"); printf("\t\t\t 2 Semestre\n"); printf("\t\t\t---------------------------\n"); int op; char names[5,20]; do { int A[3][5],lin,col; { entrar(); sorteio(A,3,5); imprime(A,3,5); mostrar(); getch(); } printf("Deseja adicionar outro jogador? Sim 2 - Nao"); scanf("%d",&op); } while(op==1); int r; int k; k = 0; printf("\n\t\t\t\tSORTEANDO BOLAS...\n\a"); printf("\t\t\t\t------------------\n\n"); srand(100); for (k=0;k<90;k++) { printf("%d\t\t",rand() % 90); delay(0); } sound(550); nosound(); printf("\n\t\tDeseja visualizar os resultados? S \ N"); getch(); } void sorteia(int max) { int m; int r; srand(time(NULL)); r = random(89)+1; scanf("%i",&r); printf("Numero sorteado: %i",r); } Compartilhar este post Link para o post Compartilhar em outros sites