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 programaçã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)

15 Responses to “Programando melhor: Aula 1 – Começando”

  1. Matheus Jhow Says:

    pronto, já tenho o que fazer na unp.. e lá tem programas de tudo quanto eh tipo pra programação, ñ soh em pascal, mas em java, e deve ter em C tb (apesar de eu não saber programar nesses dois últimos).. mas eh isso ae, boa iniciativa!

  2. Carol Says:

    =O

  3. Elomar França Says:

    Valeu, Helton!

    Ótimas dicas. Que venham os próximos ;D

    E quanto aos nomes das variáveis, bem, GANHAAAMOS! XD

  4. Programando melhor: Exercícios 1 (Parte I) « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  5. Herbert Duarte Says:

    Bom post, Helton! Pode mandar os próximos…

    Só uma observação sobre o que você fala a respeito de structs: na verdade, em várias situações eles podem ser bem úteis pra organizar melhor o código. Um exemplo: se você tem q ordenar uma lista de times de futebol e você tem o nome, pontos e saldo de gols de cada time, eh muito mais elegante colocar essa informação em um struct, digamos “Time”, e ter um vetor de dados desse tipo, ao invés de ter três diferentes vetores e fazer as trocas em cada um deles separadamente. Ter tudo numa estrutura só também vai evitar bugs, porque você não tem que se preocupar em sincronizar o uso de cada vetor.

    Mas eu concordo com você que classes são desnecessárias nesse tipo de competição (mas não na vida real :) e que a melhor linguagem para isso é o bom e velho C.

  6. Programando melhor: Aviso « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  7. Programando melhor: Aula 2 - Estruturas de Dados « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  8. Programando melhor: Aula 3 - Strings « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  9. OBI vem aí! « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  10. 2008 Olimpíada de Algoritmo Hostnet- A maior competição entre escolas técnicas do Brasil » Blog Archive » Programando melhor: Aula 1 - Começando Says:

    [...] Leia mais >> [...]

  11. Programando melhor: Aula 4 - Ordenação « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  12. Programando melhor: Revisão « Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  13. OBI vem aí! | Blog de Helton Duarte Says:

    [...] Programando melhor: Aula 1 – Começando [...]

  14. rogi Says:

    preciso desenvolver um sistema em pascal que controle um cadastro de 10 funcionários, com os seguintes campos: Código, nome, telefone e salário. O menu do sistema deve conter as seguintes opções:
    1. Incluir
    2. Pesquisar por nome
    3. Excluir
    4. Listar
    5. Atualizar Salário
    6. Sair

    como faço estou iniciando agora no curso de SI e preciso de ajudar

  15. admin Says:

    Olá Rogi,

    Caso você esteja utilizando classes (em Object Pascal), poderá criar uma classe para o funcionario e outra para uma lista de funcionarios. No caso, a primeira soh teria os campos e o create, e a segunda teria uma lista (ou um vetor, por exemplo) de funcionários e os métodos citados por você.

    Caso não esteja utilizando classes, cria-se um registro de funcionário e um vetor deles, com os métodos citados.

    OBS: O método sair seria a condição de fechamento do programa, tipo: while (n [diferente de] 6) do, sendo n a opção dada pelo usuário.

    Abraços.

Leave a Reply

*

Spam Protection by WP-SpamFree