Jump to content

[Resolvido] ordenar jogadores por pontos e determinar o vencedor ou empate em C


mirador_22
 Share

Recommended Posts

este é o exemplo do projeto relativamente ao outro tópico, na qual não foi bem explicita mas este exemplo será o mais indicado para minha duvida em relação a comparar os valores dentro do mesmo vetor e depois listar por pontos e se no caso, nao houver vencedor, será o empate mas já tentei fazer de muitas maneira s e nehuma está dando certo, o segui o exemplo abaixo

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

#define MAX 5
#define MAX_PONTOS 100

typedef struct {
int numero;
int pontos;
} JOGADOR;

typedef struct {
JOGADOR jogador[MAX];
} CAMPO;

JOGADOR jogador;
CAMPO campo;
JOGADOR *ptr_jogador;
CAMPO *ptr_campo;

void main(void) {

int i, j, k;
srand(time(NULL));
int ponto_calculado;

printf("\n--- CRIAR JOGADOR ---");
for (i = 0; i < MAX; i++) {
	ponto_calculado = 1 + rand() % MAX_PONTOS;
	jogador.numero++;
	jogador.pontos = ponto_calculado;
	ptr_jogador = &jogador;
	campo.jogador[i] = *ptr_jogador;
	ptr_campo = &campo;
	printf("\nJogador: %d com Pontos %d...\n",
			ptr_campo->jogador[i].numero,
			ptr_campo->jogador[i].pontos);
}

printf("\n\n--- LISTAR JOGADOR POR PONTOS ---");
for (j = 0; j < MAX - 1; j++) {
	for (k = j + 1; k < MAX; k++) {
		//se o ponto de jogador J for maior que jogador K
		if (ptr_campo->jogador[j].pontos > ptr_campo->jogador[k].pontos) {
			//jogador J será o vencedor
			printf("\nJogadorJ: %d com Pontos %d foi o vencedor...\n",
					ptr_campo->jogador[j].numero,
					ptr_campo->jogador[j].pontos);
			// ou se o ponto de jogador J for menor que jogador K
		} else if (ptr_campo->jogador[j].pontos < ptr_campo->jogador[k].pontos) {
			//jogador kserá o vencedor
			printf("\nJogadorK: %d com Pontos %d foi o vencedor...\n",
					ptr_campo->jogador[k].numero,
					ptr_campo->jogador[k].pontos);
			//se o ponto de jogador J for igual que jogador K
		} else if (ptr_campo->jogador[j].pontos == ptr_campo->jogador[k].pontos) {
			printf("\n\n--- DUVIDA -> EMPATE ---");
			//jogador J e Jogador K terão mesmo pontos
			printf("\nJogadorK: %d e JogadorJ: %d com Pontos %d...\n",
					ptr_campo->jogador[k].numero,
					ptr_campo->jogador[j].numero,
					ptr_campo->jogador[k].pontos);
		}
	}
}
}

o print-screen da simulação, de acordo com a duvida, se o jogador já foi vencedor porque o ciclo não para e em vez disso fica a comparar os restantes elementos até terminar o ciclo

NTQRuhy.png?1

o objetivo é mais ou menos assim, no caso de empate, nesta parte, a duvida é que como é que vou ver se o numero de pontos de jogadores em caso de empates, for maior que outros jogadores em caso de empate, essa é uma das dúvidas,

7LxNECl.jpg?1

Link to comment
Share on other sites

HappyHippyHippo
- var max = 0
- var count = 0
- para todos os jogadores
 se o jogador listado tiver mais do que max pontos
   max = pontos do jogador
   count = 1
 se tiver os mesmo pontos que max
   count = count + 1

- se count = 1
 iterar todos os jogadores
   se os pontos do jogador listado for igual a max
     fazer o output : o jogador iterado é o vencedor
     parar o ciclo
- caso contrário (count != 1)
 iterar todos os jogadores
   se os pontos do jogador listado for igual a max
     fazer o output : o jogador iterado faz parte do prolongamento
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

- var max = 0
- var count = 0
- para todos os jogadores
se o jogador listado tiver mais do que max pontos
max = pontos do jogador
count = 1
se tiver os mesmo pontos que max
count = count + 1

- se count = 1
iterar todos os jogadores
se os pontos do jogador listado for igual a max
fazer o output : o jogador iterado é o vencedor
parar o ciclo
- caso contrário (count != 1)
iterar todos os jogadores
se os pontos do jogador listado for igual a max
fazer o output : o jogador iterado faz parte do prolongamento

Obrigado, passei do pseudo-codigo para algoritmo e funciona na perfeição,

mais logo, vou posta a solução e obrigado

Edited by mirador_22
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.