Ir ao conteúdo
  • Cadastre-se

Simulação da mega sena


D.P.P

Posts recomendados

estou fazendo um trab que preciso entrar com os dados dos apostadores, suas dezenas apostadas, colocalas em ordem crescente e depois , quando nada for digitado na entrada nome, parar de receber dados e fazer o sorteio.

o meu problema está na condição de parada, e depois nao sei fazer comparação para saber se houve ganhador! se alguem puder fazer esta parte pra mim fico grato.

o código está assim por enquanto: http://codepad.org/NBcmJgDc

LEMBRANDO QUE A CONDIÇÃO DE PARADA DA ENTRADA DE DADOS NAO FUNCIONA, E EU TB NAO SEI PORQUE!

abraços

Link para o comentário
Compartilhar em outros sites


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

int main()
{
char nome[100][50], cidade[100][50], estado[100][50];
int cont = 0, dezenas[100][6], contdados = 0;
int i, h, j;

printf("DIGITE SEU NOME: ");
fflush(stdin);
gets(nome[contdados]);

while (nome[contdados][0] != '\0') {
printf("DIGITE SUA CIDADE: ");
fflush(stdin);
gets(cidade[contdados]);
printf("DIGITE SEU ESTADO: ");
fflush(stdin);
gets(estado[contdados]);

// ...

contdados++;
printf("DIGITE SEU NOME: ");
fflush(stdin);
gets(nome[contdados]);

}

return 0;
}

Aqui ela funcionou.

Mas no seu código acho que tinha uma { a mais ou algo assim.

Basta indentar ele e organizar que você vai conseguir ver também.

scanf("%d", &dezenas[cont]);

Essa parte do código tá errada. Você precisa pegar os números 1 por 1.

Nos seus includes você tá colocando um ";" desnecessário.

Link para o comentário
Compartilhar em outros sites

Ah, e outra coisa. Tem como eu ordenar os numeros sorteados em ordem crescente também? pra poder fazer uma comparação mais fácil?

O código do sorteio é esse

Como eu ordeno os numeros sorteados em ordem crescente?

o sorteio está nesse codigo

int seq[6]={0}, i, j;

int a;

srand(time(NULL));

seq[0]=(rand()%60)+1;

i=1;

while(i<6){

a=(rand()%60)+1;

j=0;

while((a!=seq[j]) && (seq[j]!=0) && (j<=6))

j++;

if ((seq[j]==0) && (j<=6)){

seq[j]=a;

i++;

}

}

for(i=0; i<6; i++)

{

printf("Numero sorteado %d - %d\n", i+1, seq);

}

Link para o comentário
Compartilhar em outros sites

Brow, aqui vai algumas observações:

.A começar é claro pela "main()" e o "return 0" no fim do programa... A declaração da main deveria ser "int main(int argc,char *argv[])".

.Se você conseguiu já ordenar os números das dezenas, como você não conseguiu ordenar os numeros sorteados???

.Não entendi o porque da variavel 'cont', já que a variavel 'contdados' esta fazendo toda a contagem....

.Não entendi porque o primeiro número do sorteo foi sorteado separado dos restantes....

.Não entendi o porque de um loop de 100 iterações... Que a propósito é a causa do teu erro principal....

.Realmente assim como o DontPanic postou, faça a leitura das dezenas assim "&dezenas[contdados]", isto ainda não tinha causado nenhum erro aparente mas com certeza iria aparecer um....

.Enfim...

Pegeui teu código e fiz umas correções.... e fiz tambem a parte de verificar se tem vencedor que você pediu....


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc,char *argv[])
{
char nome[100][50], cidade[100][50], estado[100][50];
int dezenas[100][6], contdados=0;
printf("DIGITE SEU NOME: ");
fflush(stdin);
gets(nome[contdados]);
while((nome[contdados][0]!='\0')&&(contdados < 100))
{
printf("DIGITE SUA CIDADE: ");
fflush(stdin);
gets(cidade[contdados]);
printf("DIGITE SEU ESTADO: ");
fflush(stdin);
gets(estado[contdados]);
//for(cont=0;cont<100;cont++)
//{
for(int i = 0; i < 6; i++)
{
printf("Digite a dezena apostada numero %d: ",i+1);
scanf("%d",&dezenas[contdados][i]);
}
//Controla em qual coluna está
for(int i = 0; i < 6; i++)
{
//Controla qual digito que será trocado
for(int h = 0; h < 6; h++)
{
//Controla o dígito da frente do dele
for(int j = h+1; j < 6; j++)
{
//Se o número na posição n+1 for maior que o da posição n ele troca os dois
if(dezenas[contdados][h]>dezenas[contdados][j])
{
//Guarda o valor para conseguir fazer a troca
int aux = dezenas[contdados][h];
int aux2 = dezenas[contdados][j];
//Troca o primeiro valor
dezenas[contdados][h] = aux2;
//Troca o segundo valor
dezenas[contdados][j] = aux;
}
}
}
}
//}
printf("Numeros apostados em ordem crescente : %d - %d - %d - %d - %d - %d \n \n",dezenas[contdados][0],dezenas[contdados][1],dezenas[contdados][2],dezenas[contdados][3],dezenas[contdados][4],dezenas[contdados][5]);
contdados++;
printf("DIGITE O NOME: ");
fflush(stdin);
gets(nome[contdados]);
//}
}
//SORTEIO E COLOCAÇAO DOS NUMEROS EM ORDEM CRESCENTE
int seq[6]={0}, i, j;
int a;
srand(time(NULL));
//seq[0]=(rand()%60)+1;
i=0;
while(i<6){
a =(rand()%60)+1;
j=0;
while((a != seq[j]) && (seq[j]!=0) && (j<=6)) j++;
if((seq[j]==0) && (j<=6))
{
seq[j]=a;
i++;
}
}
printf("\n\n#- Resultados -#\n\n");
for(int i = 0; i < 6; i++)
{
//Controla qual digito que será trocado
for(int h = 0; h < 6; h++)
{
//Controla o dígito da frente do dele
for(int j = h+1; j < 6; j++)
{
//Se o número na posição n+1 for maior que o da posição n ele troca os dois
if(seq[h]>seq[j])
{
//Guarda o valor para conseguir fazer a troca
int aux = seq[h];
int aux2 = seq[j];
//Troca o primeiro valor
seq[h] = aux2;
//Troca o segundo valor
seq[j] = aux;
}
}
}
}
for(i=0; i<6; i++)
{
printf("Numero sorteado %d - %d\n", i+1, seq[i]);
}
printf("\n\n");
/*Procurar vencedor*/
int iApostadores = 0,iDezenas = 0,iDezenas2 = 0,iAcertos = 0,iVencedores = 0;
for(iApostadores=0;iApostadores < contdados;iApostadores++)
{
for(iDezenas=0,iAcertos=0;iDezenas<6;iDezenas++)
{
for(iDezenas2 = 0;iDezenas2 < 6;iDezenas2++)
if(dezenas[iApostadores][iDezenas2] == seq[iDezenas]){iAcertos++;break;}
}
if(iAcertos == 6)
printf("!!!- Vencedor %i :\t%s - %s - %s\n",++iVencedores,nome[iApostadores],cidade[iApostadores],estado[iApostadores]);
}
if(!iVencedores) printf("\nNao houve vencedores...");
else printf("\nhouve %i vencedores!",iVencedores);
system("pause >nul");
return 0;
}

