Buscar

10-io-2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

1/21
Programação Funcional
Capítulo 10
Números Aleatórios
Argumentos da Linha de Comando
Arquivos
José Romildo Malaquias
Departamento de Computação
Universidade Federal de Ouro Preto
2013.1
2/21
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
3/21
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
4/21
Números aleatórios
Para gerar um número pseudo-aleatório em Haskell podemos usar o móduloSystem.Random.
Atavés da classe Random é possível obter valores aleatórios de uma variedade de
tipos.
A função randomRIO:
randomRIO :: Random a => (a, a) -> IO a
Esta função recebe um par de valores (inf,sup) e resulta em uma operaçã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 [inf,sup].
5/21
Exemplo: lançamento de dados
lancadados.hs
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)
6/21
Exemplo: lançamento de dados (cont.)
Execução do programa:
$ ./lancadados
Lancamento de dois dados
Faces obtidas: 3 e 5
$ ./lancadados
Lancamento de dois dados
Faces obtidas: 4 e 1
7/21
Atividade: adivinhe 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:
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.
8/21
Atividade: adivinhe o número (cont.)
Roteiro
1. Em um arquivo adivinha.hs defina o módulo Main exportando a variável main.
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
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 o item 4)
verifica se o usuário deseja jogar novamente (veja o item 5)
I se sim, executa jogar recursivamente
I se não, não faz nada
9/21
Atividade: adivinhe o número (cont.)
Para gerar um número aleatório, utilize a função
randomRIO :: Random a => (a, a) -> IO a 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 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.
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:
I se for igual, exibe uma mensagem parabenizando o usuário por ter adivinhado o número
I caso contrário
I exibe uma mensagem informando que o número é muito pequeno ou muito grande
adequadamente
I exibe uma mensagem solicitando ao usuário uma nova tentativa
I faz uma nova tentativa através de uma chamada recursiva de acertar
10/21
Atividade: adivinhe o número (cont.)
A função acertar deverá ser usada na definição de jogar (veja o item 3).
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 é
I s ou S, retornando verdadeiro
I n ou N, retornando falso
I 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 o item 3) para verificar se o usuário
deseja continuar jogando ou não.
Todas as definições solicitadas devem ser acompanhadas de uma assinatura de
tipo.
11/21
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
12/21
Argumentos da linha de comando
getArgs :: IO [String]
A ação de E/S getArgs (definida no módulo System.Environment), quando
executada, retorna uma lista formada pelos argumentos da linha de comando do
programa.
getProgName :: IO String
A ação de E/S getProgName (definida no módulo System.Environment), quando
executada, retorna o nome do programa.
13/21
Exemplo: argumentos do programa
args.hs
module Main (main) where
import System.Environment (getArgs, getProgName)
main =do progName <- getProgName
putStrLn "The program name is:"
putStrLn progName
putStrLn ""
args <- getArgs
putStrLn "The arguments are:"
mapM putStrLn args
14/21
Exemplo: argumentos do programa (cont.)
Execução do programa:
$ ./args a b c -o test
The program name is:
args
The arguments are:
a
b
c
-o
test
15/21
Atividade: adivinhe o número
Tarefa 1
Modifique o programa adivinha.hs de forma que o usuário possa especificar o
intervalo a ser utilizado para adivinhar o número através de dois argumentos na linha
de comando.
Tarefa 2
Modifique o programa adivinha.hs para que seja exibida o número de tentativas
feitas pelo usuário.
16/21
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
17/21
Arquivos
Haskell possui várias definições para lidar com arquivos.
type FilePath = String
Tipo usado para representar o caminho do arquivo, incluindo o seu nome.
readFile :: FilePath -> IO String
Lê o conteúdo de um arquivo como uma única string.
writeFile :: FilePath -> String -> IO ()
Escreve uma string em um arquivo.
appendFile :: FilePath -> String -> IO ()
Acrescenta uma string no final de um arquivo.
18/21
Exemplo: processar notas em arquivo
Criar um programa para ler de um arquivo os dados dos alunos de uma turma – o
código, o nome, a nota na primeira avaliação, a nota na segunda avaliação – calcular a
média aritmética das notas e determinar a situação de cada aluno, gravando os
resultados em outro arquivo.
19/21
Exemplo: processar notas em arquivo (cont.)
Arquivo de entrada:
1234 Pedro 1.5 1.7
1111 Carla 6.2 7.0
2121 Rafael 8.1 8.8
4321 Ivan 5.0 5.2
20/21
Exemplo: processar notas em arquivo (cont.)
Arquivo de saída:
1234 Pedro 1.5 1.7 1.6 reprovado
1111 Carla 6.2 7.0 6.6 exame especial
2121 Rafael 8.1 8.8 8.45 aprovado
4321 Ivan 5.0 5.2 5.1 exame especial
21/21
Fim
	Números aleatórios
	Argumentos da linha de comando
	Arquivos

Outros materiais