• Nenhum resultado encontrado

Trabalho de LP 14/03/2011. Prof. Flávio Miguel Varejão. I. Descrição

N/A
N/A
Protected

Academic year: 2021

Share "Trabalho de LP 14/03/2011. Prof. Flávio Miguel Varejão. I. Descrição"

Copied!
8
0
0

Texto

(1)

14/03/2011

Trabalho de LP

Prof. Flávio Miguel Varejão I. Descrição

Sucuri é uma linguagem de programação criada com o intuito de ser utilizada no ensino de programação básica. Sucuri possui um conjunto pequeno e restrito de tipos de dados,

Apresenta-se, a seguir, uma especificação mais detalhada dos tipos usados na construção de programas em Sucuri:

1. Lógico

Valores: V ou F

Operações: E OU NAO 2. Número

Valores: intervalo do conjunto dos números inteiros ou reais Exemplos de Valores: 2 3 12.34 77 8.82

Operações: +−∗ / < <= > >= = <> % ** 3. Lista

Valores: listas de valores de qualquer tipo

Exemplos de Valores: [ ] [ 2 3 5 ] [ 2 3.2 "Flavio" ] [ 2 [ 3 4 5 ] [ 7 8 ] ] Operações: + = += <> []

4. String

Valores: conjunto de cadeias de caracteres delimitados por "" Exemplos de Valores: "Flavio" "adicao" "char" "323" "3det 5" Operações: + <> = += []

Sucuri diferencia letras maiúsculas e minúsculas e possui vários tipos de comandos, descritos a seguir:

1. Atribuição

Formato: @variável <− @expressão

Tipo

Número Lista String

(2)

Exemplos: A <− 10

lista < [ 1 [ 2 3 ] [ 2 [ 4.3 5 ] ] 89 ] lista [ 0 ] <− 13 + A ** 2

2. Entrada

Formato: LEIA ( @string ) Exemplos:

