Clube de Programação UPF
Passo Fundo, 07 de março de 2017
Oficina 01: Introdução à Programação Competitiva
Introdução
Algoritmos e Programação?
Al-go-rit-mo:
Sequência finita de instruções bem definidas e não ambíguas
Al-go-rit-mo:
Sequência finita de instruções bem definidas e não ambíguas
Pro-gra-mar:
Ensinar as coisas mais legais do mundo a alguns pedaços de minérios.
Competições
Principais características
Maratona
- Equipes de 3 pessoas
- Cerca de 10~13 problemas
- Resultados em "tempo real"
- Material de apoio
- Tempo é levado em conta
- Público-alvo: universitários
- Balões :-)
OBI
- Individual
- Cerca de ~5 problemas
- Resultados só depois
- Sem consulta
- Tempo não importa
- Estudantes do EF e EM + 1º ano de graduação
Maratona e OBI têm em comum
- 5 horas de duração
- 1 só computador
- Equipes da Maratona precisam administrar o tempo
- 2 ou 3 problemas fáceis por prova
- Conteúdos específicos de Computação
- Grafos, Programação Dinâmica, Geometria, Strings, etc
Preparação faz a diferença
Ambiente de programação
- Sistema: GNU/Linux
- Ubuntu 16.04
- Linguagens disponíveis:
- C(++)
- Java
- Python
- Pascal
- JavaScript (só na OBI)
- Editores de texto
- Geany
- Sublime Text
- Gedit
- Emacs
- Vim
- IDEs
- Eclipse
Guias de Consulta Rápida
-
github.com/maratonaupf/materiais
- Pasta: ImprimirELevar
- Arquivo: ConsultaCpp11-ProfBrusso.pdf
- Arquivo: ConsultaJava-ProfPavan-ProfJaqson.pdf
- Pasta: ImprimirELevar
- Sugestão: faça o que o nome da pasta diz e imprima o guia de consulta da sua linguagem, será muito útil
- Se quiserem, posso dar um tempinho pra fazer isso :-)
Anatomia de um código C++
#include<iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << "X = " << a+b << endl;
return 0;
}
Anatomia de um código Java
import java.util.Scanner;
class Main{
public static void main(String args[]){
int a, b;
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
b = sc.nextInt();
System.out.println("X = " + (a+b));
}
}
Compilação
# Compilação simples: gera um executável com nome "a.out"
g++ codigo.cpp
# Nomeando nosso executável
g++ codigo.cpp -o nome_programa
# Warnings: avisam sobre possíveis erros no seu código
g++ codigo.cpp -Wall
# Carregar a biblioteca <cmath> (<math.h>)
g++ codigo.cpp -lm
# Otimização
g++ codigo.cpp -O2
Execução e testes
# Execução simples: lê do teclado e escreve na tela
./programa
# Redirecionando a entrada: lê de um arquivo texto
./programa < entrada.txt
# Redirecionando a saída: escreve num arquivo texto
./programa < entrada.txt > saida.txt
# Medindo em quanto tempo nosso programa roda
time ./programa < entrada.txt > saida.txt
# Comparando a resposta esperada com a resposta do programa
diff gabarito.txt saida.txt
Compilação e execução Java
# Compilação Java
javac Programa.java
# Execução Java
java Programa
# Redirecionando a entrada e a saída
java Programa < entrada.txt > saida.txt
# Medindo em quanto tempo nosso programa roda
time java Programa < entrada.txt > saida.txt
# Comparando a resposta esperada com a resposta do programa
diff gabarito.txt saida.txt
Mão na massa!
- Abra o terminal + seu editor de texto favorito
-
Entre em uma dessas plataformas
- CodCad → www.codcad.com
- URI Online Judge → www.urionlinejudge.com.br
-
Veteranos: podem ir resolvendo os mais fáceis
- Sem compilar nem testar: perfectividade de código ;-)
- O resto da demonstração é por minha conta \o/
- Dúvidas? Só chegar =)
Não se assuste
Ir da ideia pro código não é nada natural.
Não se assuste
Ir da ideia pro código não é nada natural.
É por isso que a gente treina.
Não se assuste
Ir da ideia pro código não é nada natural.
É por isso que a gente treina.
É a grande coisa que a Maratona oferece
:-)
Lição de casa
Exercícios e roteiros de estudo
Lição de casa
Leia a documentação da sua linguagem!
Obrigado!
Passo Fundo, 07 de março de 2017
/maratonaUPF
maratonaupf.github.io
constantin.leo@gmail.com
Introdução à Programação Competitiva
By Leonardo Deliyannis Constantin
Introdução à Programação Competitiva
- 1,000