• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joaosoft

Função matemática geradora de numeros não aleatórios

11 mensagens neste tópico

:eek: Alguém conhece uma função matemática que gere números não aleatórios(sem repetições e com que os números não sejam seguidos [1, 2, 3, ...])? Já procurei em vários sites, mas não encontrei nenhuma que fosse eficaz.

:wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazes um while que te gera esses números. Aumentas sempre um a uma variável que tem o valor de 1 e no fim de cada while, adicionas um a essa variável. Esse while retorna-te essa variável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Foi exactactamente esta forma que encontrei. Obrigado!

Cumprimentos. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

joao em que contexto queres gerar esses numeros, explica um pouco do programa ou mete um trecho de código para podermos ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva. Ja consegui arranjar uma formula matematica para gerar numeros nao aleatorios.

Código JAVA:

public static ArrayList GeradorUniformeCongruencial(int nCodigos, int nInicial) {
        ArrayList<Integer> codigosAL = new ArrayList<Integer>();
        int numAnterior = nInicial;
        int cod;

        for (int i = 1; i <= nCodigos; i++) {
            numAnterior = (int) ((1697 * numAnterior) % (Math.pow(2, 19) - 1));
            cod = numAnterior;
            if (cod <= 9) {
                cod = cod * 100000;
            } else {
                if (cod <= 99) {
                    cod = cod * 10000;
                } else {
                    if (cod <= 999) {
                        cod = cod * 1000;
                    } else {
                        if (cod <= 9999) {
                            cod = cod * 100;
                        } else {
                            if (cod <= 99999) {
                                cod = cod * 10;
                            }
                        }
                    }
                }
            }
            while (codigosAL.contains(cod) == true) {
                cod++;
            }
            codigosAL.add(cod);
        }
        return codigosAL;
    }

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias também utilizar constantes infinitas como Pi ou e.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exacto, esta forma simplemente gera a tabuada do 1697 e quando chega ao limite usa o resto da divisao. Obrigado pelas respostas  :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes utilizar o método de congruência linear, usando o teorema do período máximo para encontrar uma fórmula para uma sucessão que te gere números pseudo-aleatórios.

Aliás, até penso que estás a usar esse método. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes explicar melhor o que é que entendes por números não-aleatórios?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes explicar melhor o que é que entendes por números não-aleatórios?

Também não percebi sinceramente.

(anyway, ele podia usar o rand(), os resultados nunca serão aleatórios anyway...)

0

Partilhar esta mensagem


Link 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