22
1/22 Programação Funcional Capítulo 9 Números Aleatórios Argumentos da Linha de Comando Arquivos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1

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

Embed Size (px)

Citation preview

Page 1: Números Aleatórios Argumentos da Linha de Comando Arquivos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22/22

Fim