Programas Interativos: Valores Aleatórios



Documentos relacionados
Números Aleatórios Argumentos da Linha de Comando Arquivos

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

I Semana de Software Livre da USP Dojo C

Universidade Federal de Rondônia Técnicas de Desenvolvimento de Programas Lista 4

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Manual do Sistema "Coelho - Sistema de Analise Loterica" Editorial Brazil Informatica

Linguagem algorítmica: Portugol

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n));

Componentes da linguagem C++

Parte I. Demoiselle Mail

Secretaria da Educação do Estado do Rio Grande do Sul. Manual: Sistema de Controle Patrimonial Inventário

Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

MANUAL DE INSTALAÇÃO DO ODONTO TECHNOLOGY

OBS.: Usem as funções rand() e srand(). Qualquer duvida,

MANUAL DO CIDADÃO. Para acessar a página do E-SIC clique no link do e-sic na página inicial do site (figura 1):

Setor de Administração Federal Sul (SAFS), Quadra 8 - Lote 1, Bloco A, sala 510 Brasília DF Telefone: (61)

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Juntada de Processos. Sistema Módulo Usuários Perfil. A juntada pode ser de dois tipos:

Outlook Apresentação

MANUAL C R M ÍNDICE. Sobre o módulo de CRM Definindo a Campanha... 3

EXEMPLO DE COMO FAZER UMA MALA DIRETA

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

LOGs e ALERTAS de DESEMPENHO

Microsoft Excel Macro V. Índice 16-) Formulários ) Gerando código para o Formulário... 49

Adicionando Caixas de Verificação no seu Programa Java

AULA: BrOffice Impress terceira parte. Ao final dessa aula, você deverá ser capaz de:

Processamento da Informação Teoria. Algoritmos e Tipos de dados

2. Método de Monte Carlo

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

O primeiro passo é habilitar acesso externo através de web service a configuração é bem simples e não exige maiores explicações.

Manual do Painel Administrativo

Aula 3 - Registro de Imagem

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Tutorial: Webmail. Dicas de Uso e Funcionalidades 02/2015. Versão 01

Perguntas frequentes do Samsung Drive Manager

SuperStore. Sistema para Automação de Óticas. MANUAL DO USUÁRIO (Módulo Financeiro)

Sistema de Logística Reversa

e-ouv Passo-a-passo Sistema de Ouvidorias do Poder Executivo Federal Junho, 2015 Controladoria-Geral da União

A4 Projeto Integrador e Lista de Jogos

Manual de Instalação e Configuração do Primeiro Backup Versão PRO

Cartilha da Nota Fiscal Eletrônica 2.0 Hábil Empresarial PROFISSIONAL & Hábil Enterprise

Controle Patrimonial WEB

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Organização de programas em Python. Vanessa Braganholo

Simulado de Linguagem de Programação Java

Aula 12 Lista de verificação de segurança para o Windows 7

Biometria Instalação de Serviço e Certificado Digital

Programação Funcional. Aula 7. Entrada e Saída. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /86 ...

Mensagens De Erro. Versão: 1.0

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

IFTO LÓGICA DE PROGRAMAÇÃO AULA 02

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar

Comandos de repetição while

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Os ícones que são usados nos desenhos de moldes estão dispostos na paleta na seguinte ordem:

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

III- Módulo CRM Segmentação

2 echo "PHP e outros.";

Geração Impressão - Consultas

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006

Prof. Esp. Adriano Carvalho

Capítulo 6. Criando um Diagrama de Caso de Uso Inicial

Introdução ao Tableau Server 7.0

MANUAL DE UTILIZAÇÃO Aplicativo Controle de Estoque Desktop

Apresentação. Nossa sugestão é que você experimente e não tenha medo de clicar!!!

4/5/2009 CONTROLSOFT CONTROLGAS CONTROLE DE VALE GÁS. Manual de Operação

MANUAL DO SISTEMA GT WEB CALL. Teledata

QUESTÃO 01 - DIAGRAMA DE SEQUENCIA (CONCEITOS)

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

ÍNDICE 1 INTRODUÇÃO ACESSO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO ANDAMENTO DE PROTOCOLO.

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

Roteiro do Programa e Entrada/Saída

MC-102 Aula 17 Strings e Matrizes

Manual do Módulo SAC

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

CobreBemX» Documentação

ROTEIRO PARA TREINAMENTO DO SAGRES DIÁRIO Guia do Docente

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

INF INTELIGÊNCIA ARTIFICIAL TRABALHO 2 LÓGICA

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Manual do Sistema "Vida em Mão - Controle Financeiro Para PALM" Editorial Brazil Informatica

Lista de Exercícios da 3ª Unidade. ( Ponteiros, Alocação dinâmica, Arquivos, Estruturas de Dados)

Roteiro 2: (Planilhas Eletrônicas) - Função procv / manipulação de formulários

Especificação do 3º Trabalho

Manual de configuração do sistema

Aula 4: adivinhe o número

MANUAL DO GERENCIADOR ESCOLAR WEB

Table of Contents. PowerPoint XP

Tutorial de TCP/IP Parte 26 Criando Registros

Manual de Operação do Sistema de Tickets Support Suite

BEM-VINDO AO dhl PROVIEW GUIA RÁPIDO DE USO

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

4 O Workflow e a Máquina de Regras

SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

Transcrição:

