Mega sena que verifica repetição em C [RESOLVIDO]

1. Mega sena que verifica repetição em C [RESOLVIDO]

tiago
tiago524

(usa KUbuntu)

Enviado em 14/11/2013 - 14:32h

Boa tarde pessoal
Tenho um trabalho muito importante da faculdade para fazer onde devo fazer o seguinte:
-> Desenvolva um programa que simule um sorteio da Megasena (6 números entre 1 e 60).
O programa deverá mostrar os números sorteados de duas maneiras:
a) Na ordem em que foram sorteados;
b) Em ordem crescente de valor.

Obs: Atente para o fato de que o programa não deve permitir a corrência de números duplos.
Eu ja consegui fazer um programa que sorteie os 6 numeros aleatorios de 1 a 60, só preciso fazer que ele mostre eles em ordem crescente e também que verifique eles para não fazer numeros repetidos...
Teria como alguem me ajudar?
Segue codigo:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i, numeroSorteado;


srand(time(NULL));

for(i=1; i<=6; i++) {

numeroSorteado = rand() % 60 +1;
printf("Numero %d: %d\n", i, numeroSorteado);
}

printf("\n\n\n");
system("pause");
return 0;
}


  


2. MELHOR RESPOSTA

Eduard Eidt
esmiril

(usa Ubuntu)

Enviado em 14/11/2013 - 20:08h

Da uma olhada se é isso mesmo...faz tempo que nao programo em C, então estou um pouco enferrujado...hehe... qualquer coisa posta aew..

Editei, pois vi que que colou faltando alguns parametros de vetor, aew compilaria..


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// função ordenar_num, receendo o vetor "numero", o identificando como vetor "num"
void ordenar_num(int num[6]){

int i, j, aux;
//primeiro laço do método bola
for (i=0;i<6;i++)
{//segundo laço do método bolha
for (j=i+1;j<=5;j++)
{ //verifica se o vetor na posição J é menor que o veotor na posicao I;
if (num[j] < num[i])
{ // caso seja Menor, realiza a troca de numeros para organizar
aux=num[i];
num[i]=num[j];
num[j]=aux;
}
}
}
printf("Apos a Organizacao: ");
//Imprimir o Vetor
for (i=0;i<6;i++){
printf("%i \t",num[i]);
}
printf("\n");
}



int main() {

int i,j, numero[6];
srand(time(0));

for(i=0; i<6; i++) {
numero[i]=rand()%60;
}

//verifica se há numeros igual
for (i=0;i<6;i++)
{
for (j=i+1;j<=5;j++)
{
do{
if (numero[j] == numero[i])
{
numero[i]=rand()%60;
}
} while(numero[j] == numero[i]);
}
}


printf("Antes da Organizacao: ");
//sortear os numeros
for (i=0;i<6;i++){
printf(" %i \t",numero[i]);
}
printf("\n");
//chama a função ordenar_num, passando o vetor "numero"
ordenar_num(numero);

system("PAUSE");
return 0;
}


3. Re: Mega sena que verifica repetição em C [RESOLVIDO]

Eduard Eidt
esmiril

(usa Ubuntu)

Enviado em 14/11/2013 - 15:23h

Para ordenação, pesquise pelo metodo bolha, segue o algoritmo:

for( x = 0; x < TAM; x++ )
{
for( y = x + 1; y < TAM; y++ ) // sempre 1 elemento à frente
{
// se o (x > (x+1)) então o x passa pra frente (ordem crescente)
if ( vetor[x] > vetor[y] )
{
aux = vetor[x];
vetor[x] = vetor[y];
vetor[y] = aux;
}
}
} // fim da ordenação



Agora para verificar se o numero sorteado, crie um array de 6 posições (ou 6 variaveis, se preferir),e a cada sorteio, jogue o valor nessa array(ou variave) e faça uma verificação se o numero ja existe em cada array(ou variavel);

att,


4. Re: Mega sena que verifica repetição em C [RESOLVIDO]

tiago
tiago524

(usa KUbuntu)

Enviado em 14/11/2013 - 15:54h

Ok, mas eu quero colocar os que eu sorteei em ordem crescente...
Não novos numeros entendeu? Ex: Foi sorteado 12 54 14 13 11 26, ae ele ia mostrar em ordem crescente: 11 12 13 14 26 54.



5. Re: Mega sena que verifica repetição em C [RESOLVIDO]

Eduard Eidt
esmiril

(usa Ubuntu)

Enviado em 14/11/2013 - 17:00h

o método bolha fará isso...a noite terei tempo e farei o algoritmo completo para lhe mostrar...



att,


6. Re: Mega sena que verifica repetição em C [RESOLVIDO]

tiago
tiago524

(usa KUbuntu)

Enviado em 14/11/2013 - 17:36h

Blz, obrigadão cara. Vou ficar ligado aqui para quando tu postar.



7. Re: Mega sena que verifica repetição em C [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 14/11/2013 - 20:54h

Vou dar um mero pitaco, pois não entendo de C:

Acho que deve ser prevista a possibilidade de haver uma ou mais repetições do número sorteado.
Assim, eu não usaria um simples "loop de 1 a 6", mas um loop infinito que alimentaria uma matriz de 6 posições, depois de eliminar as possíveis repetições.
Uma vez preenchida tal matriz, aí então haveria a saída do loop.
Ela estaria na ordem em que foi sorteada, e a partir daí poderia ser ordenada.

Essa não é uma solução muito elegante (coisa de assembleiro), pois o método de bolha é bastante eficiente.
Apenas parece que aquele método não prevê que em caso de números iguais o loop será interrompido antes do término (por exemplo, na quinta ocorrência).

Outra coisa: Os processadores baseados no 8080, 8086, e seus derivados como Pentium, etc. apresentam uma certa restrição na geração da raiz randômica, o que certamente fará aparecer alguns números repetidos.


8. Re: Mega sena que verifica repetição em C [RESOLVIDO]

tiago
tiago524

(usa KUbuntu)

Enviado em 17/11/2013 - 20:55h

Vlw pessoal pela ajuda, abraços.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts