sábado, 7 de agosto de 2010

Lógica da Programação

Para você que sonha em se tornar um Bill Gates da vida, leia o texto abaixo e descubra que pra se meter nessa vida é necessário ser muito nerd.

Hoje me dei conta que estou esquecendo tudo que aprendi na faculdade, o que não é muito agradável. Quando dizem que a falta de prática influência no desempenho das atividades eu descobri que realmente estavam falando a verdade. Levando em conta que apesar de trabalhar em uma empresa voltada à area de tecnologia e informática, infelizmente o meu trabalho não me da a liberdade de utilizar alguns dos conhecimentos que adquiri na faculdade. Portanto decidi criar uma serie de tópicos voltados a uma das materias que a maioria dos alunos desenvolve um interesse maior em relação as outras materias: Programação.

Para se tornar um bom progamador, além de conhecimento e familiaridade com a linguagem que programa, o programador necessita de lógica para resolver os problemas que lhe são apresentados. Para resolver um problema no computador é necessário que seja primeiramente encontrada uma maneira de descrever este problema de uma forma clara e precisa. É preciso que encontremos uma seqüência de passos que permitam que o problema possa ser resolvido de maneira automática e repetitiva. Além disto é preciso definir como os dados que serão processados serão armazenados no computador. Portanto, a solução de um problema por computador é baseada em dois pontos: a seqüência de passos e a forma de armazenamento deos dados. Esta seqüência de passos é chamada de algoritmo. Um algoritmo pode ser comparado de forma simples a uma receita para preparar um bolo, apesar de que alguns algoritmos sejam mais complexos.

A principio pode parecer fácil a criação de um algoritmo para resolução de um problema, porém quando este problema se torna mais complexo, o algoritmo tambem acaba se tornando mais complicado de se desenvolver. A criação de algoritmos para resolver os problemas é uma das maiores dificuldades dos iniciantes em programação em computadores. Isto porque não existe um conjunto de regras, ou seja um algoritmo, que nos permita criar algoritmos. Claro que existem linhas mestras e estruturas básicas, a partir das quais podemos criar algoritmos, mas a solução completa depende em grande parte do criador do algoritmo. Geralmente existem diversos algoritmos para resolver o mesmo problema, cada um segundo o ponto de vista do seu criador, por exemplo, para ir de casa até o trabalho, posso escolher diversos meios de transporte em função do preço, conforto, rapidez, etc. A escolha será feita em função do critério que melhor se adequar as nossas necessidades.

Um algoritmo nada mais é do que o programa escrito em uma linguagem humana, muitas vezes chamada de Portugol por programadores e alguns professores. Antes de escrevermos um programa em qualquer outra linguagem é necessário escrever um esquema em papel para evitar erros, por exemplo, na nossa língua, segundo o programa que queremos fazer. Com isto não esquecemos a lógica que queremos dar ao programa e será menos comum o aparecimento de erros. Por exemplo:
Linguagem humana:
"Se for verdade isso, acontece isto, senão acontece aquilo"
Linguagem de máquina:
IF isso; THEN isto; ELSE aquilo;
Uma coisa interessante é que todos nós somos capazes de criar algoritmos, e mais interessantes ainda é que o fazemos todos os dias. Desde o momento em que acordamos estamos criando algoritmos para resolver problemas do cotidiano, por exemplo, acordar cedo para ir ao trabalho necessitou que o dispertador fosse programado para dispertar em determinado horario, caso contrário talvez não acordariamos naquele horário. Para melhor exemplificar de uma olhada neste exemplo utilizando portugues coloquial:

Algoritmo 1.1 Trocar uma lâmpada.
  1. pegar uma escada;
  2. posicionar a escada debaixo da lâmpada;
  3. buscar uma lâmpada nova;
  4. subir na escada;
  5. retirar a lâmpada queimada;
  6. colocar a lâmpada nova;
Reexaminando o algoritmo 1.1, notamos que ele tem um objetivo bem definido: trocar uma lâmpada. Porém se a lâmpada não estivesse queimada? A lâmpada seria trocada da mesma forma porque o algoritmo não previu essa possibilidade. Para tal acrescentamos um teste condicional (estrutura seletiva).

Algoritmo 1.2 Trocar uma lâmpada.
  1. pegar uma escada;
  2. posicionar a escada debaixo da lâmpada;
  3. buscar uma lâmpada nova;
  4. acionar o interruptor;
  5. se a lâmpada não acender, então
  6. subir na escada;
  7. retirar a lâmpada queimada;
  8. colocar a lâmpada nova;
O algoritmo 1.2 pode ser melhorado uma vez que buscamos a lâmpada e a escada sem saber se de fato seriam necessárias.

Algoritmo 1.3 Trocar uma lâmpada.
  1. acionar o interruptor;
  2. se a lâmpada não acender, então
  3. pegar uma escada;
  4. posicionar a escada debaixo da lâmpada;
  5. buscar uma lâmpada nova;
  6. subir na escada;
  7. retirar a lâmpada queimada;
  8. colocar a lâmpada nova;
O algoritmo 1.3 não atingirá seu objetivo se a lâmpada nova estiver queimada. É necessário prever essa possibilidade.

Algoritmo 1.4 Trocar uma lâmpada.
  1. acionar o interruptor;
  2. se a lâmpada não acender, então
  3. pegar uma escada;
  4. posicionar a escada debaixo da lâmpada;
  5. buscar uma lâmpada nova;
  6. subir na escada;
  7. retirar a lâmpada queimada;
  8. colocar a lâmpada nova;
  9. se a lâmpada não acender, então
  10. retirar a lâmpada queimada;
  11. colocar outra lâmpada nova;
  12. se a lâmpada não acender, então
  13. retirar a lâmpada queimada;
  14. colocar outra lâmpada nova;
  15. se a lâmpada não acender então
  16. (Até quando?)
O Algoritmo 1.4 não está terminado. As ações cessarão quando conseguirmos colocar uma lâmpada que acenda, que é o objetivo do algoritmo. Em vez de reescrevermos várias vezes um conjunto de ações, podemos alterar o fluxo seqüencial de execução para permitir que ações sejam reexecutadas quantas vezes seja necessário. Precisamos expressar essa repetição (estrutura de repetição) garantindo uma condição de parada.

Algoritmo 1.5 Trocar uma lâmpada.
  1. acionar um interruptor;
  2. se a lâmpada não acender, então
  3. pegar uma escada;
  4. posicionar a escada debaixo da lâmpada;
  5. buscar uma lâmpada nova;
  6. subir na escada;
  7. retirar a lâmpada queimada;
  8. colocar a lâmpada nova;
  9. enquanto a lâmpada não acender, faça
  10. retirar a lâmpada queimada;
  11. colocar outra lâmpada nova;
Pronto, agora temos um algoritmo que preve todas as possibilidades, positivas ou negativas, no momento de se trocar uma lampada. Viram como um simples exemplo pode gerar diversas possibilidades? No proximo tópico estaremos estudando as formar de representação de algoritmos.

Nenhum comentário:

Postar um comentário