Computador X Humanos.
Sendo que é tão importante, e consideravelmente mais difícil, entender o que não foi dito. Neste aspecto, o computador é quase o oposto de um ser humano, pois nós, os humanos, respondemos intuitivamente (bem, quase todos...)
Por exemplo:
Se eu digo: Lave os pratos! São instruções claras, mas a grande maioria das informações contidas em tal frase esta "implícita" e não dita.
Vou utilizar um modelo que acho ser bastante ilustrativo e intuitivo, retirado do livro Começando a Programar em C++ para Leigos, de Stephen R. Davis.
"Como Programar um Computador Humano".
O Algoritmo.
#Dica. Um algoritmo é uma descrição das etapas a serem executadas, normalmente a um alto nível de abstração.
1. Erga o carro.
2. Remova as porcas.
3. Remova o pneu.
4. Coloque um novo pneu.
5. Instale as porcas.
6. Abaixe o carro.
Para passar estas instruções ao computador, precisamos falar com ele em uma linguagem que ele conheça.
Para nos ajudar, vou seguir a mesma linguagem de modelo utilizada por Stephen no livro, a TCL - Tire Changing Language ou Linguagem de Troca de Pneu :)
TCL tem substantivos como:
carro
pneu
porca
macaco
caixa de ferramentas
pneu sobressalente
chave inglesa
TCL também tem os verbos:
agarrar
mover
soltar
girar
TCL também precisa saber contar e tomar decisões simples.
Bom, basicamente é tudo que o nosso robô trocador pneu entende. QQ outro comando e ele não faz nada.
O Programa.
Agora vamos converter o algoritmo para o programa necessariamente.
Vc diz: "remova a porca". Para iniciar a troca, certo? Errado. O robô não entende desta forma, aliás, por mais completa que a frase seja, não contem nenhuma das palavras do nosso TCL que o robô entende.
Vamos realizar esta primeira tarefa utilizando nossa TCL e os passos necessário para o entendimento da máquina.
1. agarre a chave inglesa ;
2. mova a chave inglesa para a porca ;
3. gire a chave inglesa cinco vezes no sentido anti-horário ;
4. mova a chave inglesa para a caixa de ferramentas ;
5. solte a chave inglesa.
Até aqui, podemos dizer que o fluxo do programa flui da etapa 1 até a 5.
Uma dúvida: E se não houver porca?
Não teria problema se a chave inglesa girar sem uma porca. Porém, gastaria tempo e energia, e nosso programa precisa ser funcional, econômico e rápido.
A TCL precisa de uma extensão para tomada de decisões simples, escolhendo o que fazer de acordo com a situação encontrada. Vamos adicionar uma declaração IF (se).
1. agarre a chave inglesa ;
2. Se houver porca ;
3. {
4. Mova a chave inglesa para a porca ;
5. Gire a chave inglesa cinco vezes no sentido anti-horário ;
6. }
7. mova a chave inglesa para a caixa de ferramentas ;
8. solte a chave inglesa.
O programa incia normalmente, se houver porca, o fluxo continua a execução de todas as etapas. Se não houver porca, o programa pula para a etapa 7 e 8.
Neste ponto, o programa executa uma expressão lógica que retorna um valor verdadeiro ou falso. Sim, a porca esta presente - verdadeiro. Não, a porca não esta aqui - falso.
Ainda nos resta um problema. Como o robô vai saber quantas voltas precisa girar a chave inglesa para soltar a porca?
Existe porcas diferentes, certo? Se informa um número médio para ter a certeza de que atenderia a todas as porcas, naquelas que precisam de menos voltas para soltar gastaria tempe e energia novamente, pois o robô continuaria rodando a chave onde a porca já esta solta. Vamos solucionar este ponto.
1. agarre a chave inglesa ;
2. Se houver porca ;
3. {
4. Mova a chave inglesa para a porca ;
5. Enquanto (porca anexada ao carro)
6. {
7. Gire a chave inglesa uma vez no sentido anti-horário ;
8. }
9. }
10. mova a chave inglesa para a caixa de ferramentas ;
11. solte a chave inglesa.
Agora o robô toma uma decisão.
Encontra a porca encaixada e executa a etapa 7.
Retorna a etapa 5 e, como a porca ainda encaixada, ou seja, verdadeiro, repete a etapa 7.
Até que a porca esta solta, como o retorno é falso, o robô então passa para a etapa 9 e segue o fluxo.
Mas ainda temos um problema (nossa que saco!) Os diferente tipos de carros tem diferentes números de porcas. Para continuar com a boa prática de economia de tempo e energia, vamos adicionar uma melhoria no código.
1. agarre a chave inglesa ;
2. Para cada porca na roda
3. {
4. Se houver porca ;
5. {
6. Mova a chave inglesa para a porca ;
7. Enquanto (porca anexada ao carro)
8. {
9. Gire a chave inglesa uma vez no sentido anti-horário ;
10. }
11. }
12. }
13. mova a chave inglesa para a caixa de ferramentas ;
14. solte a chave inglesa.
As etapas 7 até 10 ainda são repetidas para cada roda.
Isto é um loop nested (aninhado).
As etapas de 7 até 10 são o loop interno, enquanto as etapas de 2 até 12 são o loop externo.
Eu sei, o program é simples e ainda tem diversas situações que podem surgir, como por exemplo, uma porca faltando. Afinal, não "ensinamos" o robô o que deve ser feito nesta situação.
Mas veja onde começamos e de que forma o código ficou no final.
Disposto a continuar? Então vamos.
<a href="https://plus.google.com/u/0/109289031165722699327/about/p/pub?rel=author">Google</a>
Nenhum comentário:
Postar um comentário