Você está na página 1de 14

Instituto Federal de Educação, Ciência e Tecnologia de Pernambuco

Sistemas Microprocessados
Campus Afogados da Ingazeira

Geração de Números Aleatórios e Recurssividade


Professor: Diego Lopes

26/11/2018 AFOGADOS DA INGAZEIRA, NOVEMBRO DE 2018 1/14


Geração de Números Aleatórios
•A geração de números aleatórios é muit como no
desenvolvimento de jogos, também referida como
RNG (Random Number Generator);
•Em C a função que gera números aleatoriamente é
a função rand();
• i = rand(); //i será um número aleatório

•A função rand() gera um número entre 0 e


RAND_MAX (uma constante simbólica definida no
arquivo de cabeçalho <stdlib. h>);
•Se rand produzir inteiros verdadeiramente
aleatórios, todos os números entre 0 e RAND_MAX
terão a mesma probabi-lidade de serem
escolhidos cada vez que rand for chamada.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 2/14


Geração de Números Aleatórios
•Exemplo:

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 3/14


Geração de Números Aleatórios
•Na verdade a função rand() gera números pseudo-
aleatórios:
• Chamar rand repetidamente produz uma seqüência
de números que parece ser aleatória. Entretanto, a
seqüência se repete cada vez que o programa é
executado;
•Depois de o programa ser completamente
depurado, ele pode ser condicionado de modo a
produzir uma seqüência diferente de números em
cada execução. Isso é chamado randomização, e é
realizado com a função srand da biblioteca padrão;
•A função srand utiliza um argumento inteiro
unsigned para ser a semente da função rand de
forma que seja produzida uma seqüência diferente
de números aleatórios em cada execução do
programa.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 4/14


Geração de Números Aleatórios
•Exemplo:

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 5/14


Geração de Números Aleatórios
•Para que não haja a necessidade de ficar
fornecendo a semente pode ser utilizado o
comando:
• srand(time(NULL));

•Isso faz com que o computador leia seu relógio


para obter automaticamente o valor da semente;
•A função time retorna a hora atual do dia em
segundos;
•Esse valor é convertido em um inteiro sem sinal
(unsigned int) que é usado como semente do
gerador de números aleatórios.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 6/14


Exercício 01
•Altere o ultimo programa para que ocorra a geração de números aleatórios sem a necessidade
de declaração da semente.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 7/14


Exercício 02
•Faça um programa que jogue um dado de seis lados 7000 vezes e conte quantas vezes apareceu
cada lado.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 8/14


Recursão
•Geralmente, os programas que analisamos são
estruturados como funções que fazem chamadas
entre si de uma maneira disciplinada e hierárquica;
•Para alguns tipos de problemas, é útil ter funções
que chamem a si mesmas:
• Uma função recursiva é uma função que chama a si
mesma, ou diretamente ou indiretamente por meio
de outra função;
• Uma função recursiva é chamada para resolver o
problema. Na realidade, a função só sabe resolver
o(s) caso(s) mais simples, ou o(s) chamado(s) caso(s)
básico(s).
• Se a função for chamada em um problema mais
complexos, ela divide o problema em duas partes
teóricas: uma parte que a função sabe como resolver
e outra que ela não sabe.

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 9/14


Recursão
•O fatorial de um inteiro não-negativo a, escrito n! (e pronunciado "fatorial de n"), é o produto:
n * (n - 1) * (n - 2) * ... * 1
•O fatorial de um inteiro, numero, maior ou igual a 0, pode ser calculado iterativamente (não-
recursivamente) usando for como se segue:
fatorial = 1;
for (contador = numero; contador >= 1; contador--)
fatorial *= contador;

•Chega-se a uma definição recursiva para a função fatorial observando o seguinte


relacionamento:
n! = n * (n - 1)!

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 10/14


Recursão
•Por exemplo, 5! é claramente igual a 5 * 4! como é mostrado a seguir:
• 5! = 5 * 4 * 3 * 2 * 1 || 5! = 5 * (4 * 3 * 2 * 1) 5! = 5 * (4!)

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 11/14


Recursão
•Exemplo:

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 12/14


Exercício 03
•Faça um programa recurssivo para exibição da sequência de Fibonacci em que a função receba o
numero de termos da sequência:

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 13/14


Dúvidas?

26/11/2018 GERAÇÃO DE NÚMEROS ALEATÓRIOS E RECURSSIVIDADE 14/14