Ir ao conteúdo
  • Cadastre-se

C Sorteio de Dados em C


lidy ane

Posts recomendados

Pessoal, preciso fazer um programa em C que ao jogar 4 dados, organiza-se pares  para determinar a somatoria de cada par.

Exemplo um dado saiu 6 outro 4 ,esse dois somam = 10

O outro par saiu 2 e 1 somam 3 .

 

Nao achei nenhum video ou material com um caso assim,por favor me ajudem ?

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

33 minutos atrás, herbertbahia disse:

Seria muito difícil alguém postar um vídeo resolvendo o problema de uma questão específica, principalmente uma questão desse tipo.

Sim.

Não pesquise por uma possível solução para o exercício, mas por algo que te ajude a montar seu programa.

Você precisava de algo para escolher aleatoriamente um número de 1 a 6, se pesquisasse por uma função que fizesse isso, tenho que certeza que iria se deparar com rand().

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

@Lucca Rodrigues Tudo bem pessoal eu entendo ,

Para um dado seria assim :

 

int Dado1 (void) { 
    int r = rand (); 
    if (r < RAND_MAX/6) return 1; 
    else if (r < RAND_MAX/6 * 2) return 2; 
    else if (r < RAND_MAX/6 * 3) return 3; 
    else if (r < RAND_MAX/6 * 4) return 4; 
    else if (r < RAND_MAX/6 * 5) return 5; 
    else return 6; 
}

 como são 4 dados eu repito essa estrutura 4 vezes ? só trocando int Dado2 (void)....

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

@lidy ane Use essa ferramenta:

image.png.5e858d3036481f8a1ac2eb560a402cd2.png

Ela permite postar seus programas, facilita a visualização.

Se você quer ajuda com seu programa, poste o programa todo, não temos como adivinhar do que se trata se você só posta uma função do seu programa.

 

5 horas atrás, lidy ane disse:

int Dado1 (void) { 
    int r = rand (); 
    if (r < RAND_MAX/6) return 1; 
    else if (r < RAND_MAX/6 * 2) return 2; 
    else if (r < RAND_MAX/6 * 3) return 3; 
    else if (r < RAND_MAX/6 * 4) return 4; 
    else if (r < RAND_MAX/6 * 5) return 5; 
    else return 6; 
}

Qual o intervalo?

Como eu havia dito:

18 horas atrás, Lucca Rodrigues disse:

Nesse caso seria, para cada dado:


rand() % 6 + 1

O número sorteado, para cada dado, deve estar em um intervalo de 1 a 6.

Isso sim é para cada dado.

Mas, se você pretende somar os valores sorteados de, por exemplo, 2 dados, o intervalo poderia ser de 2 a 12, daí não precisaria somar nada.

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

Em 26/06/2020 às 22:38, lidy ane disse:

Pessoal, preciso fazer um programa em C que ao jogar 4 dados, organiza-se pares  para determinar a somatoria de cada par.

Exemplo um dado saiu 6 outro 4 ,esse dois somam = 10

O outro par saiu 2 e 1 somam 3 .

 

Nao achei nenhum video ou material com um caso assim,por favor me ajudem

 

Talvez seja muita esperança esperar encontrar algo exatamente assim

 

Em geral isso se faz com DOIS ou CINCO dados.

 

Faça o programa em torno dos dados. Provavelmente o mais simples: escreva uma função par() que devolve o óbvio, um par de dados, e uma função Sorteio(N) que devolve N pares chamando par() e chame Sorteio(4) para receber um vetor de 4 pares de int com valores de 1 a 6 correspondendo... ao sorteio. E use no programa. Pode começar com constantes e já construir o programa todo sem isso

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

Uma coisa simples como uma função 

int     sorteio(int, int dado[]);

já serviria. Recebe o número de dados e um vetor com espaço para todos, devolve o vetor preenchido e a soma

 

Esse programa por exemplo

int main(int argc, char** argv)
{
    int N = 5;
    time_t agora; srand(time(&agora));
    if (argc > 1) N = atoi(argv[1]);
    if ((N < 1) || (N > 30) ) N = 5;
    int dado[30];
    int soma = sorteio(N, dado);
    printf("%d dados: ", N);
    for (int i = 0; i < N; i += 1) printf("%d ", dado[i]);
    printf("\nsoma = %d\n", soma);
    return 0;
};

Recebe o número de dados como parâmetro. Se você não digitar nada ele considera 5 que é o mais comum por causa do poker de dados.

 

Exemplo


C:\Users\toninho\source\repos\chc20-0703-dados\Release>dados
5 dados: 6 1 3 3 3
soma = 16

C:\Users\toninho\source\repos\chc20-0703-dados\Release>dados 1
1 dados: 4
soma = 4

C:\Users\toninho\source\repos\chc20-0703-dados\Release>dados 12
12 dados: 6 3 2 5 1 5 3 2 4 6 6 6
soma = 49

C:\Users\toninho\source\repos\chc20-0703-dados\Release>dados 4
4 dados: 4 2 5 5
soma = 16

O simples desde os '70: dados é o nome do programa claro. dados 1 joga um único dado, dados sem parâmetro joga 5, dados 12... Você imagina quantos. É limitado a 30 dados só pra ter um número

 

Eis o programa com todas as 30 linhas

#define _CRT_SECURE_NO_WARNINGS

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

int     sorteio(int, int dado[]);

int main(int argc, char** argv)
{
    int N = 5;
    time_t agora; srand((unsigned)time(&agora));
    if (argc > 1) N = atoi(argv[1]);
    if ((N < 1) || (N > 30) ) N = 5;
    int dado[30];
    int soma = sorteio(N, dado);
    printf("%d dados: ", N);
    for (int i = 0; i < N; i += 1) printf("%d ", dado[i]);
    printf("\nsoma = %d\n", soma);
    return 0;
};

int sorteio(int N, int d[])
{   int soma = 0;
    for (int i = 0; i < N; i += 1)
    {   d[i] = 1 + rand() % 6;
        soma += d[i];
    };
    return soma;
};

// fim

Uma estrutura para um jogo desses

 

Escrevendo em torno dos dados imagine um jogo onde tem N caras competindo em várias rodadas onde se jogam Q dados. Cada jogador tem um nome e um vetor de lances com os dados já jogados. Cada lance é um vetor de dados com os Q dados. O simples.
 

Algo assim serviria talvez

typedef struct
{
    int** dados; // vetor com a rodada
}   Lance;

typedef struct
{
    char*   nome;
    Lance** lances; // os dados todos
}   Jogador;

typedef struct
{
    int         N; // jogando nessa mesa
    int         n_dados; // dados por vez
    int         rodada; // rodada atual
    char*       mesa;   // nome da mesa
    Jogador**   J; // vetor de jogadores
}   Jogo;

Falta a estrutura para acompanhar os pontos e a interface :) 

Com 5 dados é mais divertido...

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