Blog de Helton Duarte

O seu portal de informações sobre TI

Programando melhor: Aula 1 – Começando

Finalmente pessoal!

Hoje irá iniciar o curso de programação focado em competições existentes em todo o mundo. O curso terá como título “Programando melhor” e será composto de aulas iniciantes até programação pesada! Vamos embarcar comigo nessa empreitada!

Aula 1 – Começando

Conteúdo: introdução a competições de programação, assim como dicas iniciais e cuidados a serem tomados na criação de soluções para os problemas apresentados.

Existem por aí alguns sites que podem nos ajudar a exercitar nossos conhecimentos, pois disponibilizam juízes online para testar a eficiência do seu programa. Os principais sites para esse tipo de exercício são o da Universidad de Valladolid, o da Olimpíada Brasileira de Informática e o do livro Programming Challenges (base para o desenvolvimento desse curso). Cadastre-se neles (com excessão do site da OBI, que não precisa de cadastro) e comece a testar soluções para os mais diversos programas encontrados, inclusive para os exercícios que serão propostos aqui.

Como primeiro passo rumo a sua vitória em diversas dessas competições, você precisará primeiramente escolher em qual linguagem desenvolverá seus programas. Eu recomendo o C, pois é de fácil entendimento (sem a orientação a objeto presente no C++/Java) e é aceito em praticamente todas as competições. Pascal é uma boa recomendação apenas para quem está no ensino médio e deseja participar da OBI (pois é uma das únicas que ainda permite essa linguagem); Java é desagradável pela sua POO (programação orientada a objeto), algo bastante desagradável quando não se vai trabalhar com programas grandes os quais precisariam de reaproveitamento de algumas partes; C++ é aconselhável a programadores mais experientes, desejosos de participar do TopCoder (não aceita o C).

É preciso também tomar cuidados com algumas práticas do nosso dia-a-dia na programação que não devem ser praticadas por um competidor. Primeiramente, as entradas e saídas do seu programa devem ser exclusivamente as padrões, ou seja, não é permitida a abertura de arquivos ou funções desse estilo durante a programação. Já para programadores Java funções de internet e threads não são permitidas, além de nada poder ser público, até mesmo o Main, contudo pacotes como math, util e similares são possíveis.

Dicas de programador para programador:

  • Comece seu programa e cada uma das funções criadas comentando cada passo a ser realizado, pois isso facilitará seu entendimento do problema (se você não conseguir fazer isso, então não está entendendo o que é preciso fazer no programa). Esse esforço extra irá ajudar muito no futuro…
  • Faça o mesmo para cada variável, explicando qual será sua “função” no programa (não é preciso colocar nomes gigantes, como ModuloDoQuadradoDoVetorResultante, apenas comente bem (não é Elomar e Bryan? hehehehehe).
  • Crie, sempre que possível, constantes para representar números bastante utilizados no programa, como PI, TAMVETOR, etc., isso irá prevenir erros futuros e deixará BEM mais legível seu código (ajudando a encontrar bugs que possam aparecer).
  • Eficácia. Essa é a base para competições de progração (e para sua vida de programador). Evite ao máximo códigos redundantes, como
    • if (x == ‘A’) Código
    • else if (x == ‘B’) Código quase igual;
  • Além do mais (nunca pensei que iria falar isso na minha vida xD ): evite GAMBIARRAS! Você pode achar o máximo quando você faz uma daquelas bem grotescas, todavia isso pode lhe causar um belo de um “Time Limit Exceeded”, ou seja, seu programa pode ficar lento e não ser executado no tempo máximo permitido (é, existe um tempo máximo!). ^^
  • Por fim, é de extrema importância o conhecimento na arte de “DEBUGGAR”, ou seja, conheça o sistema de Debug do seu compilador ou faça isso manualmente (mandando imprimir o valor de certa variável em um determinado local – CUIDADO com doideras no código ao fazer isso). Esse item é muito bom caso receba alguma mensagem de erro do sistema de correção.

Um bom caminho a seguir é o de evitar tipos de dados não elementares, como POO, e até a utilização excessiva de ponteiros em C, o que pode gerar erros inesperados, sendo sempre bom recorrer aos bons e velhos Vetores. Tome também cuidados com Records/Structs/Registros, pois eles podem gerar uma grande dor de cabeça na hora de precisar alterar o seu código.

Bem, gostaria de finalizar esse post com um alerta para aqueles os quais desejam participar da OBI, pois durante a competição você não tem o acesso ao juiz dizendo se o seu programa passou nos testes ou não, isso só é disponibilizado na seção Pratique do site, portanto é necessária a sabedoria para você mesmo criar testes que poderiam dar erro em um programa, ok?

Os exercícios seguem no próximo post e eles estão todos disponibilizados no UVa Online Judge, para serem testados. Eles correspondem aos problemas do Capítulo 1 do livro Programming Challenges, de autoria de Miguel Revilla e Steven Skiena.

Posts interessantes:

E você, o que achou dessas dicas? Está pronto para começar essa jornada e se tornar um competidor dos mais fortes? Deixe seu comentário e tire as suas dúvidas!

Helton de Melo Duarte

“Porém o SENHOR disse a Samuel: Não atentes para a sua aparência, nem para a altura da sua estatura, porque o tenho rejeitado; porque o SENHOR não vê como vê o homem. Pois o homem vê o que está diante dos olhos, porém o SENHOR olha para o coração.” (1 Samuel 16.7)

Fevereiro 10, 2009 Publicado por Helton de Melo Duarte | Competições, Cursos, Programando Melhor | , , , , , | 12 Comentários

Curso de Programação – Confirmado!

Olá pessoal!!! =D

Eu venho aqui não para falar do novo Google Earth, como vocês poderiam imaginar, já que ele saiu hoje (apesar de ser uma boa falar dele)…mas para comunicá-los sobre uma novidade que eu já havia prometido para vocês leitores a algumas semanas, porém só foi confirmada hoje, após contatar Miguel Revilla e Steven Skiena (a nata da programação).

O curso de programação preparatório para competições desse assunto está confirmado no meu blog! Após resolver algumas pendências que poderiam vir, como direitos autorais e coisas do tipo, confirmei agora a pouco com os autores do livro Programming Challenges a elaboração desse meu projeto!

Livro para competições de programação

Livro para competições de programação

O curso consistirá basicamente de um abordagem sobre os assuntos desse livro citado (considerado a bíblia das competições de programação), para facilitar o acesso a esse tipo de assunto. O livro é completamente em inglês e, por isso, irei fazer esse resumo em português para vocês, além de abordar os exemplos em C e Pascal (pois no livro é apenas em C). Outro ponto importante que gostaria muito da colaboração de todos é a disponibilização de soluções para os problemas da seção Pratique, no site da OBI, as quais serão feitas por mim e por qualquer um que deseje colaborar conosco (mande as soluções para meu e-mail, em hm_duarte@hotmail.com , para que passe pela devida avaliação e, então seja postada também no blog, com seus devidos direitos ao autor). OBS: pode ser em C, C++ ou Pascal.

Peço a todos os leitores desse post para divulgarem esse assunto de toda a forma possível, pois espero que esse curso possa ajudar muitos a crescer como programadores, assim como lutar por sonhos que possam parecer distantes, como vencer esse tipo de competição.

PS: O direcionamento principal desse curso é para a participação na OBI (Olimpíada Brasileira de Informática), porém irá formar um programador completo, auxiliando, portanto, a OAH (Olimpíada de Algoritmo Hostnet), a ACM (ou online-judge, da Universidad de Valladolid) e TopCoder.

PS2: O objetivo do curso não é ensinar a linguagem C ou Pascal e sim métodos que possam auxiliar a resolver diversos problemas comuns em competições de programação e presentes no dia-a-dia, portanto tem-se como pré-requisitos desse curso o conhecimento em algoritmos e nas linguagens C ou Pascal.

Helton de Melo Duarte

“Um Vencedor respeita aqueles que são superiores a ele e tenta aprender alguma coisa com eles. Um Perdedor ressente-se daqueles que são superiores a ele e faz racionalizações a respeito de suas conquistas.

Um Vencedor explica; um Perdedor justifica.

Um Vencedor diz: ‘Vamos descobrir uma saída’; um Perdedor diz: ‘não há nenhuma saída’.

Um Vencedor enfrenta o problema; um Perdedor tenta contorná-lo.

Um Vencedor diz: ‘Deve haver um jeito melhor de fazer isso’; um Perdedor diz: ‘Isso sempre foi feito assim’.

Um Vencedor mostra que lamenta o fato de ter de compensar por algo; um Perdedor diz: ‘Eu lamento’, mas ele continua a fazer a mesma coisa.

Um Vencedor sabe pelo que lutar e com o que se comprometer; um Perdedor compromete-se com o que não deveria e luta por aquilo que não vale a pena lutar.

Um Vencedor trabalha mais duro que o Perdedor, e tem mais tempo; um Perdedor está sempre ‘muito ocupado’ para fazer o que é necessário.

Um Vencedor não tem medo da derrota; um Perdedor secretamente teme a vitória.

Um Vencedor compromete-se; um Perdedor faz promessas.”

GEORGE, Jim. Um Jovem segundo o coração de Deus, p. 159-160. CPAD, 2008.

Fevereiro 3, 2009 Publicado por Helton de Melo Duarte | Competições, Programando Melhor | , , , | 3 Comentários