1. Introdução a Programação O principal objetivo deste módulo é apresentar o que é programar computadores. Na verdade, não se trata de um esforço tão milagroso. Programar um computador para executar algo é, na verdade, uma tarefa muito comum, pois o que faremos é apenas descrever passo a passo o que um computador precisa executar para chegar ao objetivo final. A essa descrição chamamos de ALGORITMO e é através do estudo de algoritmos que identificaremos o modelo de lógica de programação fundamental para aprender a programar. Algoritmo Algoritmo é uma seqüência de ações, organizadas de forma lógica, que visam alcançar um objetivo bem definido. Apesar do nome parecer estranho para os iniciantes, algoritmos são comuns em nosso cotidiano, como por exemplo, uma receita de bolo. Nela está descrita uma série de ingredientes necessários e uma seqüência de diversos passos (ações) a serem executados para que se consiga fazer determinada tarefa (objetivo bem definido). DICA Lembre bem que um algoritmo tem esses dois elementos (essa informação será usada várias vezes daqui para frente): elementos que serão usados passos que serão seguidos Fazer um algoritmo é basicamente seguir esse roteiro ! Exemplo: Troca de uma lâmpada. VERSÃO 1 pegue uma escada; posicione-a embaixo da lâmpada; busque uma lâmpada nova suba na escada; retire a lâmpada velha; coloque a lâmpada nova; Esse algoritmo tem um objetivo: troca de uma lâmpada, e faz isso bem. Mas, troca a lâmpada mesmo que ela não esteja queimada. Ou seja, podemos melhorar esse algoritmo para que a lâmpada não seja trocada caso esteja funcionando, incluindo um teste. DICA Na primeira versão do nosso algoritmo de trocar lâmpadas pode-se perceber o principal erro que acontece nos primeiros algoritmos: AM sempre produzir instruções (ações) que não sejam ambíguas e que façam a operação necessária sem dar margem a mais de um resul resultado que lhe é necessário. Para entender bem essa dica, analise as diferenças entre a versão 1 e a versão do 2 do nosso algoritmo de trocar lâmpada - que difere VERSÃO 2 ligue o interruptor; se o interruptor não acender, então: pegue uma escada; posicione-a embaixo da lâmpada; busque uma lâmpada nova; suba na escada; retire a lâmpada velha; coloque a lâmpada nova; Ainda pode ocorrer de a nova lâmpada também não funcionar, neste caso podemos alterar o algoritmo para que as lâmpadas continuem sendo trocadas até que alguma funcione. DICA Calma ! Não pense que as ambigüidades desaparecem instantaneamente. Chegar a uma versão aceitável de um algoritmo é um pouco processo que exige paciência e muita atenção. A esse processo costumamos dar o nome de REFINAMENTO. E refinar um algoritmo, o exemplo, observe que, agora, a versão 3 está praticamente clara e sem nenhuma ambigüidade ! VERSÃO 3 ligue o interruptor; se o interruptor não acender, então: pegue uma escada; posicione-a embaixo da lâmpada; busque uma lâmpada nova; suba na escada; retire a lâmpada velha; coloque a lâmpada nova; enquanto a lâmpada não acender, faça: retire a lâmpada; coloque outra lâmpada; Algumas conclusões: Nessa primeira etapa da nossa aula, esperamos que tenham percebido: que o principal problema de fazer um algoritmo é que ele pode ficar ambíguo; que para retirar a ambigüidade de um algoritmo podemos usar de dois artifícios (EXISTEM OUTROS QUE SERÃO MOSTRADOS): criar decisões (são rotas alternativas) criar repetições (para não deixar implícito quando termina alguma operação). Lista de Exercícios 1 para fazer os exercícios abaixo você pode consultar os materiais: [1]http://www.uergsai.hpg.ig.com.br/material/Algoritmo_Uergs.pdf [2]http://henrique.brodbeck.com.br/inf01040/logica.pdf Além dos livros citados na bibliografia 1) “Um homem quer atravessar um rio com um barco que pode carregar ele mesmo e apenas mais uma de suas três cargas: um lobo, um carneiro e um maço de alfafa. O que o homem deve fazer para atravessar o rio sem perder nenhuma de suas cargas?” Descreva os passos desse homem de forma a conseguir atingir o objetivo requisitado. 2) Suponha que você possua um robô e queira fazê-lo trocar uma lâmpada e depois conferir se a mesma acende, sendo que o mesmo foi programado para obedecer os seguintes comandos: pegue <objeto> largue <objeto> pressione <objeto> gire garras 180 graus no sentido horário (parafusar) gire garras 180 graus no sentido anti-horário mova <objeto> para/até < lugar> desloque-se para <lugar> O robô ainda é capaz de : perceber quando um comando não é mais possível (Utilize escada, lâmpada, interruptor, abaixo da lâmpada, parte superior da escada, lixeira, etc...) 3) Elabore um algoritmo (descrever os passos) que permita mover 3 discos de uma torre de Hanói, que consiste em 3 hastes (a-b-c), uma das quais serve de suporte para os três discos de tamanhos diferentes (1-2-3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, sendo que nunca deve ser colocado um disco maior sobre um menor. O objetivo é transferir os três discos da haste “a” para a haste “c”. Mova <disco n> da haste <n1> para haste <n2> Cursos de Programação à Distância © Departamento de Ciência da Computação - Udesc, Joinville - 2004