Essa disciplina tem suas aulas num laboratório do CEC. O ambiente é semelhante aos concursos de programação ACM International Collegiate Programming Contest (http://icpc.baylor.edu/icpc/) e Maratona de Programação (http://maratona.ime.usp.br/).
O objetivo é criar condições para que o aluno de computação desenvolva suas habilidades de resolução de problemas computacionais. Os problemas de programação dessas competições são uma excelente oportunidade para aprender técnicas de criação e análise de algoritmos.
A cada aula o aluno recebe uma coleção de problemas (dois ou três) para os quais ele deve implementar um algoritmo, preferivelmente durante o período da aula. Caso não consiga terminar, ele deve fazê-lo até a aula seguinte. Assim sendo, é exigida uma boa quantidade de programação nesta disciplina. Parte de algumas das aulas são expositivas, abordando alguma técnica de programação que seja relevante para a resolução dos problemas selecionados.
Acreditamos que ela pode ser cursada mesmo por alunos de segundo ano, se bem ajuda bastante se o aluno já cursou as disciplinas de MAC338 - Análise de Algoritmos e MAC328 - Algoritmos em Grafos.
A maioria dos problemas vem do livro "Programming Challenges". Legenda para "P/s/l": P = popularity (A, B, C), s = success rate (low, average, high), l = level (1, 2, 3, 4).
PE | Presentation Error | The output is correct but it produces some extra space or blank line |
WA | Wrong Answer | The output of the program does not match the correct output |
TL | Time Limit Exceeded | The program does not terminate within the specified time limit |
CE | Compile Error | The program does not compile with the specified language s compiler |
RE | Runtime Error | The program has crashed |
ML | Memory Limit Exceeded | The program requires more memory to run than what the judge allows |
OL | Output Limit Exceeded | The program produces more than 4 MB output within the time limit |
RF | Restricted Function | The program uses some system function call or tries to access files |
Others | Uncommon verdicts | Some rare verdicts produced by the judge |
Para facilitar o teste de programas em C, eu uso um arquivo Makefile semelhante ao seguinte (o arquivo fica no meu diretório de trabalho):
PROG = xxx ENTRA = yyy SAI = zzz CFLAGS = -Wall -ansi -pedantic -g -O2 -I. LDLIBS = -lm # para o caso de usar sqrt, sin, cos, etc. default : @echo "" gcc $(CFLAGS) $(PROG).c $(LDLIBS) -o $(PROG) @echo "" @echo "-----------------------------------" @echo "Teste:" -$(PROG) <$(ENTRA) >$(SAI) cat $(SAI)
(As linhas precedidas por "#" são comentários.) Para compilar e testar um programa xxx.c com arquivo de dados yyy, basta digitar "make". A saída é gravada no arquivo zzz e em seguida exibida no monitor.
A função qsort, presente nos sistemas UNIX e GNU/Linux, é muito útil. Veja em ~pf/algoritmos/apend/util.html#qsort como usá-la.