O objetivo deste trabalho é a implementação de um mesmo programa em linguagens com sistema de tipos diferentes.
O trabalho é em equipe de até duas pessoas. O compartilhamento de informações entre as equipes é permitido (e aconselhado), mas o compartilhamento de código não é permitido. Trabalhos que tenham porções significativas de código iguais, ou copiados da internet, serão anulados. Veja a resolução Nº 008/2007-COU para as possíveis sansões disciplinares. Cada membro da equipe deverá apresentar o trabalho individualmente para o professor.
Este trabalho vale 5,0 pontos na nota do terceiro bimestre.
Data de entrega: até o dia 26/09/2013 às 23:00h.
Implementar um programa chamado sstat
que computa estatísticas de linhas de
arquivos texto.
O programa deve receber como parâmetro na linha de comando uma lista de caminhos (arquivos ou diretórios) e escrever na saída padrão a quantidade de linhas em cada tipo de arquivo e o total das linhas, considerando todos os arquivos passados na linha de comando e todos os arquivos na árvore dos diretórios passados na linha de comando.
Por exemplo, considere a existência dos seguintes arquivos com os respectivos números de linhas
Arquivo | Número de linhas |
---|---|
tests/hello/hello.c |
5 |
tests/hello/hello.cpp |
7 |
tests/command-line/sum/sum.c |
10 |
Se o programa for chamado com os parâmetros tests/hello/hello.c
e
tests/command-line/sum/sum.c
, a saída deve ser
15 c
15 total
O que significa que os arquivos com extensão .c
têm 15 linhas, e o total de
linhas dos arquivos também foi 15 (só tinha um tipo de arquivo).
Se o programa for chamado com o parâmetro tests/
, a saída deve ser
15 c
7 cpp
22 total
Neste caso, todos os arquivos da árvore do diretório tests/
foram
contabilizados.
A saída deve ser ordenada pelo número de linhas do tipo de arquivo (maior número de linhas primeiro), e em caso de número de linhas iguais, pela ordem alfabética do tipo (extensão) do arquivo. Os aquivos sem extensão devem ser ignorados. Observe que os números de linhas estão alinhados a esquerda e as extensões alinhadas a direita.
Três versões deste programa devem ser escritas:
Não é permitido a utilização de nenhuma biblioteca que não seja padrão da linguagem/ambiente.
Para facilitar o desenvolvimento dos programas, está disponível um “projeto”
com os arquivos iniciais de código, um programa testador e um Makefile
para
compilar, testar e enviar os programas.
Para fazer o download do projeto é necessário ter o git
instalado. Se você
utiliza um sistema GNU/Linux baseado no Debian (Mint, Ubuntu, etc), o git
pode ser instalado com o comando
sudo apt-get install git
Para fazer o download do projeto, execute o comando
git clone http://malbarbo.pro.br/git/sstat
Após a execução deste comando, um diretório chamado sstat
terá sido criado.
O arquivo src/sstat.py
contém uma implementação do programa em Python que
pode ser usado como exemplo para outras implementações. Não faça apenas uma
tradução deste código, tenha o cuidado de considerar as características
(principalmente o sistema de tipos) de cada linguagem.
O código dos programas deve ser escrito nos arquivos src/sstat.js
,
src/sstat.go
e src/Sstat.java
. Para facilitar os testes, não separe o
código de cada programa em mais que um arquivo.
Os programas necessários para desenvolver este trabalho podem ser instalados com o comando
sudo apt-get install make golang nodejs default-jdk
Para executar os testes, entre no diretório sstat
e execute um dos comandos
make tests # para testar todos os programa
make test-js # para testar o programa em Javascript
make test-go # para testar o programa em Go
make test-java # para testar o programa em Java
Para enviar o trabalho, execute o comando
make enviar
O script de envio criará um arquivo compactado com os arquivos a serem entregues para correção e enviará para a página do professor.
Após enviar o trabalho, o aluno deverá entrar na página da disciplina, imprimir e assinar o termo de autoria. O termo de autoria é um documento em que o aluno afirma que ele é o autor do código do trabalho que ele enviou e que portanto, não copiou parte significativa do programa de outra pessoa ou da internet.
O trabalho será avaliado de acordo com os critérios: