EP4
EP4 - Régua
Os objetivos deste exercício são praticar a:
- leitura através do teclado (= função input());
- manipulação de strings;
- implementação de uma função recursiva.
Problema
Em uma régua de ordem n o "traço" no ponto médio da régua tem comprimento n, os traços nos pontos médios dos subintervalos superior e inferior têm comprimento n-1, e assim por diante. Eis exemplos de réguas de ordens 0 a 4.
ordem 0 1 2 3 4
. . . . .
. - . - . - . -
. . -- . -- . --
. - . - . -
. . --- . ---
. - . -
. -- . --
. - . -
. . ----
. -
. --
. -
. ---
. -
. --
. -
.
Representação de uma régua
Uma régua de ordem n será representada por um string de comprimento 1 se n = 0 e 5×2n-n-2 se n ≥ 1, como exemplificado na tabela a seguir.
----------------------------------------
ordem | representação
----------------------------------------
0 | '.'
1 | '.\n. -\n.'
2 | '.\n. -\n. --\n. -\n.'
3 | '.\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n.'
4 | '.\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n.'
5 | '.\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. -----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n.'
6 | ...
Essa representação é de tal forma que ao exibirmos o string com a função print() obtemos a visualização da régua.
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> r0 = '.'
>>> print(r0)
.
>>> r1 = '.\n. -\n.'
>>> print(r1)
.
. -
.
>>> r2 = '.\n. -\n. --\n. -\n.'
>>> print(r2)
.
. -
. --
. -
.
>>> r3 = '.\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n.'
>>> print(r3)
.
. -
. --
. -
. ---
. -
. --
. -
.
>>>
A representação do interior de uma régua de ordem 0 é o string vazio (= '') e de uma régua de ordem n ≥ 1 é o string que representa a régua depois de apagarmos o prefixo '.\n' e o sufixo '.'.
----------------------------------------
ordem | representação do interior
----------------------------------------
0 | ''
1 | '. -\n'
2 | '. -\n. --\n. -\n'
3 | '. -\n. --\n. -\n. ---\n. -\n. --\n. -\n'
4 | '. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n'
5 | '. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. -----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n. ----\n. -\n. --\n. -\n. ---\n. -\n. --\n. -\n'
6 | ...
O que você deve fazer
Você devera escrever duas funções
- main(); e
- regua().
A especificação de cada uma dessas funções está no doc-string da função no arquivo esqueleto_ep4.py
A sua função main() deve apresentar o PROMPT, definido no arquivo esqueleto_ep4.py, e interativamente aguardar que algo seja digitado seguido de ENTER. Se for digitado:
- o caractere QUIT, definido no arquivo esqueleto_ep4.py, o programa deve ser encerrar a sua execução; e
- um número inteiro n > 0, o programa deve:
- imprimir a régua de ordem n; e, em seguida
- apresentar novamente o PROMPT e aguardar que algo mais seja digitado.
A seguir está um exemplo de como o seu programa (= função main()) deve se comportar. O que aparece em vermelho foi digitado pelo usuário.
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> main()
régua >>> 0
. régua >>> 1
. . - . régua >>> 2
. . - . -- . - . régua >>> 3
. . - . -- . - . --- . - . -- . - . régua >>> 4
. . - . -- . - . --- . - . -- . - . ---- . - . -- . - . --- . - . -- . - . régua >>> q
Fui! >>>
A sua função regua() deverá ser recursiva.
Roteiro
- Faça o download do arquivo esqueleto_ep4.py.
- Mude o nome do arquivo esqueleto_ep4.py para NUSP_ep4.py, onde o NUSP é o seu número USP.
- Abra o esqueleto no Spyder ou em qualquer outro editor ou ambiente apropriado para desenvolver programas em Python.
- Leia e preencha o cabeçalho com o seu nome, nusp, etc. Não modifique o resto do cabeçalho.
- Execute o arquivo para ver se está tudo ok. O programa deve imprimir:
Vixe! Ainda não fiz a função main(). Vixe! Ainda não fiz a função regua(). -
Antes de escrever cada função, leia atentamente a especificação da função e os exemplo acima.Teste cada função separademente das demais usando o console do Spyder (=Python Shell ou IPython). Você também pode usar para os testes um terminal.
- Após testar o seu programa, entregue o arquivo NUSP_ep4.py (onde NUSP é o seu número USP) usando o botão ENVIAR mais abaixo. Não deixe de seguir as instruções para entrega de EPs.
Entrega:
A primeira entrega deve ser feita até o dia 11/09 (até 23h55m).
O EP receberá comentários no dia 12/09 13/09.
Uma nova versão poderá ser entregue até o dia 14/09 (até 23h55m) 15/09 (até 23h55m).
- 2 setembro 2016, 17:39 PM