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