Jump to content
Fórum Script Brasil
  • 0

Não estou Conseguindo achar o erro do meu Algoritmo em C


Aprendiz2

Question

Boa Noite a todos ,

Sou novo nessa comunidade e também com programação, e gostaria de saber se alguém pode me da uma ajuda porque estou desesperado e não consigo achar o erro o enunciado é esse,é um jogo que utiliza uma lista duplamente cadiada e circular:

Faça um programa que simule esse jogo de acordo com as seguintes instruções:

– Crie uma lista duplamente encadeada circular.

– Insira 10 nós nesta lista, representado os jogadores, onde a chave de cada nó é o número

do jogador.

– Imprima na tela a configuração inicial da roda.

– O jogo deve começar pelo jogador 1.

– Peça ao usuário que digite na tela a carta a ser tirada, como se o usuário fosse o baralho.

– Após ler a carta, execute o que a carta representa.

– Se for a carta 1, pule o jogador ao lado e vá para o próximo, sendo que este será o

próximo jogador a jogar. Por exemplo, na configuração inicial, começando-se pelo

jogador 1, a carta 1 faria com que o jogador 2 fosse pulado e o próximo jogador a jogar

fosse o 3.

– Se for a carta 3, elimine o terceiro jogador contado a partir do atual. Por exemplo, na

configuração inicial, começando-se pelo jogador 1, a carta 3 faria com que o jogador 4

fosse eliminado e o próximo jogador a jogar fosse o 2.

– Se for a carta 9, elimine o jogador que vem antes do atual. Por exemplo, na

configuração inicial, começando-se pelo jogador 1, a carta 9 faria com que o jogador 10

fosse eliminado e próximo jogador a jogar fosse o 2.

– Se for a carta 13, inverta o sentido do jogo. Por exemplo, na configuração inicial,

começando-se pelo jogador 1, a carta 13 faria com que o próximo jogador a jogar fosse

o 10, ao invés do 2.

– Cuidado para não contar a cabeça da lista como jogador. Observe bem a sequência de

passos mostrada anteriormente. E lembre-se de manipular corretamente os ponteiros de

anterior e próximo de acordo com o sentido atual do jogo.

– Depois que a carta for executada, imprima a nova configuração da roda e de qual jogador é

a vez. Peça ao usuário para digitar a nova carta a ser tirada.

– O jogo deve ficar nesse loop até que só reste um jogador, que será o vencedor.

– Imprima o jogador vencedor na tela.

até agora eu consegui fazer isso:

//lista duplamente encadeada circular com nó cabeça

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

int cont=10;

typedef struct no{
  int jogador;
  struct no* prox;
  struct no* ant;
}no;

no* cria(void){
  no *n;
  n = (no*) malloc (sizeof (no));
  n -> jogador = 1;
  n -> prox = n;
  n -> ant = NULL;
  return n;
}

no* cria_no(int ch){
no *n;

n = (no*) malloc (sizeof (no));
n -> jogador = ch;
n -> prox = n;
n -> ant = NULL;
return n;
}

void inserir_fim(no *lista, int ch) {
no *n; 
no *aux;
n= cria_no(ch);
aux=lista;
while(aux->prox!=lista) 
   aux = aux->prox;
aux->prox = n;
n -> prox = lista;
n -> ant = aux;
}

void imprime(no* Lista){
no* aux;
aux = Lista->prox;
  do {
    printf("%d ",aux-> jogador);
    aux = aux->prox;
  }while(aux != Lista);
}

void imprime_reverso(no* Lista){
  no *aux;
  aux = Lista->prox;
  while(aux ->prox != Lista)
     aux = aux -> prox;
  while(aux !=Lista){
    printf("%d  ",aux-> jogador);
    aux = aux->ant;
  }
}

void remover(no *L, int ch) {
no *aux; 
aux = L->prox;
getch();
  while (aux->jogador!=ch && aux!=NULL){
     aux = aux -> prox;
  }
  if (aux  == NULL)
     printf("não há lista");
  else if (aux == L->prox){ //primeiro elemento
     L->prox = aux->prox;
     aux -> prox -> ant = L;
  }
  else{
   aux -> ant -> prox = aux -> prox;
   aux ->prox -> ant = aux -> ant;
  }
  free(aux);
  
}

void carta_validar(int carta, no* Lista, no* aux, no *L, int ch){

 aux = Lista->prox;
     
     switch(carta) { 
            case '1': printf ("Pule o jogador ao lado e passe para o seguinte\n");
                      aux = aux -> prox; aux = aux -> prox;
                      printf("Nova configuração da roda: \n");
                      imprime(Lista);
                      printf("\não é? a vez do jogador %d",aux ->jogador);
                      break; 
                             
               case '9': printf ("Elimine o jogador que vem antes do atual\n");
                         remover(Lista, ch);
                         printf("Nova configuração da roda: \n");
                         imprime(Lista);
                         cont=cont--;
                         printf("\não é? a vez do jogador %d",aux ->jogador);
                      break;  
                               
            case '3': printf ("Elimine o terceiro jogador contado a partir do jogador atual");
                      aux = aux -> prox; aux = aux -> prox;
                      remover(Lista, ch);
                      imprime(Lista);
                      cont=cont--;
                      printf("\não é? a vez do jogador %d",aux -> jogador);
                     break;  
            
            case '13': printf ("Inverta o sentido da roda.\n");
                       printf("Nova configuração da roda: \n");
                       imprime_reverso(aux);
                       printf("\não é? a vez do jogador %d",aux -> jogador);
                     break;              
                
            default: printf("opção inválida\n");
                     printf("Escolha outra carta: ");
                     scanf("%d ", &carta);
                     carta_validar(carta);
                  }
int main(){
int carta,n;
  no *Lista;
  no *aux;
  aux = Lista;

  Lista = cria();
  printf("Jogo de cartas\n\n\n");
  printf("Os jogadores são: \n\n");
  
  for(n=1;n<11;n++)
  {
    inserir_fim(Lista,n);
  }
  imprime(Lista);

  printf("\n\n\n");
  printf("O jogo comeca pelo jogador %d", 1);
   
  while(cont != 1)
  { 
  printf("Digite a carta que o jogador vai tirar: \n");
  scanf("%d",&carta);
  carta_validar(carta,no* aux, no* Lista);
  }
  
  if(cont == 1)
  printf("O vencedor é o jogador %d", aux -> jogador);
  
  
  getch();
}

Quem puder me ajudar ficarei muito grato

Abraço a todosssss!!!!!!

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

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.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...