SlashStar 0 Denunciar post Postado Abril 10, 2011 Olá pessoal, sou novo no fórum como membro registrado, porém já havia visitado p/ tirar algumas dúvidas. Bom eu sou novo na programação provavelmente meu código contém muitos erros, mas eu estou precisando de uma ajuda e pronto p/ aprender. Estou tentando fazer um gerador de cartas que seja aleatório e não repita as mesmas cartas quando eu executo o laço "for" Eu li alguns outros tópicos sobre geração de números aleatórios, porém não consegui implementar, como disse sou novo na programação e ainda não me adaptei muito bem. Bom, aí vai o código o que pelo menos eu consegui fazer, e agradeço qualquer ajuda e crítica construtiva possível... Obs: Precisa ser automatizado, e ele gerar um número x de cartas que o usuário escolheria, realmente quebrei a cabeça e não sei como faz. Tentei colocar outro for para o número de cartas recebendo pelo teclado, mas não deu certo... #include <stdio.h> #include <stdlib.h> typedef struct _carta //estrutura do baralho que vai ter o naipe o,c,e,p e valor da carta de 1 a 13 { char naipe; int valor; } Tcarta; typedef struct baralho //estrutura do baralho, que vai conter um tipo carta e o apontador para o proximo valor { Tcarta x; struct baralho *prox; } Tbaralho; typedef Tbaralho* Tmonte; //definindo o monte do tipo baralho /*inicia fila*/ Tmonte criaFila (void) { Tmonte inicio = ( (Tmonte) malloc(sizeof(Tbaralho)) ); //aloca uma nova celula inicio->x.valor = -1; //o valor desta celula recebe -1 para se diferenciar inicio->prox = inicio; //ela aponta para ela mesma return inicio; //retornando esta celula para fazer ligação com a variavel que pediu ela } void criaBaralho( Tmonte* monte ) { int i,j; for(i=1; i<14; i++) //valor das cartas for(j=1; j<5; j++) { //naipes Tmonte novo = ( (Tmonte) malloc(sizeof(Tbaralho)) ); novo->prox = (*monte)->prox; (*monte)->prox = novo; novo->x.valor = rand() % 13+1;// não ta funcionando como o esperado... if (j == 1) novo->x.naipe = 'O';//ouro if (j == 2) novo->x.naipe = 'C';//copas if (j == 3) novo->x.naipe = 'E';//espadas if (j == 4) novo->x.naipe = 'P';//paus (*monte)->prox=novo; } } /*exibe baralho*/ void mostraBaralho( Tmonte* monte) { //exibe o baralho Tbaralho* aux; aux = (*monte)->prox; while (aux->x.valor != -1) { //comparaçao de início da fila printf("carta %d Naipe %c \n\n",aux->x.valor,aux->x.naipe); aux = aux->prox; } } int main(void) { /*Criando a Fila*/ Tmonte monte = criaFila(); /*Criando o Baralho */ criaBaralho(&monte); printf("Baralho\n\n"); mostraBaralho(&monte); return 0; system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 10, 2011 Olá! Seu código está muito bom... bem comentado, com nomes de funções e variáveis fáceis de entender... Só está com alguns problemas na identação que talvez sejam até problemas que o fórum gerou... bom, sobre seu programa, como o usuário vai inserir o valor x de cartas? Utilize a função scanf() para tal... Não programo em C, só C++, por isso não posso te ajudar com o código... espere alguém como o guidjos ou a _Isis_, que programam em C. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
SlashStar 0 Denunciar post Postado Abril 10, 2011 Obrigado pelo elogio ;D Pelo menos da um ânimo :) Vou aguardar sim, e obg por responder... Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 15, 2011 Seu problema está na geração de cartas? ou na hora de armazenar para n pegar cartas iguais? veja sobre o rand(); []s Compartilhar este post Link para o post Compartilhar em outros sites
SlashStar 0 Denunciar post Postado Abril 15, 2011 Seu problema está na geração de cartas? ou na hora de armazenar para n pegar cartas iguais? veja sobre o rand(); []s Olá, é(era) na geração mesmo... simplesmente era um erro bobo, porém fez a diferença... inclui a biblioteca time.h e adicionei na minha main o srand ( time(NULL) ); Abraço, e obrigado pelas respostas. Vou tentar adiantar o código e se surgir outras dúvidas eu pergunto... B) Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 15, 2011 poxa foi mal eu n li direito seu código.. adicione srand(time(NULL)); antes dos for's e veja se vai! -- http://www.cplusplus.com/reference/clibrary/cstdlib/srand/ []s Compartilhar este post Link para o post Compartilhar em outros sites
SlashStar 0 Denunciar post Postado Abril 19, 2011 poxa foi mal eu n li direito seu código.. adicione srand(time(NULL)); antes dos for's e veja se vai! -- http://www.cplusplus.com/reference/clibrary/cstdlib/srand/ []s Sim, consegui era isso mesmo :joia: Obrigado pela atenção e até mais =] se quiserem depois posto o código pronto p/ vocês... []s Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 26, 2011 :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites