Table of Contents
Olimpíada Brasileira de Informática - OBI
A Olimpíada Brasileira de Informática é um evento promovido pela SBC (Sociedade Brasileira de Informática) e com a participação de escolas e universidades de todo o Brasil. No nível universitário (PS - programação sênior) podem se inscrever alunos do primeiro ano de faculdade apenas.
A XXVI Edição realizada em 2024 foi a primeira participação da Escola Politécnica da Universidade de Pernambuco - POLI/UPE, com realização da Assessoria de Relações Internacionais - ARI/POLI e apoio da EComp (Eng. da Computação) e da ECA (Eng. de Controle e Automação).
Compilação e Testes Automáticos
Compilação
Crie os exercícios na pasta rascunhos/obi
, com os nomes indicados em cada exercício (por exemplo idade.c). Para compilar use:
make idade.x
Isso irá chamar o compilador GCC
com as mesmas chaves obrigatórias da olimpíada, quais sejam:
gcc -static -std=gnu17 -pipe -DEVAL -s -O2 -lm fonte.c -o fonte.x
A chave -std=gnu17
é assumida válida, mas não é obrigatória no regulamento da Olimpíada para a linguagem C
.
Para a linguagem C++
, utilize o nome do fonte como fonte.cpp (exemplo: idade.cpp) e compile com
make idade.out
O makefile
irá colocar as chaves obrigatórias do regulamento, que são:
g++ -static -std=gnu++17 -pipe -DEVAL -s -O2 -lm fonte.cpp -o fonte.out
A chave -std-gnu++17
é dada como obrigatória pelo regulamento.
Para ambas as linguagens, o makefile
fornecido pelo professor também acrescenta as seguintes chaves para facilitar seu debug e padronização de saída do compilador, quais sejam:
-Wall -Wextra -D$VERSION -D$BUILD -D$DEBUG -D$VARUSER -D_FORTIFY_SOURCE=$FORTIFY -Wl,-no-as-needed -Wl,--defsym,BUILD_$DEFSYM=0
Teste
Estando ainda na pasta rascunhos/obi
, e tendo criado e compilado o código fonte com sucesso, para testar utilize o comando abaixo, dando o nome do exercício (no exemplo idade):
checkobi.sh -f idade
Este script irá rodar o seu programa uma vez para cada bloco de teste do exemplo, e comparar a saída do programa com a saída desejada. Para cada erro, será impressa uma linha indicando a diferença do que foi impresso e do que deveria ser impresso.
Para testar com compilação em C++ use:
checkobi.sh -p -f idade
Caso seu programa rode sem erros, será mostrada a mensagem:
Saídas testadas com sucesso
Se não conseguir a solução de primeira, volte a editar seu código fonte e repita o processo.
Debug
Caso precise debugar o seu programa, é útil colocar a chave de debug -g -Og
(e desligar a otimização dada por -O2
). Para isso utilize o comando:
make idade.x DEBUG=1
(ou, obviamente, o mesmo para C++
com make idade.out DEBUG=1
).
Utilize o gdb
ou cgdb
para fazer o debug.
Não tenha economia em usar assert()
no seu código e garantir as propriedades matemáticas e lógicas dos pontos cruciais do fluxograma e valores de variáveis assumidos.
Exercícios
Os exercícios dos anos anteriores podem ser acessados diretamente na página da OBI em https://olimpiada.ic.unicamp.br/pratique/ . Abaixo enumeramos alguns mais interessantes usados para praticar suas técnicas de programação.
- Idade da Monica (trabalhos/obi/idade.c)
- Figurinhas da Copa (trabalhos/obi/figurinhas.c)
- Camisetas da Olimpíada (trabalhos/obi/camisetas.c)
- Zero para Cancelar (trabalhos/obi/zero.c)
- Jogo da Vida (trabalhos/obi/jogo.c)
- Placas de Carros (trabalhos/obi/placas.c)
- Ogro (trabalhos/obi/ogro.c)
- Concurso (trabalhos/obi/concurso.c)
- Arranha-céu (trabalhos/obi/arranhaceu.c)
- Teclado (trabalhos/obi/teclado.c)