MC102 - Algoritmos e Programação de Computadores

Turmas QRST - Primeiro Semestre de 2013

Voltar à pagina inicial da disciplina

Script para Auxílio nos Testes dos Laboratórios


Redirecionamento de entrada e saída

Quando escrevemos programas que fazem leitura ou escrita de dados (por exemplo, utilizando scanf e/ou printf), é comum utilizarmos o que chamamos de redirecionamento.

Dado que o seu programa, digamos lab.c, foi compilado e o nome do executável é lab e dado que existe um arquivo de texto chamado arq.in com os valores que seu programa deve ler (como é o caso dos arquivos de extensão .in que liberamos no SuSy), fazemos redirecionamento da entrada utilizando o símbolo “<”. O comando a seguir:

./lab < arq.in

faz com que seu programa lab leia os valores que estão armazenados em arq.in (ao invés de você ter que digitar cada um dos valores manualmente) e imprima o resultado na saída padrão.

O comando de redirecionamento de saída utiliza o símbolo “>”. O comando a seguir:

./lab < arq.in > arq.out

faz com que o seu programa leia os valores de arq.in e faz com que o resultado, que antes aparecia na saída padrão, seja armazenado em um arquivo chamado arq.out.


Comparação dos resultados

No SuSy, também são liberados arquivos com extensão .res referentes a cada um dos arquivos .in. Se você utilizou o comando de redirecionamento de saída e tem um arquivo arq.out gerado pelo seu programa, e se você salvou o arquivo arq.res (a saída esperada de arq.in), então o comando

diff arq.res arq.out

verifica qual é a diferença entre os arquivos arq.res e arq.out. Se nenhuma mensagem for exibida, então os dois arquivos são idênticos. Caso contrário, seu programa não está gerando a saída esperada por algum motivo.

Note que, por exemplo, um único espaço em branco a mais ou a menos no seu arquivo arq.out faz com que seu programa seja considerado errado.

Fazendo a comparação com todos os arquivos de teste do SuSy

Para testar seu programa com os dez arquivos de testes que liberamos no SuSy, você pode baixar os 20 arquivos (10 arquivos .in e 10 arquivos .res) e fazer os passos anteriores um a um.

Porém, fizemos um pequeno script que faz os downloads necessários, realiza os 10 testes e faz as comparações de uma única vez para você.

Esse script é um arquivo de texto simples que contém uma sequência de comandos que só podem ser entendidos por sistemas Linux. Você poderá ver o conteúdo desse arquivo, mas é altamente recomendado que você não tente editá-lo.

Primeiro passo: Baixe o script testador.sh

Segundo passo: Faça com que o computador entenda que o script é um arquivo executável. Para isso, digite o comando

chmod a+x testador.sh

Terceiro passo: Digite o comando

./testador.sh

e perceba que ele irá imprimir em sua tela

Uso: ./testador.sh

Isso indica que você precisa passar três parâmetros para o script, nesta ordem: sua turma (qr caso você seja da turma Q ou da turma R ou st caso você seja da turma S ou da turma T – mantenha as letras minúsculas), o código do laboratório (apenas o número e a letra, por exemplo 01a, 01b ou 02a) e o nome do seu arquivo executável, que deve estar obrigatoriamente no mesmo diretório do script (não é o arquivo .c).

Exemplo de execução: Supondo que você é da turma R, está resolvendo o laboratório de código 02a e seu executável se chama lab02a, a forma correta de executar o script é por meio do comando

./testador.sh qr 02a lab02a

Você pode utilizar esse comando quantas vezes achar necessário.

Importante: O script cria um diretório denominado testes-labXXX (onde XXX é o código do laboratório) no mesmo local onde você fez sua execução. Este diretório contém os mesmos arquivos .in e .res que podem ser encontrados no SuSy. Não há problema algum em excluir esse diretório, mas toda vez que você executar o script, o diretório será criado novamente. Se ele já existir, os arquivos não serão baixados novamente, e a execução do script irá apenas testar seu programa, comparando as saídas.