Clube de Programação UPF
Passo Fundo, 02 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
PROGRAMA tomar_banho
INICIO
entre no box
abra o registro
passe xampu nos cabelos
lave
enxague os cabelos
passe o condicionador
deixe agindo
limpe o corpo com sabonete
tire o sabonete do corpo
tire o condicionador dos cabelos
feche o registro
seque-se com a toalha
FIM
Pro-gra-mar:
Ensinar as coisas mais legais do mundo para alguns pedaços de minérios.
Introdução
Competições de Programação
Olimpíada Brasileira de Informática
- Público-alvo: estudantes de escolas e 1º ano de graduação
- Competição individual
- Cerca de ~5 problemas por prova
- Duração de 5 horas
- Sem consulta, nem digital nem impressa
- Códigos são corrigidos somente após a prova
- Pontuação por "tarefas" que seu código resolve
Maratona de Programação
- Público-alvo: universitários (qualquer curso)
- 10~13 problemas
- 5 horas de prova
- Equipes de 3 pessoas
- 1 só computador, sem acesso à Internet
- "Cinco horas de máquina, mas 15 horas de humano"
- Pode levar material impresso para consulta
- Cadernos, livros, códigos impressos, baralho, etc
- Vence quem resolver mais problemas em menos tempo
"Ingredientes"
Por onde começamos?
Pelo começo! (NÃO ME DIGA?)
"Ingredientes"
- Linguagem de programação
- C(++)
- Java
- Python
- Ambiente de programação
- Editor de texto + terminal
- IDE
Linguagem de programação
- Linguagem:
- Conjunto de símbolos e de regras para combinar esses símbolos de forma que faça algum sentido
- Conjunto de símbolos e de regras para combinar esses símbolos de forma que faça algum sentido
-
Linguagem de programação
- Pode ser "traduzida" para linguagem de máquina
- Alto nível vs. baixo nível
- Compilada vs. interpretada
Ambiente de programação
- Editor de texto
- Programa onde escrevemos nossos códigos-fonte
- Geany, Sublime Text, Gedit, Vim, Emacs, Notepad++...
- Terminal (linha de comando)
- Compilação, execução, testes, etc.
- Compilação, execução, testes, etc.
- Usaremos o sistema operacional GNU/Linux
- Distribuição: Ubuntu 16.04
Nosso primeiro programa
- Problema: Olá CodCad
- codcad.com/problem/1
-
Veteranos: podem ir resolvendo os mais fáceis do URI
- Sem compilar nem testar: perfectividade de código ;-)
- Abra o terminal
- Abra o seu editor de texto favorito
- Eu sugiro o Geany ou Sublime Text :-)
- O resto da demonstração é por minha conta \o/
Nosso primeiro programa
- Solução
#include<iostream>
using namespace std;
int main(){
cout << "Ola CodCad!" << endl;
return 0; // IMPORTANTE
}
Como funciona um programa?
- Entrada
- Leitura dos dados a serem processados pelo programa
- Processamento
- Execução das instruções que nós demos ao programa
- Saída
- Exibição da resposta (na tela, num arquivo texto, etc)
Como funciona um programa?
- Variáveis
- "Espacinhos" ou "caixinhas" na memória, onde guardamos valores
- Tipos de variáveis
- Inteiro: int
- Real:
float, double - Caractere: char
- Sequência de caracteres: string
- Lógico: bool(eano)
Tipos de variáveis
- Inteiros
int a = 20; /* Normalmente usado, <= 10^9 */
long b = 1000000009; /* Enganação pura */
long long c = b*b; /* Cabe até 10^18 */
int a = 20;
unsigned int ua = 20; /* Não pode negativo */
long b = 1000000009;
long long c = b*b;
unsigned long long d = 2*c; /* Mas cabe o dobro */
- Com e sem sinal
- Reais
double pi = 3.14159265;
double big = 1e9*3e9;
Tipos de variáveis
- Caracteres
char a;
char mander = 'a';
char meleon = '@';
char izard = 'A';
- Strings
string nome = "Fulano";
string str = "Clube de Programacao UPF";
- Lógicos
bool basaur = true;
bool noCeuTemPao = false; // e morreu :(
Entrada e saída
- Entrada
string nome;
int idade;
double altura; // em metros
cin >> nome >> idade >> altura;
- Saída
cout << "Nome: " << nome << endl;
cout << idade << " ano(s)" << endl;
// tem que dar #include<iomanip>
cout << fixed << setprecision(2) << altura << " metro(s)" << endl;
Nada de "conversar" com o usuário!
int num;
cout << "Insira um numero: ";
cin >> num;
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, entrada e saída
# 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
Exercícios (mão na massa!)
- URI Online Judge → www.urionlinejudge.com.br
- URI 1001 - Extremamente Fácil
- URI 1002 - Área do Círculo
- URI 1005 - Média 1
- URI 1008 - Salário
- URI 1011 - Esfera
- Abra o terminal + seu editor de texto favorito
- Tirem as dúvidas conosco =)
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
www.codcad.com/course/1
www.urionlinejudge.com.br/
Obrigado!
Passo Fundo, 02 de março de 2017
/maratonaUPF
maratonaupf.github.io
constantin.leo@gmail.com
Introdução à Programação Competitiva (completo)
By Leonardo Deliyannis Constantin
Introdução à Programação Competitiva (completo)
- 1,061