Ir para o conteúdo principal
Paca
  • Página inicial
  • Mais
Você acessou como visitante
Acessar
Página inicial
  1. Semestres anteriores
  2. MAC0122 2016
  3. EP4
Tarefa

EP4

Condições de conclusão
Aberto: sábado, 3 set. 2016, 00:05
Vencimento: domingo, 11 set. 2016, 23:55

EP4 - Régua

Os objetivos deste exercício são praticar a:

  1. leitura através do teclado (= função input());
  2. manipulação de strings;
  3. 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

  1. Faça o download do arquivo esqueleto_ep4.py.
  2. Mude o nome do arquivo esqueleto_ep4.py para NUSP_ep4.py, onde o NUSP é o seu número USP.
  3. Abra o esqueleto no Spyder ou em qualquer outro editor ou ambiente apropriado para desenvolver programas em Python.
  4. Leia e preencha o cabeçalho com o seu nome, nusp, etc. Não modifique o resto do cabeçalho.
  5. 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().
    
  6. 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.

  7. 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).

  • esqueleto_ep4.py esqueleto_ep4.py
    2 setembro 2016, 17:39 PM
Você acessou como visitante (Acessar)
Resumo de retenção de dados
Baixar o aplicativo móvel.
Fornecido por Moodle