LEIA ( “Numero:#“ ) LEIA ( “Nome:#“ ) LEIA ( “Numero:#“ ) 3. Saida

Formato: APRESENTA ( @string , @valor ) Exemplos:

APRESENTA ( “Valor#Verdadeiro:#“ , V ) APRESENTA (“Uma#Lista:#“ , lista )

APRESENTA (“Um#Valor #nteiro:#“ , lista [ 3 ] + 7 ) APRESENTA (“Uma#String:#“ , “teste” )

4. Condicional Formato: SE ( @valorLógico ) ENTAO @sequênciaComandos {SENAO @sequênciaComandos} FIM-SE Exemplos: SE ( A < 30 ) ENTAO A <− A + 70 SENAO SE ( A > 70 ) ENTAO A <− A − 10 FIM-SE A <− A + 15 FIM-SE 5. Repetição Formato: REPITA @sequênciaComandos {{{SAIA-QUANDO ( @valorLógico ) @sequênciaComandos}}} FIM-REPITA Exemplos: i < 3

(3)

REPITA i <− i + 3 SAIA-QUANDO ( i > 345 ) i <− i + 7 FIM-REPITA i < 3 REPITA i < i + 3 SAIA-QUANDO ( i % 11 = 0 ) i <− i + 7 SAIA-QUANDO ( i % 17 = 0 ) i <− i + 22 FIM-REPITA 6. Subprograma Formato:

SUBPROGRAMA @nome ( @listaParâmetros ) INICIO @sequênciaComandos {{RETORNE {@valor} @sequênciaComandos}} FIM-SUBPROGRAMA Exemplo: SUBPROGRAMA fatorial ( n ) INICIO SE ( n < 2 ) ENTAO RETORNE 1 SENAO RETORNE n * fatorial ( n – 1 ) FIM-SUBPROGRAMA 7. Programa Formato: PROGRAMA @nome {{@subprograma}} INICIO @sequênciaComandos FIM-PROGRAMA Exemplo: PROGRAMA Exemplo

SUBPROGRAMA somaMatriz ( matriz , nlinhas , ncolunas ) INICIO

soma < 0 i <− 0

(4)

j <− 0 REPITA

soma < soma + matriz [ i ] [ j ] SAIA-QUANDO ( j = ncolunas – 1 ) j <− j + 1 FIM-REPITA SAIA-QUANDO ( i = nlinhas – 1 ) i < i + 1 FIM-REPITA RETORNE soma FIM-SUBPROGRAMA INICIO matrizQuadrada <− [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 9 ] ]

somaMatrizQuadrada <− somaMatriz ( matrizQuadrada , 3 , 3 ) x <− matrizQuadrada [ 1 ] [ 2 ]

APRESENTA ( “” , “\n” )

APRESENTA ( “Soma#dos#Valores#da#Matriz:#“ , somaMatrizQuadrada ) APRESENTA ( “Um#Valor#da#Matriz:#“ , x )

APRESENTA ( “Uma#Soma:#“ , somaMatrizQuadrada + x ) APRESENTA ( “” , “\n” )

FIM-PROGRAMA

Faça um programa em Python que traduza programas na linguagem Sucuri para a própria linguagem Python e os execute apropriadamente. Em caso de erro sintático na codificação do programa em Sucuri, o programa tradutor deve indicar em qual linha do código Sucuri que o erro ocorre.

Por uma questão de simplificação, assuma que tudo que não foi explicitamente especificado nesse documento (por exemplo, regras sintáticas de construção de expressões) segue exatamente a sintaxe de python. Tipicamente, o que não foi explicitado aqui foi apresentado no formato @algumacoisa, como por exemplo, @variavel ou @expressao. Assim, a menos de diferenças explicitamente descritas nessa especificação (por exemplo, na forma dos operadores de igualdade e desigualdade e na forma de separação de elementos de uma lista), a sintaxe é exatamente a mesma de python.

Considere também que erros nos arquivos de programa sucuri só ocorrerão na sintaxe dos comandos descritos aqui. Por exemplo, como aqui não são descritas as regras de construção de expressões, você não precisa verificar se uma expressão é bem formada ou não.

Note que na especificação de comandos tudo que se encontra entre chaves significa que pode ocorrer ou não, tudo que se encontra entre chaves duplas significa que pode ocorrer zero ou mais vezes, tudo que se encontra entre chaves triplas significa que pode ocorrer uma ou mais vezes.

Todos arquivos sucuri devem ser arquivos texto com extensão .su (por exemplo, matriz.su ou fatorial.su). Seu programa deve se chamar sucuri.py. Assim para executar o programa matriz.su você deve digitar a seguinte linha de comando:

(5)

python sucuri.py < matriz.su

Toda e qualquer informação produzida pelo comando APRESENTA deve ser gravada no arquivo saida.txt. Note ainda que é necessário gerar também um arquivo .py (no caso do exemplo, matriz.py) com o código do programa traduzido para python, que será usado para ajudar na correção dos trabalhos.

II. Especificações Complementares

1. As strings de sucuri não possuem internamente caracteres brancos, aspas simples ou duplas. Espaços são representados através do caractere #. Quando o programa sucuri for executado e apresentar uma string, eventuais caracteres # que possam existir devem ser substituídos e impressos como espaços brancos.

2. Haverá obrigatoriamente espaço em branco separando os símbolos e identificadores de sucuri. Exemplos:

A <- i + soma ( a , b ) SE ( x < 3 ** y ) ENTAO

3. Pode haver parênteses internos nas condições dos comandos SE e do SAIA-QUANDO. Portanto, os exemplos a seguir são válidos:

SE ( x < ( y + ( x - 3 * z) ) / 2 ) ENTAO SE ( a < divide ( 30 , 3 ) ) ENTAO

4. É necessário validar a quantidade de parâmetros na chamada de um subprograma. Considere que toda chamada de subprograma só aparece depois dele ter sido definido.

5. A mensagem a ser impressa no arquivo saida.txt em caso de erro na tradução é: Erro na linha <numero da linha>

Por exemplo: Erro na linha 13

6. Palavras reservadas de Python como True e while não podem ser usados como identificadores em programas sucuri.

7. As palavras que designam valores (V e F), comandos (SE, REPITA) e operadores (E, OU, NÃO) de Sucuri são reservadas e, portanto, não podem ser usadas como identificadores.

8. Ao final de um programa sucuri (após o FIM-PROGRAMA) nunca será colocado qualquer outro caractere seja espaço em branco, nova linha ou qualquer outro. 9. Não é permitido usar no programa tradutor operações que leiam o buffer de

entrada inteiro como readlines() ou similares. III. Requisitos da implementação

1. Modularize seu código adequadamente. O uso de variáveis globais é proibido.

2. Crie códigos claros e organizados. Utilize um estilo de programação consistente, Comente seu código.

(6)

3. Os arquivos .su devem ser colocados na mesma pasta onde se encontram os arquivos fonte do seu programa. Os arquivos saida.txt e .py devem ser gerados nesta mesma pasta.

IV. Condições de Entrega

O trabalho deve ser feito individualmente e submetido por e-mail até as 23:59 horas das datas limites especificadas. Note que as datas limites já levam em conta um dia adicional de tolerância para o caso de problemas de submissão via rede. Isso significa que o aluno deve submeter seu trabalho até no máximo um dia antes da data limite. Se o aluno resolver submeter o trabalho na data limite, estará fazendo isso assumindo o risco do trabalho ser cadastrado no sistema após o prazo. Em caso de recebimento do trabalho após a data limite, o trabalho não será avaliado e a nota será ZERO. Aluno que receber zero por este motivo e vier pedir para o professor considerar o trabalho estará cometendo um ato de DESRESPEITO ao professor e estará sujeito a perda adicional de pontos na média.

V. Formato de Entrega dos Trabalhos

O recebimento dos trabalhos é automatizado. Portanto, as regras a seguir devem ser seguidas à risca para evitar que seu trabalho não possa ser avaliado.

O código-fonte de sua solução deverá ser compactado e entregue por mail (anexo ao e-mail) para o endereço fvarejao@ninfa.inf.ufes.br.

Serão aceitos trabalhos entregues até as 23h59 da data limite. O assunto do e-mail deverá ser o seguinte:

lp:trab<id>:<nome>:

O termo “<id>” deve ser substituído pelo número correspondente do trabalho (1, 2 ou 3). O termo “<nome>” deverá ser substituído pelo nome e o último sobrenome do aluno, sem acentos, til ou cedilha, como no exemplo abaixo:

lp:trab1:Flavio Varejao:

Atenção: o e-mail não deve ser enviado por servidores de emails que não seguem padrões normais de envio, tais como, TERRA, HOTMAIL ou BOL, pois o recebimento automatizado não consegue reconhecer seu trabalho.

O arquivo compactado deve estar no formato tar.gz com o nome trab<id>.tar.gz e conter apenas os arquivos fonte do programa (não deve conter arquivos compilados nem arquivos texto usados para teste). Para isso, abra um console, mude o diretório de trabalho para a pasta onde se encontra o código-fonte do trabalho e execute o seguinte comando (no caso do trabalho 1):

tar -zcvf trab1.tar.gz *

Preste bastante atenção para fazer com que o codigo fonte não seja colocado em subdiretórios dentro do arquivo compactado. Se isso ocorrer a compilação automática não funcionará e sua nota será ZERO. Atente também que os nomes usados no arquivo principal dos trabalhos DEVEM ser: trab1.py, trab2.py e trab3.py.

(7)

Para: fvarejao@ninfa.inf.ufes.br De: Joao da Silva

Assunto: lp:trab1:Joao Silva: Anexo: trab1.tar.gz

Para a compilação e execução dos programas, em princípio, serão utilizadas as versões de python instaladas no labgrad. Caso haja alguma modificação de versão de correção, ela será divulgada oportunamente. Os programas serão executados no sistema operacional linux. Para que não haja problemas na correção do seu trabalho e você seja prejudicado, garanta que ele é executado na versão de correção e no sistema operacional linux.

Se tudo correr bem, você receberá um e-mail de confirmação do recebimento do trabalho. Neste e-mail haverá um hash MD5 do arquivo recebido. Para garantir que o arquivo foi recebido sem ser corrompido, gere o hash MD5 do arquivo que você enviou e compare com o hash recebido na confirmação. Para gerar o hash, utilize o seguinte comando:

md5sum trab1.tar.gz

Caso você não receba o e-mail de confirmação ou caso o valor do hash seja diferente, envie o trabalho novamente.

VI. Avaliação

Os trabalhos terão nota zero se:

1) A data de entrega for fora do prazo estabelecido; 2) O trabalho não estiver correto sintaticamente;

3) O trabalho não gerar o arquivo com o resultado e formato esperado; 4) For detectada a ocorrência de plágio pelo sistema.

