Mudanças entre as edições de "Ensino Extracurricular de Programação de Computadores"

 
(23 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 12: Linha 12:
  
 
<font size="2">
 
<font size="2">
 
+
Competição entre os alunos do 1º do curso, realizada em 2017
 
</font>
 
</font>
  
Linha 52: Linha 52:
 
Texto na íntegra presente no [http://olimpiada.ic.unicamp.br/info/geral site oficial].
 
Texto na íntegra presente no [http://olimpiada.ic.unicamp.br/info/geral site oficial].
  
 +
<br>
 +
== Gincana de Programação ==
 +
A Gincana de Programação é uma atividade lúdica, que envolve resolução de problemas e programação de computadores. Destinada a alunos que sabem programar, é prova é constituída por problemas de vários níveis de dificuldade e que envolvem diferentes conteúdos, sendo que as soluções são avaliadas por meio de um sistema de avaliação automático, que compara os resultados da solução com os resultados esperados.
 +
Disputam a prova times de três participantes, que durante as 4 horas de atividade devem resolver o maior número de problemas possível. Cada time utiliza apenas um computador e pode consultar material impresso.
 +
Mesmo que você não tenha um time, sugerimos que venha participar. Você pode fazer parte de um time com outros que não acharam parceiros ou até mesmo tentar resolver a prova sozinho...
 +
 +
<br>
 
== Conteúdos Abordados no projeto ==
 
== Conteúdos Abordados no projeto ==
  
Linha 88: Linha 95:
  
  
== Avaliação de soluções: o padrão de julgamento das maratonas ==
+
== Avaliação de Soluções: O Padrão de Julgamento das Maratonas ==
Ambientes de avaliação automáticos executam o código submetido a partir de um conjunto de dados de entrada e comparam os dados de saída com os dados de saída de uma solução correta. Portanto, antes de submeter sua solução a um desses ambientes, é recomendável testa-la em seu próprio ambiente. Para saber mais, veja os tópicos abaixo:
+
[[Arquivo: Maratonadeprogramacao2017.jpg|400px|thumb|right|
 +
<font size="2">
 +
Regional de 2017 na UNICENTRO
 +
</font>
 +
]]
 +
Ambientes de avaliação automáticos executam o código submetido a partir de um conjunto de dados de entrada e comparam os dados de saída com os dados de saída de uma solução correta. Portanto, antes de submeter sua solução a um desses ambientes, é recomendável testa-la em seu próprio ambiente. Para saber mais, confira os tópicos abaixo:
 
* [[Redirecionamento de entrada e saída]]
 
* [[Redirecionamento de entrada e saída]]
 
* [[Como comparar arquivos de texto]]
 
* [[Como comparar arquivos de texto]]
 
* [[Leitura e escrita de dados]]
 
* [[Leitura e escrita de dados]]
 +
<br><br><br><br><br><br><br><br><br>
  
 
+
== Problemas de Programação: Técnicas e Treinamento ==
== Problemas de programação: técnicas e treinamento ==
 
  
 
A maioria dos problemas de programação possuem padrões de entrada/saída sugeridos em casos de teste que, por vezes, conseguimos identificar tanto o tipo de dado quanto se o problema faz uso uma estrutura, como repetição, vetor, matriz, etc... Dessa forma é possível classificá-los quanto ao conhecimento necessário para a realização e qual estrutura (caso haja) predomina no problema. Sendo assim, estas são possíveis categorias empregadas à maioria dos desafios:
 
A maioria dos problemas de programação possuem padrões de entrada/saída sugeridos em casos de teste que, por vezes, conseguimos identificar tanto o tipo de dado quanto se o problema faz uso uma estrutura, como repetição, vetor, matriz, etc... Dessa forma é possível classificá-los quanto ao conhecimento necessário para a realização e qual estrutura (caso haja) predomina no problema. Sendo assim, estas são possíveis categorias empregadas à maioria dos desafios:
Linha 101: Linha 113:
 
<b> Iniciante: </b>
 
<b> Iniciante: </b>
 
São problemas mais fáceis de resolução, é o começo para quem está se habituando aos padrões de competições de maratonas de programação, como a contextualização do problema e funcionamento de entrada/saída de dados. Para resolver problemas nessa categoria, normalmente  é necessário apenas o conhecimento dos tipos de dados, estruturas de seleção/repetição e operações matemáticas básicas que são vistas durante o colegial.
 
São problemas mais fáceis de resolução, é o começo para quem está se habituando aos padrões de competições de maratonas de programação, como a contextualização do problema e funcionamento de entrada/saída de dados. Para resolver problemas nessa categoria, normalmente  é necessário apenas o conhecimento dos tipos de dados, estruturas de seleção/repetição e operações matemáticas básicas que são vistas durante o colegial.
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1001 Extremamente Básico] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1002 Área do Círculo] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1003 Soma Simples] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN2.jpg|150px||left|]]
 
