Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida em um programa simples de jogar dados em C


binhoc

Pergunta

Ola pessoal

Gostaria de pedir a ajuda de vocês, pois não faço idéia de como resolver essa questao. Eis meu codigo na imagem anexada, este simula a jogada de 5 dados, resultando em 5 números diferentes de 1 a 6. Pois bem, uma vez que ele exibiu os resultados, quero que ele conclua exibindo mensagens para as seguintes situações:

- Se cair dois dados iguais, exibir "Voce tirou uma dupla!"

- Se cair tres dados iguais, exibir "Voce tirou uma trinca!"

- Se cair quatro dados iguais, exibir "Voce tirou uma quadra!"

- Se cair cinco dados iguais, exibir "Voce tirou um FULL GAME! O melhor resultado do jogo!"

Eu tentei criar fazendo alguns IFs mas não deu certo, porque dava repetição das mensagens se caso houvesse por exemplo uma dupla entro o dado 1 e 2 e entre o dado 1 e 3 ao mesmo tempo.

Bom, é minha primeira vez aqui, espero encontrar ajuda.

Desde já

Grato!

general.png

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bem vindo. Primeiramente, evite usar a biblioteca conio.h cara, ela já é obsoleta e nem é padrão do C. 

Esse algorítmo parece ser fácil e simples, mas é complexo.

Segue o código:

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

bool rept (int m[], int numero, int tam)

{

//um bool auxiliar.

int q, l;

for (q=0; q<tam; q++)

    {

    if (numero==m[q])

        l=1;

    else

        l=0;

    }

if (l==1)

return true;

else

return false;
}

//ordena maior repetição. Em a[0] será inserida a face com maior número de repetição, e em b[0] a respectiva face.

int maior (int a[], int b[], int tam)

{

int i, j, backup, backup2;

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

    {

        for (j=i+1; j<tam; j++)

            {

            if (a[i]<a[j])

                {

                backup = a[i];

                a[i]=a[j];

                a[j]=backup;


                backup2=b[i];

                b[i]=b[j];

                b[j] = backup2;


                }

            }

    }

return b[0];
}


int main ()

{

srand (time(NULL));

bool repet, repet2=false;

int dados [5], num_iguais [5], m=0, j, i, facemaisrepetida, aux=0;

int entrada;

printf ("Bem vindo! Voce deseja:\n1 - Jogar\nOutro - Sair:");
scanf ("%d", &entrada);

printf ("\n");

if (entrada != 1)

    {

    printf ("\nSaindo\n");

    exit (1);

    }

do

{

printf ("Digite 1 para jogar os cinco dados:");

scanf ("%d", &entrada);

printf ("\n");

}while (entrada!=1);

// jogar os dados

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

    {

    dados[i] = 1 + rand () % 5;

    printf ("Dado %d caiu em %d\n", i+1, dados[i]);

    }

    printf ("\nApenas a maior repeticao sera considerada. Se sairem duas duplas, apenas uma sera considerada!");

//conferir se os dados caíram com números iguais

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

    {

        for (j=i+1; j<5; j++)

            {

            if (dados[i]==dados[j])

                {

                    if (m==0)

                        {

                        num_iguais[m] = dados[i];

                        m++;

                        repet2=true;

                        }


                     repet = rept (dados, dados[i], m);


                    if (dados[i]==dados[j] && m!=0 && repet==false)

                        {

                        num_iguais[m] = dados[i];

                        m++;

                        repet2=true;

                        }

                }


        }

    }

    int *maior_rept = (int*) calloc (m,sizeof (int));

    if (repet2==true)

    {

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

                {

                    for (j=0; j<5; j++)

                        {

                            if (num_iguais[i]==dados[j])

                                {

                                maior_rept[i]+=1;

                                }

                        }

                }


    facemaisrepetida = maior (maior_rept, num_iguais, m);

    if (maior_rept[0]==2)
    printf ("\n\nVoce tirou uma dupla!\n\n");

    if (maior_rept[0]==3)
    printf ("\n\nVoce tirou uma trinca!\n\n");

    if (maior_rept[0]==4)
    printf ("\n\nVoce tirou uma quadra!\n\n");

    if (maior_rept[0]==5)
    printf ("\n\nVoce tirou um FULL GAME, o melhor resultado do jogo!\n\n");

    printf ("A face mais repetida foi %d, tirada pelos dados de numero:", facemaisrepetida);

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

        {

            for (j=0; j<5; j++)

                {

                if (num_iguais[i]==dados[j])

                    {

                    if (aux==0)
                    printf (" %d", j+1);

                    else
                    printf (", %d", j+1);

                    aux++;

                    }


                }

         printf (".\n\n");

        }




    }



else

{

printf ("\n\nNenhuma face repetida!\n\n");

}

free (maior_rept);

maior_rept=NULL;


return 0;

}

Falou.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...