Ainda, os trabalhos poderão ser avaliados segundo os seguintes critérios: 1) Cumprimento das restrições estabelecidas no ítem III deste documento;

2) Modularização (considerando o uso de arquivos separados para os diversos tipos abstratos de dados);

3) Ausência de uso de variáveis globais;

4) Legibilidade (nomes de variáveis bem escolhidos, código bem formatado, uso de comentários quando necessário, etc.);

5) Consistência (utilização de um mesmo padrão de código);

6) Eficiência (sem exageros, tentar evitar grandes desperdícios de recursos); Será adotado o seguinte procedimento de correção dos trabalhos:

1. Os programas serão executados automaticamente com baterias de teste criadas especialmente para isso. Algumas dessas baterias serão divulgadas antes da submissão dos trabalhos para que os alunos possam verificar seus programas. 2. A nota do aluno será obtida automaticamente comparando-se os arquivos saida.txt

(8)

3. Alguns dos trabalhos serão selecionados para inspeção (verificação dos critérios de correção) e adequação da nota.

4. No caso dos trabalhos que falharem nos testes automáticos será dada uma oportunidade de revisão da nota para que os autores apresentem as razões pelas quais o teste falhou. Para isso, serão divulgadas as baterias utilizadas e o aluno deverá enviar e-mail para fvarejao@ninfa.inf.ufes.br com assunto: lp - revisão do trabalho <id> e contendo seu nome completo e as modificações que devem ser feitas no código para que o trabalho funcione perfeitamente. Em função dessas modificações uma nova nota pode ser dada. Em caso de necessidade, será marcado um horário para esclarecimentos in loco.

Observação importante:

Caso haja algum erro neste documento, serão publicadas novas versões e divulgadas erratas em sala de aula. É responsabilidade do aluno manter-se informado, freqüentando as aulas ou acompanhando as novidades na página da disciplina na Internet.

Referências

Documentos relacionados

Depois de terem aprofundado seus conhecimentos sobre a polissemia e o duplo sentido que as palavras podem ter, argumentem se o diretor tinha ou não razão para fazer a leitura que

Las Casas (2009) também diz que deve ser passada para os funcionários a importância de servir o consumidor, com o propósito de satisfazê-lo, mas que não seja

crédito ao consumo e a sociedades não financeiras. * Inclui o valor total em dívida: i) do crédito que tenha prestações de capital ou juros vencidos há mais de 90 dias; ii)

 O texto NÃO deve conter subitens em nenhuma das seções do artigo, deve ser apresentado em arquivo Microsoft Word e anexado como “Main Document” (Step 6), no

Se o arquivo /etc/at.allow , não existir esse arquivo será consultado , e serão bloqueados para usar o AT usuários que conter nele ,. Se nenhum dos dois arquivos existirem somente

As referências estão relacionadas direta e indiretamente às normas regulamentadoras para uma produção dentro dos padrões determinados, ao controle físico e

No entanto, para melhor compreensão das principais causas das dificuldades de aprendizagem, Fonseca (2002) realizou um agrupamento destas causas com base nos critérios:.. a)

Quando um arquivo (ou arquivos) é compactado, uma extensão correspondente ao programa usado é adicionada ao nome do arquivo (caso o arquivo seja compactado pelo gzip