[[Arquivo: UriN2.jpg|150px||left|]]
 
<b> Ad-Hoc </b>
 
<b> Ad-Hoc </b>
 
São problemas muito específicos, que não dependem de estruturas de dados, algoritmos ou técnicas genéricas. Cada problema ad-hoc possui sua própria característica de resolução, sendo assim, tem uma alta variação de dificuldade. Podendo serem resolvidos com simples estruturas de seleção e lógica ou até mesmo, usar cálculos avançados tornando difícil a resolução.  
 
São problemas muito específicos, que não dependem de estruturas de dados, algoritmos ou técnicas genéricas. Cada problema ad-hoc possui sua própria característica de resolução, sendo assim, tem uma alta variação de dificuldade. Podendo serem resolvidos com simples estruturas de seleção e lógica ou até mesmo, usar cálculos avançados tornando difícil a resolução.  
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1026 Carrega ou não Carrega?] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1030 A Lenda de Flavious Josephus] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1087 Dama] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN3.jpg|150px||left|]]
 
[[Arquivo: UriN3.jpg|150px||left|]]
 
<b> Strings </b>
 
<b> Strings </b>
 
São problemas que trabalham, em essência, com a manipulação de caracteres e palavras, sendo necessário desenvolver algoritmos para os mais diversificados propósitos, a diferença de resolução desses problemas pode variar significativamente dependendo da linguagem de programação utilizada, por conta das funções existentes dentro de cada linguagem.
 
São problemas que trabalham, em essência, com a manipulação de caracteres e palavras, sendo necessário desenvolver algoritmos para os mais diversificados propósitos, a diferença de resolução desses problemas pode variar significativamente dependendo da linguagem de programação utilizada, por conta das funções existentes dentro de cada linguagem.
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1024 Criptografia] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1168 LED] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1238 Combinador] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN4.jpg|150px||left|]]
 
[[Arquivo: UriN4.jpg|150px||left|]]
 
<b> Estruturas e Bibliotecas </b>
 
<b> Estruturas e Bibliotecas </b>
 
São problemas que fazem utilização de estruturas bem definidas na literatura (p.e. Lista, Pilha, Fila, Árvore, Mapas, etc) e que podem ser facilmente encontradas em livros ou internet. A estratégia aqui é conhecer e saber aplicar diferentes estruturas que realizam as mesmas tarefas, todavia, que tem diferenças de desempenho e gasto computacional, pois todos os problemas possuem um tempo determinado de execução, caso o tempo de execução seja excedido, a submissão não é válida.
 
São problemas que fazem utilização de estruturas bem definidas na literatura (p.e. Lista, Pilha, Fila, Árvore, Mapas, etc) e que podem ser facilmente encontradas em livros ou internet. A estratégia aqui é conhecer e saber aplicar diferentes estruturas que realizam as mesmas tarefas, todavia, que tem diferenças de desempenho e gasto computacional, pois todos os problemas possuem um tempo determinado de execução, caso o tempo de execução seja excedido, a submissão não é válida.
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1069 Diamantes e Areia] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1068 Balanço de Parênteses I] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN5.jpg|150px||left|]]
 
