You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Segunda fase da MFP: 14 e 15 de Junho.
6 semanas – 11 aulas.
Cada aula terá 1 hora de duração (teoria + prática).
Quinta-feira – 19:00, e sábados – 14:00.
Canal da SBC no Youtube, as gravações ficarão disponíveis.
Introdução
Introdução à Programação Esportiva: A programação competitiva é uma atividade em que os participantes resolvem problemas algorítmicos em um tempo limitado. É uma forma de aprimorar habilidades de resolução de problemas, pensamento lógico e eficiência de algoritmos.
Por que C++ é Importante: C++ é uma linguagem de programação amplamente utilizada na programação competitiva devido à sua eficiência e flexibilidade. Ela permite que os programadores escrevam códigos mais rápidos e eficientes em termos de tempo e memória, o que é crucial em competições onde a velocidade e a precisão são essenciais.
Eficiência de Tempo: C++ é uma linguagem compilada, o que significa que o código é traduzido para linguagem de máquina antes da execução. Isso resulta em um tempo de execução mais rápido em comparação com linguagens interpretadas, como Python ou Java, que são mais lentas em competições onde o tempo de execução é crítico.
Eficiência de Memória: C++ oferece mais controle sobre a alocação de memória, permitindo que os programadores otimizem o uso de memória. Isso é importante em competições onde a limitação de memória pode ser um problema.
Uso Generalizado: C++ é amplamente utilizado em competições de programação, e a maioria dos materiais e recursos disponíveis online são voltados para esta linguagem. Portanto, é uma escolha natural para quem deseja se destacar nesse campo.
Pode ter tamanhos diferentes (short, int, long) dependendo da implementação e requisitos de alcance.
float
Números de ponto flutuante de precisão simples (decimais)
Tem menos precisão (tipicamente 6-7 dígitos decimais) em comparação com double.
double
Números de ponto flutuante de dupla precisão (decimais)
Oferece maior precisão (tipicamente 15-17 dígitos decimais) em comparação com float.
char
Único caractere (letra, número, símbolo)
Representado usando codificação de caractere ASCII ou Unicode.
bool
Valor booleano (verdadeiro ou falso)
Usado para operações lógicas e instruções condicionais.
string
Sequência de caracteres (palavra, frase, texto)
Requer a inclusão do arquivo de cabeçalho <string>.
#include<iostream>
#include<string>usingnamespacestd;intmain() {
// Inteiroshort numeroShort;
long numeroLong;
int numeroInteiro;
// Ponto Flutuantefloat numeroFlutuante;
double numeroDouble;
// Caracterechar caractere;
// Seq. de Caracteres
string string;
return0;
}
Operações Lógicas
Operador
Significado
>
Maior que
<
Menor que
>=
Maior ou igual a
<=
Menor ou igual a
==
Igual
!=
Diferente
#include<iostream>usingnamespacestd;intmain() {
int a = 5;
int b = 3;
cout << "a > b: " << (a > b) << endl; // true (1)
cout << "a < b: " << (a < b) << endl; // false (0)
cout << "a == b: " << (a == b) << endl; // false (0)
cout << "a != b: " << (a != b) << endl; // true (1)
cout << "a >= b: " << (a >= b) << endl; // true (1)
cout << "a <= b: " << (a <= b) << endl; // false (0)
}
Operador
Significado
&&
E (AND)
||
OU (OR)
!
Negação (NOT)
#include<iostream>usingnamespacestd;intmain() {
int a = 5;
int b = 3;
int c = 8;
cout << "(a > b) && (a + b > c): " << (((a > b) && (a + b > c)) << endl; // true (1)
cout << "(a < b) || (a == b): " << ((a < b) || (a == b)) << endl; // false (0)
cout << "a != b: " << (a != b) << endl; // / true (1)
}
Operações condicionais
Operador
Significado
if
se
if/else
se/senão
switch
escolha
#include<iostream>usingnamespacestd;intnumerosInteirosIfElse() {
int numero;
cout << "Digite um número inteiro: ";
cin >> numero;
if (numero > 0) {
cout << "O número é positivo." << endl;
} else {
cout << "O número é negativo ou zero." << endl;
}
return0;
}
intnumerosInteirosIfElseIf() {
int numero;
cout << "Digite um número inteiro: ";
cin >> numero;
if (numero > 0) {
cout << "O número é positivo." << endl;
} elseif (numero < 0) {
cout << "O número é negativo." << endl;
} else {
cout << "O número é zero." << endl;
}
return0;
}
intdiasDaSemanaSwitchCase(){
int dia;
cout << "Digite o número do dia da semana (1-7): ";
cin >> dia;
switch (dia) {
case1:
cout << "Domingo" << endl;
break;
case2:
cout << "Segunda" << endl;
break;
case3:
cout << "Terça" << endl;
break;
case4:
cout << "Quarta" << endl;
break;
case5:
cout << "Quinta" << endl;
break;
case6:
cout << "Sexta" << endl;
break;
case7:
cout << "Sábado" << endl;
break;
default:
cout << "Inválido" << endl;
}
return0;
}
Overflow: Ocorre quando o resultado de uma operação excede o intervalo de valores que o tipo de dado pode armazenar. Por exemplo, ao tentar armazenar um número muito grande em um int, pode ocorrer overflow.
TLE (Time Limit Exceeded): Indica que o programa excedeu o tempo limite de execução permitido. Isso pode acontecer se o algoritmo não for eficiente o suficiente para lidar com o tamanho da entrada.
RTE (Runtime Error): Ocorre quando o programa falha durante a execução devido a um erro, como divisão por zero, acesso a memória não alocada ou estouro de pilha.
MLE (Memory Limit Exceeded): Indica que o programa excedeu o limite de memória permitido. Isso pode ocorrer se o programa usar uma quantidade muito grande de memória, por exemplo, ao declarar arrays grandes ou usar recursão sem critério de parada adequado.
Complexidade de Algoritmos
A complexidade de um algoritmo refere-se à quantidade de recursos computacionais, como tempo e espaço, que ele consome em função do tamanho da entrada.
A notação Big O (O) é usada para descrever a complexidade de um algoritmo.
Exemplos comuns de complexidade:
Complexidade
Descrição
O(1)
Tempo ou espaço constante.
O(log n)
Tempo ou espaço logarítmico.
O(n)
Tempo ou espaço linear.
O(n log n)
Tempo ou espaço linearítmico.
O(n^2)
Tempo ou espaço quadrático.
O(n^2n)
Tempo ou espaço Exponencial.
Previsão do Tempo de Execução: A complexidade do algoritmo ajuda a prever o tempo de execução em diferentes tamanhos de entrada.
Por exemplo, se um algoritmo tem complexidade O(n), podemos esperar que ele execute aproximadamente 10 vezes mais rápido para uma entrada 10 vezes menor.