Números Aleatórios Argumentos da Linha de Comando Arquivos
-
Upload
truonghanh -
Category
Documents
-
view
238 -
download
3
Transcript of Números Aleatórios Argumentos da Linha de Comando Arquivos
![Page 1: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/1.jpg)
1/22
Programação Funcional
Capítulo 9
Números AleatóriosArgumentos da Linha de Comando
Arquivos
José Romildo Malaquias
Departamento de ComputaçãoUniversidade Federal de Ouro Preto
2012.1
![Page 2: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/2.jpg)
2/22
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
![Page 3: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/3.jpg)
3/22
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
![Page 4: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/4.jpg)
4/22
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 detipos.
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 deE/S que, quando executada, obtém e retorna o próximo valor aleatório do tipo auniformemente distribuído no intervalo [inf,sup].
![Page 5: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/5.jpg)
5/22
Exemplo: lançamento de dados
lancadados.hsmodule 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)
![Page 6: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/6.jpg)
6/22
Exemplo: lançamento de dados (cont.)
Execução do programa:
$ ./lancadadosLancamento de dois dadosFaces obtidas: 3 e 5
$ ./lancadadosLancamento de dois dadosFaces obtidas: 4 e 1
![Page 7: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/7.jpg)
7/22
Atividade: adivinhe o número
Escreva um aplicativo que execute adivinhe o número como mostrado a seguir.
Seu programa escolhe o número a ser adivinhado selecionando um inteiroaleatório no intervalo de 1 a 1.000.
O aplicativo exibe o prompt Adivinhe um número entre 1 e 1000.
O jogador insere uma primeira suposição.
Se o palpite do jogador estiver incorreto, seu programa deve exibir Muito alto.Tente novamente ou Muito baixo. Tente novamente para ajudar o jogador a zerarmediante uma resposta correta.
O programa deve solicitar ao usuário o próximo palpite.
Quando o usuário insere a resposta correta, exiba Parabéns, você adivinhou onúmero, e permita que o usuário escolha se quer jogar novamente.
![Page 8: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/8.jpg)
8/22
Atividade: adivinhe o número (cont.)
Tarefa 1
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
![Page 9: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/9.jpg)
9/22
Atividade: adivinhe o número (cont.)
Tarefa 3
O programa deve permitir ao usuário jogar várias vezes, o que nos leva à necessidadedo 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 recursivamentese não, não faz nada
A ação jogar deve ser usada em main para que o usuário tenha a chance de jogar.
![Page 10: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/10.jpg)
10/22
Atividade: adivinhe o número (cont.)
Tarefa 4
Defina uma função acertar que recebe um número a ser adivinhado e resulta emuma 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 onúmerocaso contrário
I exibe uma mensagem informando que o número é muito pequeno ou muito grandeadequadamente
I exibe uma mensagem solicitando ao usuário uma nova tentativaI faz uma nova tentativa através de uma chamada recursiva de acertar
![Page 11: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/11.jpg)
11/22
Atividade: adivinhe o número (cont.)
Tarefa 5
Defina uma função simOuNao que recebe uma string e resulta em uma ação de E/Sque, quando executada:
exibe a string na saída padrão (com o objetivo de fazer uma pergunta do tipo simou não ao usuário)
lê a resposta do usuário
verifica se a resposta és ou S, retornando verdadeiron ou N, retornando falsoqualquer outra coisa, chamando simOuNao novamente
Use uma expressão case.
Esta função deve ser usada em jogar para verificar se o usuário deseja continuarjogando ou não.
![Page 12: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/12.jpg)
12/22
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
![Page 13: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/13.jpg)
13/22
Argumentos da linha de comando
getArgs :: IO [String]A ação de E/S getArgs (definida no módulo System.Environment), quandoexecutada, retorna uma lista formada pelos argumentos da linha de comando doprograma.
getProgName :: IO StringA ação de E/S getProgName (definida no módulo System.Environment), quandoexecutada, retorna o nome do programa.
![Page 14: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/14.jpg)
14/22
Exemplo: argumentos do programa
args.hsmodule Main (main) where
import System.Environment (getArgs, getProgName)
main =do progName <- getProgName
putStrLn "The program name is:"putStrLn progNameputStrLn ""args <- getArgsputStrLn "The arguments are:"mapM putStrLn args
![Page 15: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/15.jpg)
15/22
Exemplo: argumentos do programa (cont.)
Execução do programa:
$ ./args a b c -o testThe program name is:args
The arguments are:abc-otest
![Page 16: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/16.jpg)
16/22
Atividade: adivinhe o número
Tarefa 6
Modifique o programa adivinha.hs de forma que o usuário possa especificar ointervalo a ser utilizado para adivinhar o número através de dois argumentos na linhade comando.
Tarefa 7
Modifique o programa adivinha.hs para que seja exibida o número de tentativasfeitas pelo usuário.
![Page 17: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/17.jpg)
17/22
Tópicos
1 Números aleatórios
2 Argumentos da linha de comando
3 Arquivos
![Page 18: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/18.jpg)
18/22
Arquivos
Haskell possui várias definições para lidar com arquivos.
type FilePath = StringTipo usado para representar o caminho do arquivo, incluindo o seu nome.
readFile :: FilePath -> IO StringLê 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.
![Page 19: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/19.jpg)
19/22
Exemplo: processar notas em arquivo
Criar um programa para ler de um arquivo os dados dos alunos de uma turma – ocódigo, o nome, a nota na primeira avaliação, a nota na segunda avaliação – calcular amédia aritmética das notas e determinar a situação de cada aluno, gravando osresultados em outro arquivo.
![Page 20: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/20.jpg)
20/22
Exemplo: processar notas em arquivo (cont.)
Arquivo de entrada:
1234 Pedro 1.5 1.71111 Carla 6.2 7.02121 Rafael 8.1 8.84321 Ivan 5.0 5.2
![Page 21: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/21.jpg)
21/22
Exemplo: processar notas em arquivo (cont.)
Arquivo de saída:
1234 Pedro 1.5 1.7 1.6 reprovado1111 Carla 6.2 7.0 6.6 exame especial2121 Rafael 8.1 8.8 8.45 aprovado4321 Ivan 5.0 5.2 5.1 exame especial
![Page 22: Números Aleatórios Argumentos da Linha de Comando Arquivos](https://reader031.fdocument.pub/reader031/viewer/2022020113/587217f01a28ab29048b8d6a/html5/thumbnails/22.jpg)
22/22
Fim