números aleatórios argumentos da linha de comando arquivos

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

Upload: truonghanh

Post on 08-Jan-2017

244 views

Category:

Documents


3 download

TRANSCRIPT

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