Ve aí brow, abraço...

Falou.

Link para o comentário
Compartilhar em outros sites

Nossa, não tinha como ser melhor a ajuda! Como sou muito amador no negócio (faço engcivil, e essa é uma cadeira introdutória de programação, serve mais para conhecimentos básicos), não entendi só uma coisa no teu código...

O que seria essa parte do programa?

int iApostadores = 0,iDezenas = 0,iDezenas2 = 0,iAcertos = 0,iVencedores = 0;

for(iApostadores=0;iApostadores < contdados;iApostadores++)

{

for(iDezenas=0,iAcertos=0;iDezenas<6;iDezenas++)

{

for(iDezenas2 = 0;iDezenas2 < 6;iDezenas2++)

if(dezenas[iApostadores][iDezenas2] == seq[iDezenas]){iAcertos++;break;}

}

if(iAcertos == 6)

printf("!!!- Vencedor %i :\t%s - %s - %s\n",++iVencedores,nome[iApostadores],cidade[iApostadores],estado[iApostadores]);

}

eu entendi que é aí a verificação, mas nao consigo entender o código em si!

E o que seria "int main(int argc,char *argv[])"."

Não aprendi isso!

Mesmo assim muito obrigado mesmo!

abraço

ah, e outra coisa... eu preciso colocar pelo menos uma da operações e implementar com funções, qual seria a mais recomendada? sou meio perdido nessa matéria... teria que usar ponteiros?

e outra, como eu poderia fazer para que o apostador nao pudesse apostar em dezenas repetidas? eu tentei um código, fazendo um if(apostas DIFERENTES das apostas anteriores), aí ele dava uma msg de erro e pedia outro numero... o problema é que daí se tu fosse colocar essa mesma dezena com outro apostador, ele dava com se ja tivesse apostado... :/

Link para o comentário
Compartilhar em outros sites

E aê brow?... A explicação desta parte é: o primeiro "for" "varrerá" todos os apostadores, o segundo "for" varrerá todas as dezenas sorteadas, e o terceiro "for" por sua vez varrerá todas as dezenas do apostador, o "if" compara as dezenas sorteadas com as dezenas do apostador que se forem iguais,a variável "iAcertos" será implementada... antes da próxima iteração do primeiro "for" , será verificado se o apostador da vez conseguiu 6 acertos... o resto você sabe...

Sobre "int main(int argc,char *argv[])",de certa forma foi exagero meu... pode ser também "int main()", mas é errado apenas "main()" como você colocou no teu código, porque a "main" precisa retornar um inteiro (não se esqueça do "return 0" antes do fim de teu programa...)...

Bom sobre a função da uma olhada aqui funções , muita coisa aê poderia virar função... Tente fazer alguma aí, se tiver dúvida, poste o código que o ajudaremos....

E sobre as dezenas repetidas... poste o código que você já fez (e que deu o erro), assim podemos corrigir...

Falou brow, abraço.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...