[[Arquivo: UriN5.jpg|150px||left|]]
 
<b> Matemática </b>
 
<b> Matemática </b>
 
São problemas que normalmente apresentam enunciado bem contextualizado para facilitar (ou dificultar, em alguns casos) a realização. Como proposto, utilizam conceitos matemáticos, fórmulas e lógica matemática no algoritmo. Se assemelham ao ad-hoc por possuir grande variação na dificuldade, tal como, desde as quatro operações básicas até a utilização de integrais.
 
São problemas que normalmente apresentam enunciado bem contextualizado para facilitar (ou dificultar, em alguns casos) a realização. Como proposto, utilizam conceitos matemáticos, fórmulas e lógica matemática no algoritmo. Se assemelham ao ad-hoc por possuir grande variação na dificuldade, tal como, desde as quatro operações básicas até a utilização de integrais.
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1161 Soma de Fatoriais] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1028 Figurinhas] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1170 Blobs] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN6.jpg|150px||left|]]
 
[[Arquivo: UriN6.jpg|150px||left|]]
 
<b> Paradigmas </b>
 
<b> Paradigmas </b>
 
São problemas mais complexos e difícil detecção de qual estrutura ou caminho seguir, se não for explicitado no enunciado. Usando algoritmos de busca comuns, ou busca de soluções ótimas. Por exemplo programação dinâmica, algoritmos gulosos, backtracking ou busca binária.
 
São problemas mais complexos e difícil detecção de qual estrutura ou caminho seguir, se não for explicitado no enunciado. Usando algoritmos de busca comuns, ou busca de soluções ótimas. Por exemplo programação dinâmica, algoritmos gulosos, backtracking ou busca binária.
<br><br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1029 Fibonacci, Quantas Chamadas?] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1034 Festival de Estátuas de Gelo] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1310 Lucro] </li>
 +
</ul>
 +
<br><br>
  
 
[[Arquivo: UriN7.jpg|150px||left|]]
 
[[Arquivo: UriN7.jpg|150px||left|]]
 
<b> Grafos </b>
 
<b> Grafos </b>
 
São problemas que utilizam estruturas para representar um modelo em que existem relações entre os objetos de uma certa coleção ou conjunto. Há diversos algoritmos presentes na literatura para se lidar com problemas desse tipo. Como Matriz de adjacência, Algoritmo de Kruskal, Algoritmo de Prim, Algoritmo de Floyd-Warshall, etc... Normalmente, problemas nessa categoria possuem maior dificuldade de realização.
 
São problemas que utilizam estruturas para representar um modelo em que existem relações entre os objetos de uma certa coleção ou conjunto. Há diversos algoritmos presentes na literatura para se lidar com problemas desse tipo. Como Matriz de adjacência, Algoritmo de Kruskal, Algoritmo de Prim, Algoritmo de Floyd-Warshall, etc... Normalmente, problemas nessa categoria possuem maior dificuldade de realização.
<br><br><br><br><br><br>
+
<br>
 +
<b> Exemplos: </b>
 +
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1195 Árvore Binária de Busca] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1152 Estradas Escuras] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1148 Países em Guerra] </li>
 +
</ul>
 +
<br>
  
 
[[Arquivo: UriN8.jpg|150px||left|]]
 
[[Arquivo: UriN8.jpg|150px||left|]]
 
<b> Geometria Computacional </b>
 
<b> Geometria Computacional </b>
São problemas que envolvem Geometria Computacional na sua resolução, isto é, algoritmos e estruturas de dados para a resolução computacional de problemas geométricos. São, em essência, complexos e difícil realização.
+
São problemas que envolvem Geometria Computacional na sua resolução, isto é, algoritmos e estruturas de dados para a resolução computacional de problemas geométricos. São, em essência, complexos e de difícil realização.
<br><br><br><br><br><br>
+
<br>
 
