Ir para o conteúdo
Bernardo Vieira

?random sempre igual?

Mensagens Recomendadas

Bernardo Vieira

bem, a dúvida é essa mesmo!

eu fiz um código simples, para gerar chaves, só que eu quero que varie, mas sai sempre igual!

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

main () {
   char letras[27]="abcdefghijklmnopqrstuvwxyz";
   int num,tipo;
   char frs[7]="";
   int l;
   for(l=0;l!=6;l++) {
       tipo=rand()%2;
       if(!tipo) {
           num=rand()%26;
           frs[l]=letras[num];
       }
       else {
           num=rand()%10;
           char letter[2];
           sprintf(letter,"%d",num);
           frs[l]=letter[0];
       }
   }
   printf("%s\n",frs);
   system("pause");
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

O que é que sai?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

A função rand() é uma função geradora de numeros pseudo-aleatórios.

A ideia é poder-se repetir os números que saem (para correr versões diferentes dum programa com os mesmos dados, por exemplo).

Cada sequência de numeros pseudo-aleatórios tem um numero.

Se não escolheres uma sequência especifica, o rand() usa sempre a sequencia numero 1.

Para escolher uma sequencia especifica usa srand()

// sequencia 1
for (k = 0; k < 100; k++) printf("%d ", rand());

// sequencia 1
srand(1);
for (k = 0; k < 100; k++) printf("%d ", rand());

// sequencia 123456
srand(123456);
for (k = 0; k < 100; k++) printf("%d ", rand());

Mas se escolheres sempre a sequencia especifica 123456, tambem vai ser repetir os numeros (embora sejam diferentes dos numeros da sequencia 1).

A solução mais comum é escolher para numero da sequencia o numero de segundos desde a meia-noite de 1970-01-01. Este numero varia de segundo a segundo, por isso se nunca correres o programa no mesmo segundo, nunca apanhas a mesma sequencia.

#include <stdio.h>
#include <stdlib>
#include <time.h>
int main(void) {
   srand(time(0)); // escolher sequencia baseada na hora actual

   for (int k = 0; k < 100; k++) printf("%d ", rand());
   return 0;
}

IMPORTANTE! Escolhe a sequência uma única vez por run do programa. Principalmente, nunca ponhas o srand() dentro dum loop.

Editado por pmg
  • Voto 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bernardo Vieira

@pmg

ahh, é isso entao! Porque eu queria um numero que fosse sempre diferente! é isso mesmo, obrigado :)

agora tenho de ir para a escola, depois vou testar, se der errado eu volto cá! mas obrigado :)

@brunoais

obrigado tbm :)

#edit

testei aqui enquato almoçava, deu certo, obrigado :)

Editado por Bernardo Vieira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.