• Nenhum resultado encontrado

lóGica de proGramação: variáveis e estruturas sequenciais

No documento Livro BasesComputacionais (páginas 143-145)

Harlen Costa Batagelo João Paulo Gois

Letícia Rodrigues Bueno Luiz Carlos da Silva Rozante Ronaldo Cristiano Prati

5.1 introdução

Nesta etapa do curso, apresentamos conceitos básicos de desenvolvimento de pro- gramas para serem executados em dispositivos computacionais, como o computador. O desenvolvimento desses programas envolve uma maneira específica de pensar e planejar estratégias para que esses dispositivos possam ser usados para resolver problemas. Resolução de problemas é a habilidade de formular problemas, pensar criativamente em soluções e expressá-las de maneira clara e precisa, a fim de que, se e quando nos depararmos novamente com o mesmo problema, poderemos seguir a descrição da solução como uma receita ou, neste caso, delegar a sua execução a um dispositivo (normalmente o computador) que irá executar as instruções.

Essa maneira de pensar e resolver problemas computacionalmente combina e integra algumas características de diferentes áreas como Matemática, Engenharia e Ciências Naturais. Da Matemática, usamos algum formalismo para representar ideias (parti- cularmente quando envolvem computação). Da Engenharia, a maneira de projetar coisas, juntar componentes em sistemas maiores e avaliar e decidir quando temos que ponderar diferentes alternativas. Das Ciências Naturais, a habilidade de observar o comportamento de sistemas complexos, formular modelos e hipóteses e testar predições. Aprender a desenvolver programas é uma excelente oportunidade para praticar habilidades de resolução de problemas e, consequentemente, de criatividade.

O objetivo deste capítulo é mostrar como atribuir instruções a um computador, de

maneira que ele possa nos auxiliar a resolver problemas. Para isto precisamos de dois ingredientes: linguagem e lógica. Apresentamos, através de situações do dia a dia, como intuitivamente delegamos tarefas prescrevendo instruções ou realizamos tarefas seguindo instruções em uma ordem lógica, de modo a resolver problemas. Utilizamos estes exemplos como motivação para introduzir os conceitos básicos de lógica de programação. Com o objetivo de auxiliar na ilustração dos conceitos apresentados, utilizamos ao longo dos capítulos 5, 6 e 7 uma ferramenta chamada RoboMind, disponível em http://www.robomind.net/. Neste aplicativo, o objetivo é controlar um robô virtual através da prescrição de instruções, usando uma linguagem

que contém vários elementos de lógica de programação. Ao final de cada capítulo, exemplificamos os mesmos conceitos em uma linguagem de programação de pro- pósito mais geral nativa de um software chamado Scilab. Para maiores informações sobre estas ferramentas, indicamos as referências RoboMind (2011) e Scilab (2011).

O objetivo deste capítulo NÃO é o estudo e o desenvolvimento de programas com-

plexos. Embora muito importante, esse assunto é trabalhado em disciplinas espe- cíficas dos cursos da área de Computação. O desenvolvimento desse tema depende de aprendizado e experiência progressivos, que fogem aos objetivos desta disciplina. No entanto, embora seja possível aprofundar-se muito no assunto, programas um pouco mais elaborados são estudados no curso de Processamento na Informação. Como uma bibliografia complementar para a disciplina de Bases Computacionais da Ciência, e aos interessados em aprofundar-se no estudo de algoritmos, indicamos os livros de Forbellone et al. (2005) e Puga e Rissetti (2009).

O restante deste capítulo está distribuído conforme a seguinte organização. As seções 5.2 e 5.3fazem uma analogia entre as tarefas que executamos diariamente e as tarefas que o computador pode executar. Os conceitos são ilustrados através do RoboMind, sendo reforçados pelas atividades em aula na Seção 5.4 e por exemplos com o Scilab na Seção 5.5. A Seção 5.6 apresenta as considerações finais do capítulo e exercícios complementares são fornecidos na Seção 5.7.

5.2 deleGando tarefas: o conceito de instrução

Em nosso cotidiano, a todo momento, costumamos delegar tarefas em forma de instruções:

(i) Você chega faminto a uma lanchonete e faz um pedido de uma refeição: um lanche, um suco e uma sobremesa. Também solicita que seja preparada “com urgência”, pois está faminto. Se a refeição for preparada como você gostaria, a instrução foi bem dada e a lanchonete (a executora da instrução) foi eficiente; (ii) Para você não perder o horário, você já instruiu algum equipamento que possui a função de despertador (relógio cuco, telefone celular, rádio-relógio). Se você ajustou corretamente o horário e o volume sonoro alto o suficiente para você acordar, você despertará.

Estes são exemplos de como costumamos delegar tarefas por prescrever instruções. No primeiro caso, as instruções foram dadas através de comunicação oral na Língua Portuguesa, enquanto no segundo foram instruções específicas para o equipamento adotado.

As instruções diferem de acordo com as funcionalidades que o equipamento é capaz de oferecer. Por exemplo, uma campainha tem a única função de ser tocada. Em uma calculadora simples, as instruções correspondem às operações aritméticas de soma, subtração, multiplicação e divisão. Já em um aparelho de televisão, dentre as diversas instruções que pode haver, normalmente estão os comandos de avançar/retroceder o canal, aumentar/diminuir o volume do som e a função liga/desliga. Em todos os casos,

temos um conjunto de instruções específicas básicas que são as ações fundamentais que o equipamento é capaz de realizar.

5.3 sequência de instruções: estruturas sequenciais

Nem sempre as instruções básicas são capazes de resolver um problema. Nesse caso, instruções podem ser compostas de modo a produzir resultados que não poderiam ser obtidos com apenas uma única instrução. Por exemplo, você pode combinar com algum morador da sua casa que, se a campainha for tocada três vezes seguidas, com um intervalo de aproximadamente dois segundos entre cada toque, é você que está na porta e ela pode ser aberta por quem estiver dentro da casa.

Vamos agora ver um exemplo um pouco mais “computacional”. Suponha que de- sejamos calcular o resto da divisão de 9 por 2 usando uma calculadora que possui as operações de soma, subtração, multiplicação e divisão, mas não possui a operação de resto da divisão. Você, sendo um aluno astuto, pensou na seguinte solução:

1. Dividir 9, o dividendo, por 2, o divisor, obtendo o resultado 4,5; 2. Considerar apenas a parte inteira do resultado, ou seja, 4;

3. Multiplicar a parte inteira do resultado pelo divisor, obtendo 4×2=8;

4. Subtrair o dividendo pelo resultado da multiplicação anterior, isto é, 9−8=1, que é o resultado esperado.

Assim, conseguimos obter o resto da divisão entre dois números usando uma com- posição das operações de multiplicação, subtração e divisão. De fato, não apenas a operação de resto da divisão, mas uma infinidade de operações mais complexas pode ser obtida através da composição de operações simples.

No documento Livro BasesComputacionais (páginas 143-145)