+
<b> Exemplos: </b>
* [[Classificação de problemas]]
+
<ul>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1039 Flores de Fogo] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1124 Elevador] </li>
 +
  <li> [https://www.urionlinejudge.com.br/judge/pt/problems/view/1292 Problema com um Pentágono] </li>
 +
</ul>
 +
<br><br>
  
 +
Dê uma olhada na classificação de alguns problemas [[Classificação de problemas|aqui]].
  
 
== Publicações do projeto ==
 
== Publicações do projeto ==
* [http://www2.unicentro.br/e2pc/files/2015/07/II-SIEPE-resumo-2011.pdf Anais da II SIEPE – Semana de integração ensino, pesquisa e extensão 27 a 29 de setembro de 2011.]
+
* [http://www2.unicentro.br/e2pc/files/2015/07/II-SIEPE-resumo-2011.pdf Pavelski L. M.; Urio P. R.; Batista A. D.;  Piekarski A. E. T.; Kikuti D. '''Ensino Extracurricular de Programação de Computadores Em Anais da II SIEPE – Semana de integração ensino, pesquisa e extensão''', 2011.]
* [http://www2.unicentro.br/e2pc/files/2015/07/Resumo-Anais-ISSN-2236-7098-v2-n3-2013.pdf Anais da III SIEPE – Semana de integração ensino, pesquisa e extensão 24 a 26 de setembro de 2013.]
+
* [http://www2.unicentro.br/e2pc/files/2015/07/Resumo-Anais-ISSN-2236-7098-v2-n3-2013.pdf Gonçalves P. D.; Lima R. R.; Piekarski A. E. T.; Kikuti D.; Mulati M. H.; Miazaki M. '''A Metodologia de Maratonas de Programação no Projeto Ensino Extracurricular de Programação de Computadores Em Anais da III SIEPE – Semana de Integração Ensino, Pesquisa e Extensão''', 2013.]
* [http://www2.unicentro.br/e2pc/files/2015/11/SIEPE-LucasPadilha.pdf Anais da IV SIEPE – Semana de integração ensino, pesquisa e extensão 26 a 30 de setembro de 2015.]
+
* [http://www2.unicentro.br/e2pc/files/2015/11/SIEPE-LucasPadilha.pdf Padilha L.; Miazaki M.; Hild T. A.; Piekarski A. E. T. '''Organização e Disponibilização dos Conteúdos do Projeto Ensino Extracurricular de Programação de Computadores Em Anais da IV SIEPE – Semana de Integração Ensino, Pesquisa e Extensão''', 2015.]
* [http://br-ie.org/pub/index.php/wcbie/article/view/6276 Anais dos Workshops do IV Congresso Brasileiro de Informática na Educação (CBIE 2015).]
+
* [http://br-ie.org/pub/index.php/wcbie/article/view/6276 Piekarski A. E. T.; Miazaki M.; Hild T. A.; Mulati M. H.; Kikuti D. '''A metodologia das maratonas de programação em um projeto de extensão: um relato de experiência Em Anais dos Workshops do IV Congresso Brasileiro de Informática na Educação''', 2015.]
* [http://www2.unicentro.br/e2pc/files/2015/07/Educação-ENSINO-EXTRACURRICULAR-DE-PROGRAMAÇÃO-DE-COMPUTADORES.pdf 31ª SEURS - Seminário de extensão universitária da região sul, 2013.]
+
* [http://www2.unicentro.br/e2pc/files/2015/07/Educação-ENSINO-EXTRACURRICULAR-DE-PROGRAMAÇÃO-DE-COMPUTADORES.pdf Piekarski A. E. T.; Mulati M. H.; Kikuti D.; Miazaki M. '''Ensino Extracurricular de Programação de Computadores Em Seminário de extensão universitária da região sul''', 2013.]
 +
* [https://drive.google.com/open?id=1E0yl0kdw8ktmBJw_vKCMXICKhQNXuHKO Padilha L.; Didur L. F.; Hild T. A.; Miazaki M.; Piekarski A. E. T. '''Plataforma de Apoio ao Treinamento Para a Olimpíada Brasileira de Informática Em Anais do 9º Salão de Extensão e Cultural''', 2016.]
 +
* [https://drive.google.com/open?id=11lYobfaGOmdf3dq0cORDy3PKfbqdcPVW Piekarski A. E. T.; Miazaki M.; Hild T. A.; Bini E. M. '''SMART-ME: Disseminação e Uso de Tics(Tecnologias da Informação e Comunicação) Em Anais do 9º Salão de Extensão e Cultura''', 2016.]
 +
* [https://drive.google.com/open?id=1Dp4OZ2V6pzyXXHDJiHZN9aH6HcnaM5mo Didur L. F.; Hild T. A.; Piekarski A. E. T. '''Treinamentos em Estrutura de Dados no Projeto E2PC Em Anais da V SIEPE – Semana de Integração Ensino, Pesquisa e Extensão''', 2017.]
 +
* [https://drive.google.com/open?id=1bBu-B57YMTU04baXSMrz8YfI1C-6ozgf Piekarski A. E. T.; Hild T. A.; Miazaki M.; Bini E. M.; Gardin H.; Urtado J. V. M.; Prestes M. A. '''Programação de Computadores no Ensino Médio: O Estímulo da Olimpíada Brasileira de Informática''', 2017.]
 +
* [https://drive.google.com/open?id=1YS5un27Ocgp6VzLqO1YWkqrPVTAS9xbN Piekarski A. E. T.; Hild T. A.; Miazaki M.; Gardin H.; Urtado J. V. M.; Prestes M. A.; '''Extensão Para os Cursos Técnicos de Informática em Guarapuava/PR: O Caso das Oficinas de Greenfoot''', 2017.]
 
<br>
 
<br>
  
Linha 159: Linha 230:
  
 
'''Monitores:'''
 
'''Monitores:'''
 +
* Gabriel Krysa (2018 - )
 
* Moises Alonso Prestes (2017 - )
 
* Moises Alonso Prestes (2017 - )
 
* Higor Gardin (2016 - )
 
* Higor Gardin (2016 - )

Edição atual tal como às 10h45min de 20 de agosto de 2019

O Projeto

Competição entre os alunos do 1º do curso, realizada em 2017

Vinculado ao Departamento de Ciência da Computação da Universidade Estadual do Centro-Oeste, o projeto "Ensino Extracurricular de Programação de Computadores" oferece oportunidades extracurriculares de treinamento em Programação de Computadores aos alunos do Bacharelado em Ciência da Computação e demais acadêmicos interessados, segundo a metodologia das Maratonas de Programação onde são realizados encontros quinzenais para que os alunos possam se reunir e resolver desafios propostos para praticar algum conteúdo abordado naquele encontro ou um conjunto de desafios para aprimorar as habilidades de programação. Leia mais

Contando com o auxílio da plataforma online MOODLE, para que sejam disponibilizados os conteúdos e problemas relacionados, assim como videoaulas e interação em fóruns de discussões/dúvidas. Utilizando também ambientes de submissão e auto-julgamento online para dinamizar a correção das atividades.

Outro enfoque do projeto é proporcionar treinamento para alunos do ensino técnico que possuem maior interesse em programação, sobretudo, que participam da Olimpíada Brasileira de Informática (OBI).

Web site do projeto


Sobre a Olimpíada Brasileira de Informática

O objetivo da OBI é despertar nos alunos o interesse por uma ciência importante na formação básica hoje em dia (no caso, ciência da computação), através de uma atividade que envolve desafio, engenhosidade e uma saudável dose de competição. A organização da OBI está cargo do Instituto de Computação da UNICAMP.

A OBI está organizada em três modalidades:

Modalidade Iniciação:

  • Nível 1, para alunos até sétimo ano do Ensino Fundamental e
  • Nível 2, para alunos até nono ano do Ensino Fundamental.

Modalidade Programação:

  • Nível Júnior, para alunos do ensino fundamental,
  • Nível 1, para alunos até o primeiro ano do ensino médio e
  • Nível 2, para alunos até o terceiro ano do ensino médio.

Modalidade Universitária:

  • Para alunos que estejam cursando, pela primeira vez, o primeiro ano de um curso de graduação.

Em todas as modalidades os alunos competem individualmente. Cada aluno poderá estar inscrito em apenas uma modalidade.

Texto na íntegra presente no site oficial.


Gincana de Programação

A Gincana de Programação é uma atividade lúdica, que envolve resolução de problemas e programação de computadores. Destinada a alunos que sabem programar, é prova é constituída por problemas de vários níveis de dificuldade e que envolvem diferentes conteúdos, sendo que as soluções são avaliadas por meio de um sistema de avaliação automático, que compara os resultados da solução com os resultados esperados. Disputam a prova times de três participantes, que durante as 4 horas de atividade devem resolver o maior número de problemas possível. Cada time utiliza apenas um computador e pode consultar material impresso. Mesmo que você não tenha um time, sugerimos que venha participar. Você pode fazer parte de um time com outros que não acharam parceiros ou até mesmo tentar resolver a prova sozinho...


Conteúdos Abordados no projeto

Entrada/Saída de Dados

Comandos de entrada e saída de dados são os que permitem uma interação com o usuário através de dispositivos de saída, por exemplo, o monitor e por dispositivos de entrada de dados, como o teclado. Assista a videoaula sobre este tipo de estrutura aqui.

Estruturas de Seleção

É uma estrutura de desvio do fluxo de controle presente em linguagens de programação que realiza diferentes computações ou ações dependendo se a seleção (ou condição) é verdadeira ou falsa. Assista a videoaula sobre este tipo de estrutura aqui.

Sintaxe:

Se (condição) Então
    (bloco de código)
Fim Se

Estruturas de Repetição

As estruturas de repetição também são conhecidas como laços (loops) e são utilizados para executar, repetidamente, uma instrução ou bloco de instrução enquanto determinada condição estiver sendo satisfeita. Assista a videoaula sobre este tipo de estrutura aqui.

Sintaxe de repetição pré-testada:

Enquanto (condição) Faça
    (bloco de código)
Fim Enquanto

Sintaxe de repetição com variável de controle:

Para V De Vi Até Vf Faça
    (bloco de código)
Fim Para

Vetores

Vetor (array uni-dimensional) é uma estrutura simples que armazena vários valores do mesmo tipo em um espaço de memória. Assista a videoaula sobre este tipo de estrutura aqui.


Avaliação de Soluções: O Padrão de Julgamento das Maratonas

Regional de 2017 na UNICENTRO

Ambientes de avaliação automáticos executam o código submetido a partir de um conjunto de dados de entrada e comparam os dados de saída com os dados de saída de uma solução correta. Portanto, antes de submeter sua solução a um desses ambientes, é recomendável testa-la em seu próprio ambiente. Para saber mais, confira os tópicos abaixo:










Problemas de Programação: Técnicas e Treinamento

A maioria dos problemas de programação possuem padrões de entrada/saída sugeridos em casos de teste que, por vezes, conseguimos identificar tanto o tipo de dado quanto se o problema faz uso uma estrutura, como repetição, vetor, matriz, etc... Dessa forma é possível classificá-los quanto ao conhecimento necessário para a realização e qual estrutura (caso haja) predomina no problema. Sendo assim, estas são possíveis categorias empregadas à maioria dos desafios:

UriN1.jpg

Iniciante: São problemas mais fáceis de resolução, é o começo para quem está se habituando aos padrões de competições de maratonas de programação, como a contextualização do problema e funcionamento de entrada/saída de dados. Para resolver problemas nessa categoria, normalmente é necessário apenas o conhecimento dos tipos de dados, estruturas de seleção/repetição e operações matemáticas básicas que são vistas durante o colegial.
Exemplos:


UriN2.jpg

Ad-Hoc São problemas muito específicos, que não dependem de estruturas de dados, algoritmos ou técnicas genéricas. Cada problema ad-hoc possui sua própria característica de resolução, sendo assim, tem uma alta variação de dificuldade. Podendo serem resolvidos com simples estruturas de seleção e lógica ou até mesmo, usar cálculos avançados tornando difícil a resolução.
Exemplos:


UriN3.jpg

Strings São problemas que trabalham, em essência, com a manipulação de caracteres e palavras, sendo necessário desenvolver algoritmos para os mais diversificados propósitos, a diferença de resolução desses problemas pode variar significativamente dependendo da linguagem de programação utilizada, por conta das funções existentes dentro de cada linguagem.
Exemplos:


UriN4.jpg

Estruturas e Bibliotecas São problemas que fazem utilização de estruturas bem definidas na literatura (p.e. Lista, Pilha, Fila, Árvore, Mapas, etc) e que podem ser facilmente encontradas em livros ou internet. A estratégia aqui é conhecer e saber aplicar diferentes estruturas que realizam as mesmas tarefas, todavia, que tem diferenças de desempenho e gasto computacional, pois todos os problemas possuem um tempo determinado de execução, caso o tempo de execução seja excedido, a submissão não é válida.
Exemplos:


UriN5.jpg

Matemática São problemas que normalmente apresentam enunciado bem contextualizado para facilitar (ou dificultar, em alguns casos) a realização. Como proposto, utilizam conceitos matemáticos, fórmulas e lógica matemática no algoritmo. Se assemelham ao ad-hoc por possuir grande variação na dificuldade, tal como, desde as quatro operações básicas até a utilização de integrais.
Exemplos:


UriN6.jpg

Paradigmas São problemas mais complexos e difícil detecção de qual estrutura ou caminho seguir, se não for explicitado no enunciado. Usando algoritmos de busca comuns, ou busca de soluções ótimas. Por exemplo programação dinâmica, algoritmos gulosos, backtracking ou busca binária.
Exemplos:



UriN7.jpg

Grafos São problemas que utilizam estruturas para representar um modelo em que existem relações entre os objetos de uma certa coleção ou conjunto. Há diversos algoritmos presentes na literatura para se lidar com problemas desse tipo. Como Matriz de adjacência, Algoritmo de Kruskal, Algoritmo de Prim, Algoritmo de Floyd-Warshall, etc... Normalmente, problemas nessa categoria possuem maior dificuldade de realização.
Exemplos:


UriN8.jpg

Geometria Computacional São problemas que envolvem Geometria Computacional na sua resolução, isto é, algoritmos e estruturas de dados para a resolução computacional de problemas geométricos. São, em essência, complexos e de difícil realização.
Exemplos:



Dê uma olhada na classificação de alguns problemas aqui.

Publicações do projeto


Integrantes

Coordenação:

  • Ana Elisa T. P. da Palma
  • Mauro Henrique Mulati
  • Mauro Miazaki
  • Tony Alexander Hild
  • Daniel Kikuti (DIN/UEM)

Monitores:

  • Gabriel Krysa (2018 - )
  • Moises Alonso Prestes (2017 - )
  • Higor Gardin (2016 - )
  • João Vitor Mas Urtado (2016 - )
  • Lucas Fernando Didur (2015 - 2017)
  • Lucas Padilha (2014 - 2016)
  • Lucas Prestes (2013 - 2014)
  • Everson Joay (2013 - 2014)
  • Paulo Daniel Gonçalves (2012 - 2014)
  • Ricardo Henrique Remes de Lima (2012)
  • Marcelo Araújo (2012)
  • Alexandre Silvestre Ferreira (2012)
  • Paulo Roberto Urio (2011)
  • Lucas Marcondes Pavelski (2011)
  • Alessandro Dias Batista (2011)