Ir ao conteúdo

Posts recomendados

Postado
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define V_MAX 8 // Valor máximo definido numa constante.

int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);



int main()

{
	int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);
	chave_sorteada(0, 0, 0, 0);

	printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);



	system("pause");
}


int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4)
{

	srand(time(NULL));
	
	
	numero_1 = 1 + rand() % 8; // Para tirarmos o primeiro número á sorte.
	numero_2 = 1 + rand() % 8; // Para tirarmos o segundo número á sorte.
	numero_3 = 1 + rand() % 8; // Para tirarmos o terceiro número á sorte.
	numero_4 = 1 + rand() % 8; // Para tirarmos o quarto número á sorte.
	
	while (numero_1 == numero_2 || numero_1 == numero_3 || numero_1 == numero_4 || numero_2 == numero_3 || numero_2 == numero_4 || numero_3 == numero_4)
	{
		numero_1 = 1 + rand() % 8; // Para tirarmos o primeiro número á sorte.
		numero_2 = 1 + rand() % 8; // Para tirarmos o segundo número á sorte.
		numero_3 = 1 + rand() % 8; // Para tirarmos o terceiro número á sorte.
		numero_4 = 1 + rand() % 8; // Para tirarmos o quarto número á sorte.
	}
	

	return numero_1, numero_2, numero_3, numero_4;
}

Boa tarde, estou a tentar elaborar um programa que crie o jogo MasterMind. Numa primeira fase, criei uma função para gerar 4 números aleatórios de 1 a 9, e retornar esses valores para a função main.

Enquanto algum dos 4 números for igual, o programa deve gerar 4 novos números até todos serem diferentes e por isso utilizei o ciclo while.

 

A minha dúvida é porque é que o printf não está a imprimir 4 números aleatórios de 1 a 9. E saber se em vez de retornar os 4 valores individualmente, poderia retornar esses 4 valores num vetor.

 

Desde já obrigado pela ajuda.

Postado

@Infante98 existe varias maneiras do numero aleatorio nunca repetir. olhe esse exemplo que gera 8 numeros aleatorios e nunca repete o mesmo numero...

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

int main() {
  int aleatorio[10]; /* variáveis colocadas aqui antes da main são inicializadas com valor zero */
  srand(time(NULL)); /* usada apenas uma vez no programa todo                */
  int cont, j, achou, num;
  for (cont = 0; cont < 8; cont++) {
    do {
      achou = 0; /* igual a falso                                        */
      num = rand() % 8 + 1;

      for (j = 0; j < 8; j++)
        if (num == aleatorio[j])
          achou = 1; /* numero repetiu , igual a verdadeiro                  */

    } while (achou); /* repete enquanto verdadeiro                           */
    aleatorio[cont] = num;

  }
  for (j = 0; j < 8; j++)
		printf("%d",aleatorio[j]);
}

 

  • Curtir 1
Postado

Obrigado pela ajuda!

 

Só uma questao:

44 minutos atrás, herbertbahia disse:

int aleatorio[10];

Porque é que este vetor tem de ter 10 elementos?

Postado
5 minutos atrás, Infante98 disse:

Porque é que este vetor tem de ter 10 elementos?

ele não precisa ter 10 só precisa a quantidade necessária que for usar para armazenar os valores

Postado
int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

int main()

{
	int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);
	chave_sorteada(0, 0, 0, 0);

	printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);

  ...
  

Está errado. Quase tudo.

 

na primeira declaracao você está declarando um protótipo, para o compilador entender o que é chave_sorteada quando encontrar no código. Se declara assim:

int chave_sorteada(int, int, int, int);

Não há razão para colocar nomes de variávies aí porque não serão lidos. Só importa informar que 

  • retorna um int
  • recebe 4 arqumentos int

A primeira instrução de main()

int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

não faz sentido.

 

Se quer chamar a função escreva 

int valor = chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

Mas já digo que não é isso o que você quer. Você quer os 4 int gerados por chave_sorteada() só que não tem como. Só recebe um parâmetro int que sequer usou. O resto fica lá dentro da tal função para sempre.

 

E  o printf()?

printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);

Respondendo a sua pergunta, não imprime nada porque especificou 4 parâmetros int para o printf() e no entanto só tem um lá: o int que sua função retorna.

 

Você tem um livro? Qual é? Uma apostila?

 

Três maneiras simples de retornar esses valores:

  • você passa para chave_sorteada() o endereço de um vetor com ao menos 4 posições int e a rotina preenche
  • você passa 4 ponteiros para valores int que declarou em main()
  • você cria uma struct{} com os 4 valores e a rotina devolve a struct ao invés de um int

Essa é a saida do programa abaixo

[1] retornou [1,2,3,4]
[2] retornou [5,6,7,8]
[3] retornou [9,10,11,12]
#include "stdio.h"

struct chaves
{
	int c1;
	int c2;
	int c3;
	int c4;
};
typedef struct chaves Chaves; // so pra ficar mais fácil de ler

Chaves	calcula_1();
void	calcula_2(int*,int*,int*,int*);
void	calcula_3(int v[]);

int main(int argc, char** argv)
{
	Chaves  conj1;
	int		chaves[4];

	Chaves v = calcula_1();
	// retornou chaves em v
	printf("[1] retornou [%i,%i,%i,%i]\n", v.c1, v.c2, v.c3, v.c4);

	int a, b, c, d;
	calcula_2(&a, &b, &c, &d);
	printf("[2] retornou [%i,%i,%i,%i]\n", a,b,c,d);

	calcula_3(chaves);
	printf("[3] retornou [%i,%i,%i,%i]\n",
		chaves[0], 
		chaves[1], 
		chaves[2], 
		chaves[3]);
	return 0;
};	// main()


Chaves calcula_1()
{
	Chaves v = { 1, 2, 3, 4 };
	return v;
}


void calcula_2(int* a, int* b, int* c, int* d)
{
	*a = 5;
	*b = 6;
	*c = 7;
	*d = 8;
	return;
}

void calcula_3(int v[])
{
	v[0] = 9;
	v[1] = 10;
	v[2] = 11;
	v[3] = 12;
	return;
}

E você pode ver as 3 maneiras. 

  • Curtir 1

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