User Tools

Site Tools


obi

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.

obi.txt · Last modified: 2024/06/19 14:47 by beco