Jump to content
Fórum Script Brasil
  • 0

Duvida em um programa simples de jogar dados em C


binhoc
 Share

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...