Programa que sorte [RESOLVIDO]

1. Programa que sorte [RESOLVIDO]

Horácio Dias Baptista Neto
nenoboy

(usa Outra)

Enviado em 14/11/2011 - 22:13h

bom sou novo aqui...
Mas estava pensando em fazer uma função que SORTEASSE OS NUMEROS DE UM BARALHO, fazer essa função no programa principal eu consegui, porém eu ia preferir chamar uma funcão embaralha(); que usaria uma função para sortear os numeros, mas o problema é que essa função precisa mudar dois ponteiros que devem apontar para o vetor Baralho[41]; e outro para o vetor Carta[7]; ...
mas o programa não chega a compilar..

o que eu fiz foi até aqui.
//Detalhe a função S_CARTA(); sorteia um numero de 1 a 40;

void EMBARALHA (int *cartas[],int *baralho[]);
{
int x;
cartas[0]=x=S_CARTA();
baralho[x]=1;//marcando a carta escolhida 1 == carta jah foi escolhida // 0 == carta que pode ser sorteada
x=S_CARTA();//inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
baralho[x]=1;
cartas[3]=x;//fim carta recebe o valor
x=S_CARTA();//inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
baralho[x]=1;
cartas[1]=x;//fim carta recebe o valor
x=S_CARTA();//inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
baralho[x]=1;
cartas[4]=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
baralho[x]=1;
cartas[6]=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
baralho[x]=1;
cartas[2]=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(baralho[x]==1){
x=S_CARTA();//
}
cartas[5]=x;//fim carta recebe o valor
return;
}

Se alguém tiver algum exemplo de uma função que altera o valor de uma matriz indiretamente por ponteiros ia me ajudar...


  


2. Re: Programa que sorte [RESOLVIDO]

Horácio Dias Baptista Neto
nenoboy

(usa Outra)

Enviado em 14/11/2011 - 22:47h

nenoboy escreveu:

bom sou novo aqui...
Mas estava pensando em fazer uma função que SORTEASSE OS NUMEROS DE UM BARALHO, fazer essa função no programa principal eu consegui, porém eu ia preferir chamar uma funcão embaralha(); que usaria uma função para sortear os numeros, mas o problema é que essa função precisa mudar dois ponteiros que devem apontar para o vetor Baralho[41]; e outro para o vetor Carta[7]; ...
mas o programa não chega a compilar..

o que eu fiz foi até aqui.
//Detalhe a função S_CARTA(); sorteia um numero de 1 a 40;

void EMBARALHA (int *a,int *b);
{
int x;
*a=x=S_CARTA();
*(b+x)=1;//marcando a carta escolhida 1 == carta jah foi escolhida // 0 == carta que pode ser sorteada
x=S_CARTA();//inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(b+x)=1;
*(a+1)=x;//fim carta recebe o valor
x=S_CARTA();//inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(b+x)=1;
*(a+1)=x;//fim carta recebe o valor
x=S_CARTA();//inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(b+x)=1;
*(a+1)=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(b+x)=1;
*(a+1)=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(b+x)=1;
*(a+1)=x;//fim carta recebe o valor
x=S_CARTA();//Inicio sorteio da carta
while(*(b+x)==1){
x=S_CARTA();//
}
*(a+1)=x;//fim carta recebe o valor
return;
}

Se alguém tiver algum exemplo de uma função que altera o valor de uma matriz indiretamente por ponteiros ia me ajudar...

Acredito que a parte que está errado é a do ponteiro b...
Mas não pensei em nenhuma solução prática...




3. Re: Programa que sorte [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 14/11/2011 - 23:13h

Seu código está bagunçado e um pouco complicado de entender. Use uma marcação do tipo

[ code ]
códigos aqui
[ / code ]

Mas sem os espaços que inseri. Explique melhor o que você quer. Você pode criar uma função que retorna um número aleatório, no dado intervalo. Outra dica: Procure não usar somente letras maiúsculas num programa em C. O uso de letras maiúsculas subtende que se está usando uma macro, o que não é o caso.


4. Re: Programa que sorte [RESOLVIDO]

Horácio Dias Baptista Neto
nenoboy

(usa Outra)

Enviado em 15/11/2011 - 01:17h

Obrigado pelas dicas espero conseguir ser mais claro agora.

Essa função seria pra sortear numeros que não fossem iguais.

Ex: Numeros que quero sortear ...{1,2,3,4,5,6,7,8,9,10...,40}
Caso o 1 fosse sorteado, no próximo sorteio ele não poderia ser sorteado novamente, como em um bingo...

Achei uma função que gera os números aleatórios, mas ela não é muito prática, pois demora um pouco pra sortear valores diferentes.
Então eu criei um vetor para "marcar" os números escolhidos chamada baralho[41]
Ex:o número 1 foi sorteado então baraho[1]=1/true;

e usava essa função que sorteia números...

int S_CARTA()
{
int i,num;
/* inicializar o gerador de números aleatórios */
/* com time(NULL) */
srand(time(NULL));
for (i=0; i<5; i++)
{
/* para gerar números aleatórios de 0 a 3 */
num=rand() %40;/*não se chega ao valor de 4... o sorteio é entre 0 e 3*/
num=num+1;
}
return num;
}

Ex:

x=S_CARTA();//sorteia a carta
baralho[x]=1;//marca no vetor
carta[0]=x;//copia o n da carta
x=S_CARTA();//sorteia outra carta
while(baralho[x]==1){
x=S_CARTA();}
carta[1]=x;//copia o n da carta


Esse código funciona se for feito no programa principal, mas dessa maneira eu perderia a funcionalidade de começar outra partida e sortear novamente os números, e não consegui criar uma função que mude os valores dos vetores do programa principal baralho[41] e carta[7].


5. Re: Programa que sorte [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 15/11/2011 - 11:01h

Bom, existem várias formas de se fazer isso. Inclusive mantendo uma lista dos valores que podem ser sorteados e retirando eles da lista mais tarde. Pode-se usar um vetor como lista também e sortear posições nele e retirar o valor de lá (marcando com um -1). No entanto, eu fiz algo seguindo um pouco a sua lógica.

Veja:

http://pastebin.com/RRgyDBAs


6. Re: Programa que sorte [RESOLVIDO]

Horácio Dias Baptista Neto
nenoboy

(usa Outra)

Enviado em 15/11/2011 - 13:30h

Você me ajudou pra caramba agora vou reescrever meu código da mesma maneira.
Valeu.
^^






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts