Introdução à Programação Aula 6 Números pseudo-aleatórios



Documentos relacionados
Programação I Aula 6 Números pseudo-aleatórios

Programação I Aula 6 Números pseudo-aleatórios Pedro Vasconcelos DCC/FCUP

Programação I Aula 11 Mais sobre ciclos e iteração

Avaliação e Desempenho Aula 1 - Simulação

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

Programação I Aula 15 Definições recursivas

Os dados quantitativos também podem ser de natureza discreta ou contínua.

Introdução à Programação Aula 5 Ciclos e condicionais

Programação I Aula 16 Mais exemplos de recursão

Computação 1 - Python Aula 8 - Teórica: Estrutura de Repetição : for 1/ 10

Algoritmos e Estruturas de Dados I. Variáveis Indexadas. Pedro O.S. Vaz de Melo

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Prova Escrita de MATEMÁTICA A - 12o Ano a Fase

AV2 - MA UMA SOLUÇÃO

Probabilidade II. Departamento de Estatística. Universidade Federal da Paraíba. Prof. Tarciana Liberal (UFPB) Aula Distribuição Uniforme 11/13 1 / 19

Introdução à Programação Aula 19 Programação com objetos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 10 a Aula O Jogo da Vida

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Computação 1. Aula 10 Teórica professor: Leonardo Carvalho

Conteúdo. 1 Introdução. Histograma do 1o Sorteio da Nota Fiscal Paraná 152/15. 1º Sorteio Eletrônico da Nota Fiscal Paraná

Computação 1. Aula 8 Teórica professor: Leonardo Carvalho

Teste de Funções por Cobertura do Grafo de Fluxo de Controle

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

Introdução à Programação com Python

Computação 1 - Python Aula 9 - Teórica: Interferindo no fluxo de repetição: Break e Continue Laços Aninhados

Conteúdo. 1 Introdução. Histograma do Quinto Sorteio da Nota Fiscal Paraná 065/16. Quinto Sorteio Eletrônico da Nota Fiscal Paraná

IND 1115 Inferência Estatística Aula 8

Introdução à Programação com Python

Prova Escrita de MATEMÁTICA A - 12o Ano Época especial

Distribuição Binomial e Normal

Resumo: Estudo do Comportamento das Funções. 1º - Explicitar o domínio da função estudada

Teste Intermédio de Matemática A Matemática A Entrelinha 1,5 (Versão única igual à Versão 1) 12.º Ano de Escolaridade

Proposta de resolução da Prova de Matemática A (código 635) 2ª fase. 19 de Julho de 2010

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP

Introdução à Programação Aula 16 Mais exemplos de recursão

Introdução à Programação Aula 18 Método de eliminação de Gauss

Prova Escrita de MATEMÁTICA A - 12o Ano a Fase

Computação 1 - Python Aula 7 - Teórica: Estrutura de Repetição com teste de parada: while 1/ 23

Programação Funcional 9 a Aula Programas interativos

Prof. Neckel FÍSICA 1 PROVA 1 TEMA 2 PARTE 1 PROF. NECKEL POSIÇÃO. Sistema de Coordenadas Nome do sistema Unidade do sistema 22/02/2016.

Estatística e Modelos Probabilísticos - COE241

ÁLGEBRA. Aula 1 _ Função Polinomial do 2º Grau Professor Luciano Nóbrega. Maria Auxiliadora

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Programação I Aula 7 Resolução numérica de equações

Estatística e Probabilidade

Programação I Aula 3 Primeiros programas

Comandos de Desvio 1

Aula 6 Medidas de Tendência Central

Introdução à Programação / Programação I

Introdução à Programação Aula 3 Primeiros programas

INF 1771 Inteligência Artificial

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo

Teoria de Jogos. Algoritmo Minimax e Alfa-Beta AED

Aula 4 Função do 2º Grau

Roteiro para movimento uniforme e uniformemente variado

MANUAL DO USUÁRIO SIMPLEX. Prof. Erico Fagundes Anicet Lisboa, M. Sc.

PROVA RESOLVIDA DA PETROBRAS 2011 ADMINISTRADOR JUNIOR. Professor Joselias

ACH5531 Introdução à Computação Estruturas de repetição

Cadeias de Caracteres

Aula 8 Intervalos de confiança para proporções amostras grandes

Escola Secundária com 3º ciclo D. Dinis 11º Ano de Matemática A Tema II Introdução ao Cálculo Diferencial I Funções Racionais e com Radicais

Relatório das Provas da 2ª. Fase - Vestibular 2016

Aula de Exercícios - Variáveis Aleatórias Discretas

Aula Extra. Depurador Code::Blocks. Monitoria de Introdução à Programação

Aula 12 Teste de hipótese sobre proporções amostras grandes

Introdução à Inteligência Artificial 2007/08

Exercícios de Fixação Aulas 05 e 06

Lista de Exercícios Critérios de Divisibilidade

Introdução à Programação Aula 7 Resolução numérica de equações

AGRUPAMENTO DE ESCOLAS DA SÉ GUARDA. MATEMÁTICA B Curso de Artes Visuais

Plano de Ensino PROBABILIDADE E ESTATÍSTICA APLICADA À ENGENHARIA - CCE0292

é 4. Portanto, o desvio padrão é 2. Neste caso 100% dos valores da população estão a um desvio padrão da média.

GESTÃO DA MANUTENÇÃO

Aula 4 Gráficos e Distribuição de Frequências

AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO

Estruturas de Repetição. Vanessa Braganholo

SOLUÇÕES N item a) O maior dos quatro retângulos tem lados de medida 30 4 = 26 cm e 20 7 = 13 cm. Logo, sua área é 26 x 13= 338 cm 2.

Programação. Folha Prática 4. Lab. 4. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

Movimento uniformemente variado. Capítulo 4 (MUV)

AGRUPAMENTO DE ESCOLAS DE CASTRO DAIRE Escola Secundária de Castro Daire

Complexidade de Algoritmos

Matemática Ficha de Apoio Modelos de Probabilidade - Introdução

MATERIAL DE DIVULGAÇÃO DA EDITORA MODERNA

Programação I Aula 4 Definição de procedimentos e funções

IFRN\CAMPUS IPANGUAÇU DISCIPLINA: INFORMÁTICA BÁSICA PROFESSOR: CLAYTON MACIEL COSTA 2ª AVALIAÇÃO DE INFORMÁTICA BÁSICA TRABALHO FINAL EXCEL 2010

Modelos de Probabilidade e Inferência Estatística

Variáveis Frequências Gráficos Medidas de Posição Medidas de Dispersão Medidas Complementares Inferência

UNICAP Universidade Católica de Pernambuco Laboratório de Topografia de UNICAP - LABTOP Topografia 1. Erros e Tolerâncias

Uma visita aos programas de Matemática dos 2.º e 3.º Ciclos

Aula 1 Variáveis aleatórias contínuas

EXAME DE MACS 2º FASE 2014/2015 = 193

Escola Secundária com 3º CEB de Lousada. Ficha de Trabalho de Matemática do 8º ano N.º 29 Assunto: Estatística

Engrenagens IV. Para grandes problemas, grandes soluções. Cálculo para engrenagem cônica

CONHECIMENTOS ESPECÍFICOS

Matemática Aplicada às Ciências Sociais

Estimação. Como definir um estimador. Como obter estimativas pontuais. Como construir intervalos de confiança

Teste de Hipótese e Intervalo de Confiança. Parte 2

ANÁLISE DE FALHAS DE COMPUTADORES

Então, a distribuição de converge para a distribuição normal com média nμ e variância nσ 2

Atividade extra. Exercício 1. Exercício 2. Matemática e suas Tecnologias Matemática

Transcrição:

Introdução à Programação Aula 6 Números pseudo-aleatórios Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 1 / 28

Nesta aula 1 Números pseudo-aleatórios 2 Jogo Hi-Lo 3 Passeio aleatório Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 2 / 28

Números pseudo-aleatórios Por vezes necessitamos de simular acontecimentos aleatórios no computador: simular o lançamento de um dado; baralhar uma pilha de cartas; escolher uma posição no ecrân para uma nave espacial; mais genericamente: simular eventos imprevistos. Podemos fazer tudo isto usando geradores de números pseudo-aleatórios. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 3 / 28

Módulo random Para usar geradores pseudo-aleatórios devemos importar o módulo random. >>> import random Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 4 / 28

Módulo random (cont.) A função random() gera um número pseudo-aleatório no intervalo [0, 1). >>> random.random() 0.3904112430918001 >>> random.random() 0.4508590778674775 >>> random.random() 0.6126532811362886 NB: o limite superior nunca é atingido! Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 5 / 28

Módulo random (cont.) Podemos multiplicar o resultado para obter números noutro intervalo. Por exemplo: gerar um inteiro entre 1 e 1000. >>> 1 + int(1000*random.random()) 731 >>> 1 + int(1000*random.random()) 171 >>> 1 + int(1000*random.random()) 909 O módulo random inclui funções específicas para simplificar este processo. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 6 / 28

Módulo random (cont.) A função randint(a,b) gera um inteiro pseudo-aleatório entre a e b inclusivé. >>> random.randint(1,1000) 970 >>> random.randint(1,1000) 83 >>> random.randint(1,1000) 897 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 7 / 28

Exemplo Simular dez lançamentos de um dado de 6 faces. import random for i in range(10): d = random.randint(1,6) print(d) Exemplo de execução: 5 2 5 2 3 2 1 5 3 5 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 8 / 28

Colecionar estatísticas Vamos simular 1000 lançamentos de um dado e colecionar algumas estatísticas: valor máximo; valor mínimo; valor médio. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 9 / 28

Valor máximo Guardamos o maior valor obtido numa variável dmax Efetuamos um lançamento fora do ciclo para inicializar a variável dmax import random d = random.randint(1,6) dmax = d for i in range(999): d = random.randint(1,6) dmax = max(dmax, d) print ("Valor máximo= ", dmax) O resultado dá sempre 6. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 10 / 28

Valor mínimo Análogo ao anterior: guardamos o menor valor obtido. import random d = random.randint(1,6) dmin = d for i in range(999): d = random.randint(1,6) dmin = min(dmin, d) print ("Valor mínimo= ", dmin) O resultado dá sempre 1. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 11 / 28

Valor médio Acumulamos a soma de todos os valores obtidos Dividimos pelo número de lançamentos import random s = 0 for i in range(1000): d = random.randint(1,6) s = s + d print ("Valor médio= ", s/1000) O resultado dá aproximadamente 3.5. Porquê? Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 12 / 28

Distribuição uniforme Random e randint geram números pseudo-aleatórios com distribuição uniforme. Com n lançamentos cada face sai aproximadamente n/6 vezes; logo: s n 6 1 + n 6 2 + n 6 3 + n 6 4 + n 6 5 + n 6 6 = n (1 + 2 + 3 + 4 + 5 + 6) 6 = n 6 21 = 7n 2 Logo s/n 7/2 = 3.5. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 13 / 28

Repetibilidade Os geradores pseudo-aleatórios são algoritmos determinísticos obtemos a mesma sequência se começarmos com a mesma semente. Podemos inicializar a semente usando a função seed(s). Isto permite repetibilidade das computações com números pseudo-aleatórios. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 14 / 28

Repetibilidade (cont.) Exemplo: o programa import random random.seed(0) for i in range(10) print(random.randint(1,6)) produz sempre os seguintes números: 4 4 1 3 5 4 4 3 4 3 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 15 / 28

Estimar probabilidades Podemos usar o módulo random para estimar probabilidades calculando frequência de ocorrências. Frequência = Número de casos favoráveis Número de experiências Exemplo Estimar a probabilidade do lançamento de dois dados dar soma 7. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 16 / 28

Estimar probabilidades (cont.) # Programa dados.py # simular o lançamento de dois dados e contar quantas vezes somou 7 import random numexpr = 10000 # número de experiências a simular soma7 = 0 # contador de acontecimentos favoráveis for i in range(numexpr): # lançar dois dados d1 = random.randint(1,6) d2 = random.randint(1,6) if d1+d2==7: soma7 = soma7 + 1 print("frequência = ", soma7/numexpr) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 17 / 28

Estimar probabilidades (cont.) Obtemos valores ligeiramente diferentes em sucessivas execuções: $ python3 dados.py Frequência = 0.1646 $ python3 dados.py Frequência = 0.166 $ python3 dados.py Frequência = 0.1721 Conclusão: entre 16 17% dos lançamentos somaram 7. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 18 / 28

Jogo Hi-Lo O computador escolhe um inteiro aleatório entre 1 e 1000 O jogador humano tenta adivinhar Para cada tentativa, o computador diz se é maior, menor ou se acertou A pontuaçao do jogador é o número de tentativas efetuadas Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 19 / 28

Jogo Hi-Lo (cont.) import random number = random.randint(1,1000) guess = 0 tentativas = 0 while guess!= number: tentativas = tentativas + 1 guess = int(input("diga um numero 1-1000: ")) if guess > number: print(guess, "é demasiado alto.") elif guess < number: print(guess, "é demasiado baixo.") print(guess, "é correto.") print(tentativas, "tentativas") Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 20 / 28

Jogo Hi-Lo (cont.) Algumas questões: 1 Qual é a melhor estratégia para o jogador humano? 2 Qual é o menor número de tentativas no pior caso? Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 21 / 28

Passeio aleatório Vamos usar os módulos turtle e random para simular um passeio aleatório da tartaruga: 1 avançar uma distância fixa (passo); 2 rodar um ângulo aleatório; 3 repetir um número fixo de passos. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 22 / 28

Primeira versão import turtle import random def passeio(n,a): Desenhar um passeio aleatório. n : número de passos; a : ângulo máximo. step = 10 # medida de cada passo for i in range(n): turtle.forward(step) angle = random.randint(-a,a) turtle.left(angle) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 23 / 28

Primeira versão (cont.) >>> passeio(100,30) >>> passeio(200,60) >>> passeio(200,120) Muito frequentemente a tartaruga sai fora da janela! Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 24 / 28

Limites da janela Queremos garantir que a tartaruga fica dentro da janela; para isso vamos usar algumas funções extra do módulo turtle: xcor() obter a coordenada horizontal da tartaruga; ycor() obter a coordenada vertical da tartaruga; window_width() obter a largura da janela; window_height() obter a altura da janela; setheading(α) definir a orientação da tartaruga; towards(x,y) calcular a orientação para um ponto. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 25 / 28

Verificar limites Testar se a tartaruga está visível (dentro da janela): Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 26 / 28

Verificar limites (cont.) def visível(): "Verificar se a tartaruga está dentro da janela." w = 0.5*window_width() # dimensões da janela h = 0.5*window_height() x = xcor() # posição atual y = ycor() return (x<w and x+w>=0 and y<h and y+h>=0) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 27 / 28

Segunda versão import turtle import random def passeio(n,a): Desenhar um passeio aleatório. n : número de passos; a : ângulo máximo. step = 10 # medida de cada passo for i in range(n): turtle.forward(step) if visível(): # rodar aleatóriamente angle = random.randint(-a,a) turtle.left(angle) else: # orientar para a origem angle = turtle.towards(0,0) turtle.setheading(angle) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 6 Números pseudo-aleatórios 2015 28 / 28