Programação Funcional UFOP DECOM 2013 2 Aula prática Programas Interativos: Valores Aleatórios José Romildo Malaquias Resumo O objetivo desta aula é aprender a usar números aleatórios em Haskell. Para tanto você vai implementar o jogo adivinha o número. Sumário 1 Valores aleatórios 1 2 Exemplo: lançamento de dados 1 3 Jogo: adivinha o número 2 1 Valores aleatórios A biblioteca random, que define o módulo System.Random, lida com a tarefa comum de geração de valores pseudo-aleatórios em Haskell. Atavés da classe Random é possível obter valores aleatórios de uma variedade de tipos. Esta classe fornece uma maneira de extrair valores de um gerador de números aleatórios. Por exemplo, a instância Float de Random permite gerar valores aleatórios do tipo Float. A geração de números aleatórios pode ser feita através da manipulação explícita de um gerador de números aleatórios, ou através de um gerador global acessível através de ações de entrada e saída. Vamos considerar apenas o segundo caso. A classe Random define dois métodos para geração de números aleatórios usando o gerador global: randomio : randomio :: Random a => IO a randomio é uma ação de E/S que, quando executada, obtém do sistema e retorna o próximo valor aleatório do tipo a. A faixa de possíveis valores normalmente é: para tipos limitados: todo o tipo. para tipos fracionários: o intervalo semi-fechado [0,1). para o tipo Integer : a faixa de Int. randomrio : randomrio :: Random a => (a, a) -> IO a Esta função recebe um par de valores (inf,sup) e resulta em uma ação de E/S que, quando executada, obtém do sistema e retorna o próximo valor aleatório do tipo a, uniformemente distribuído no intervalo fechado [inf,sup]. 2 Exemplo: lançamento de dados lancadados.hs 1

module Main (main) where import System.Random (randomrio) main :: IO () main = do putstrln "Lançamento de dois dados" x <- randomrio (1,6::Int) y <- randomrio (1,6::Int) putstrln ("Faces obtidas: " ++ show x ++ " e " ++ show y) Exemplo de execução da aplicação Lancamento de dois dados Faces obtidas: 3 e 5 Exemplo de execução da aplicação Lancamento de dois dados Faces obtidas: 4 e 1 3 Jogo: adivinha o número Escreva um aplicativo para jogar o jogo adivinhe o número como explicado a seguir: O programa escolhe um número a ser adivinhado pelo jogador (usuário) selecionando um inteiro aleatório no intervalo de 1 a 1000. O programa exibe a mensagem Adivinhe um número entre 1 e 1000. O jogador informa o seu palpite. Se o palpite do jogador estiver incorreto: o programa exibe a mensagem Muito alto ou Muito baixo convenientemente para ajudar o jogador a acertar o número nas próximas jogadas. o jogo continua com o programa solicitando o próximo palpite e analisando a resposta do usuário. Quando o jogador insere a resposta correta: Tarefa 1 o programa exibe a mensagem Parabéns, você adivinhou o número, e permite que o usuário escolha se quer jogar novamente, e joga novamente em caso afirmativo. Em um arquivo adivinha.hs defina o módulo Main exportando a variável main. Tarefa 2 Defina main como uma ação de E/S que, quando executada: configura o sistema para não realizar bufferização da saída de dados padrão. exibe uma mensagem identificando o programa e sua versão 2

Tarefa 3 O programa deve permitir ao usuário jogar várias vezes, o que nos leva à necessidade do uso de recursão. Defina uma ação de E/S jogar que, quando executada gera um número inteiro aleatório entre 1 e 1000, inclusive interage com o usuário até que o usuário acerte o número (veja a tarefa 4) verifica se o usuário deseja jogar novamente (veja a tarefa 5) se sim, executa jogar recursivamente se não, não faz nada Para gerar um número aleatório, utilize a função randomrio do módulo System.Random. A classe Random é formada pelos tipos para os quais pode-se gerar valores aleatórios. Os tipos inteiros Int e Integer são instâncias desta classe. A função randomrio :: Random a => (a, a) -> IO a recebe um par de valores como argumento e resulta em uma ação de E/S que, quando executada, gera e retorna um número pseudo-aleatório no intervalo fechado definido pelo par. A ação jogar deve ser usada em main para que o usuário tenha a chance de jogar. Tarefa 4 Defina uma função acertar que recebe um número a ser adivinhado e resulta em uma ação de E/S que, quando executada: exibe uma mensagem solicitando um número entre 1 e 1000 lê o número informado pelo usuário compara o número informado com o número a ser adivinhado: se for igual, exibe uma mensagem parabenizando o usuário por ter adivinhado o número caso contrário exibe uma mensagem informando que o número é muito pequeno ou muito grande adequadamente exibe uma mensagem solicitando ao usuário uma nova tentativa faz uma nova tentativa através de uma chamada recursiva de acertar A função acertar deverá ser usada na definição de jogar (veja a tarefa 3). 3

Tarefa 5 Defina uma função simounao que recebe uma string e resulta em uma ação de E/S que, quando executada: exibe a string na saída padrão (com o objetivo de fazer uma pergunta do tipo sim ou não ao usuário) lê a resposta do usuário verifica se a resposta é s ou S, retornando verdadeiro n ou N, retornando falso qualquer outra coisa, chamando simounao novamente para que o usuário responda corretamente. Use uma expressão case. Esta função deve ser usada em jogar (veja a tarefa 3) para verificar se o usuário deseja continuar jogando ou não. 4

Exemplo de execução da aplicação Adivinha o número v1.0 ========================================= Digite um número entre 1 e 1000: 444 Digite um número entre 1 e 1000: 200 Digite um número entre 1 e 1000: 111 Digite um número entre 1 e 1000: 157 Digite um número entre 1 e 1000: 138 Digite um número entre 1 e 1000: 123 Digite um número entre 1 e 1000: 130 Digite um número entre 1 e 1000: 125 Digite um número entre 1 e 1000: 128 Digite um número entre 1 e 1000: 129 Parabéns, você acertou Deseja jogar novamente? n 5