quinta-feira, 17 de março de 2016

C.A.P's (Cursos Abertos Profissionalizantes): LÓGICA DE PROGRAMAÇÃO - Aula 1 – Introdução à Lógica de Programação



Objetivos:

Compreender os conceitos de lógica de programação e de algoritmos.

Conhecer os primeiros exemplos de algoritmos.

Entender os conceitos de estrutura sequencial, estrutura de decisão e estrutura de repetição no contexto de algoritmos.

1.1 Conceitos básicos

Nesta disciplina, iniciaremos nossos estudos sobre Lógica de Programação. Mas, antes de começarmos, seria útil uma reflexão sobre o significado da palavra “Lógica”.

Assim, o que é Lógica?

Lógica
Pode ser vista como a arte de
pensar corretamente. A lógica
visa a colocar ordem no pensamento
(FARRER, 1999).

Utilizamos a lógica de forma natural em nosso dia a dia. Por exemplo:

a) Sei que o livro está no armário.
Sei que o armário está fechado.
Logo, concluo que tenho de abrir o armário para pegar o livro.

b) Sei que sou mais velho que João.
Sei que João é mais velho que José.


Então, concluo que eu sou mais velho que José.


Atividade 1.1 – Sejam os seguintes fatos:

• Todos os filhos de João são mais altos do que Maria.

• Antônio é filho de João.

Então, o que podemos concluir logicamente?

Resposta: Antônio é mais alto que Maria.


Atividade 1.2 – Considere os fatos abaixo:

• José é aluno do IFES.

• Para ser aprovado, um aluno do IFES precisa obter nota maior ou igual a 60 e comparecer a mais de 75% das aulas.

• José compareceu a todas as aulas e obteve nota igual a 80.

Então, o que podemos concluir?

Resposta: José foi aprovado.

1.2 Construção de algoritmos

A lógica de programação é essencial para pessoas que desejam trabalhar com desenvolvimento de programas para computadores. Lógica de programação pode ser definida como um conjunto de técnicas para encadear pensamentos a fim de atingir determinado objetivo.

O objetivo fundamental de toda programação é construir algoritmos. Mas, afinal, o que é um algoritmo?

Algoritmo
Formalmente é uma sequência
finita de passos que levam
à execução de uma tarefa.
Podemos pensar em algoritmo
como uma receita, uma
sequência de instruções que dão
cabo de uma meta específica
(FORBELLONE et al., 2005).

Em outras palavras, quando criamos um algoritmo, apenas apontamos uma sequência de atividades que levam à solução de um problema. Até mesmo as soluções para os problemas cotidianos mais simples podem ser descritas por sequências lógicas de atividades, ou seja, por algoritmos:

Problema: Trocar uma lâmpada.

Sequência de Passos para Solução:

1. Pegue uma escada;
2. Posicione a escada embaixo da lâmpada;
3. Pegue uma lâmpada nova;
4. Suba na escada;
5. Retire a lâmpada velha;
6. Coloque a lâmpada nova.

Esta solução é apenas uma das muitas soluções possíveis para o problema apresentado. Assim, ao criarmos um algoritmo, indicamos uma dentre várias possíveis sequências de passos para solucionar o problema.

Por exemplo, o problema acima poderia ser resolvido mesmo se alterássemos a sequência de passos para:

1. Pegue uma lâmpada nova;
2. Pegue uma escada;
3. Posicione a escada embaixo da lâmpada;
4. Suba na escada;
5. Retire a lâmpada velha;
6. Coloque a lâmpada nova.

Atividade 1.3 – Escreva um algoritmo (sequência de passos) para trocar um pneu de um carro.

Atividade 1.4 – Descreva um algoritmo que defina como fazer um bolo.

Atividade 1.5 – Descreva um algoritmo que defina como preparar um ovo frito.

1.2.1 Algoritmos com estruturas de decisão

Os algoritmos que construímos até agora apresentam uma sequência de passos que devem ser seguidos para atingir um objetivo bem definido. 

Note que todos os passos dos algoritmos devem ser executados a fim de que o objetivo seja alcançado.

Porém, há algoritmos nos quais a execução de alguns passos pode depender de decisões a serem tomadas. Dessa forma, algum fato indicará se um ou
mais passos do algoritmo serão executados ou não.


Por exemplo, o nosso primeiro algoritmo define uma sequência de passos para trocar uma lâmpada. 

Em momento algum perguntamos se a lâmpada está queimada. Simplesmente trocamos a lâmpada sem fazer qualquer teste.

Para resolver esse problema, podemos acrescentar ao nosso algoritmo um teste que verifique se a lâmpada deve ser trocada:



Testes
Determinam quais ações serão
executadas; são chamados
de estruturas de seleção ou
estruturas de decisão.


1. Ligue o interruptor

2. Se a lâmpada não acender:

2.1. Pegue uma escada;
2.2. Posicione a escada embaixo da lâmpada;
2.3. Pegue uma lâmpada nova;
2.4. Suba na escada;
2.5. Retire a lâmpada velha;

2.6. Coloque a lâmpada nova

Agora, estamos ligando os passos de efetuar a troca da lâmpada a uma condição. Assim, só executamos os passos definidos de 2.1 a 2.6 caso a condição definida do passo 2 seja verdadeira, ou seja, caso a lâmpada não acenda.

1.2.2 Algoritmos com estruturas de repetição

Note que, apesar de nosso novo algoritmo estar verificando a necessidade de trocar a lâmpada antes de fazê-lo, em momento algum verificamos se a lâmpada nova que foi instalada funciona.

Assim, vamos tentar alterar o nosso algoritmo a fim de garantir que ao fim de sua execução tenhamos uma lâmpada funcionando. Para isso, vamos incluir um novo teste em seu final:

1. Ligue o interruptor
2. Se a lâmpada não acender:
2.1. Pegue uma escada;
2.2. Posicione a escada embaixo da lâmpada;
2.3. Pegue uma lâmpada nova;
2.4. Suba na escada;
2.5. Retire a lâmpada velha;
2.6. Coloque a lâmpada nova;
2.7. Se a lâmpada não acender:
2.7.1. Retire a lâmpada;
2.7.2. Coloque uma outra lâmpada;

2.7.3. Se a lâmpada ainda não acender:
2.7.3.1. Retire a lâmpada;
2.7.3.2. Coloque uma outra lâmpada;
(Até quando ficaremos nesses testes???)
Pelo nosso novo algoritmo, caso a nova lâmpada não acenda, devemos trocá-
la novamente e repetir esse procedimento indefinidamente até que uma
lâmpada funcione. Note que não sabemos quantas vezes teremos de repetir
o teste até acharmos uma lâmpada que funcione.
Em casos como esse, devemos utilizar estruturas de repetição. Essas estruturas
definem um fluxo de ações que se repete enquanto uma determinada
situação acontece.
Dessa forma, substituímos nossa sequência indefinida de estruturas de decisão
por uma estrutura de repetição:
1. Ligue o interruptor;
2. Se a lâmpada não acender:
2.1. Pegue uma escada;
2.2. Posicione a escada embaixo da lâmpada;
2.3. Pegue uma lâmpada nova;
2.4. Suba na escada;
2.5. Retire a lâmpada velha;
2.6. Coloque a lâmpada nova.
2.7. Enquanto a lâmpada não acender:
2.7.1. Retire a lâmpada;

2.7.2. Coloque uma outra lâmpada.

Assim, neste novo algoritmo, enquanto a condição definida na linha 2.7 for verdadeira (ou seja, enquanto a lâmpada não acender), as ações definidas em 2.7.1 e 2.7.2 serão repetidas. 

Abstraímos os fatos de ter de descer da escada para pegar uma lâmpada nova e subir novamente.

Resumo

Nesta aula você conheceu o conceito de algoritmo e começou a desenvolver sua lógica de programação a partir de exemplos de algoritmos presentes em nosso cotidiano.

Este é apenas o início dessa grande viagem pelo mundo da programação!

Atividades de aprendizagem

1. Elabore um algoritmo que indique como fazer uma prova. Faça o algoritmo pensando que o aluno não deve deixar questões em branco; assim, deve continuar fazendo a prova enquanto existir questão em branco e o tempo de prova não tiver acabado. 

Além disso, o aluno só deve resolver uma questão se souber resolvê-la, senão pula para a próxima.

2. Suponha que você tenha uma caixa cheia de bolas. Nessa caixa existem bolas azuis e bolas vermelhas. Além disso, você tem também duas caixas vazias.

Vamos chamar a caixa que contém as bolas de “caixa 1” e as duas caixas vazias de “caixa 2” e “caixa 3”. Neste contexto, escreva um algoritmo que defina como tirar todas as bolas da “caixa 1”, colocando as bolas azuis na “caixa 2” e as bolas vermelhas na “caixa 3”.

3. José trabalha no departamento de recursos humanos de uma empresa.

A empresa de José definiu que os salários dos empregados serão aumentados seguindo a seguinte regra: caso o salário seja menor que R$ 1.000,00, o aumento será de 10%; caso contrário, será de 8%. José recebeu uma lista contendo os nomes e salários de todos os funcionários da empresa e foi solicitado que calculasse o novo salário desses funcionários.

Assim, escreva um algoritmo para que José calcule corretamente os novos salários.

4. Desafio de lógica: Três missionários e três canibais encontram-se na margem esquerda de um rio. Nessa margem também existe um bote que pode transportar uma ou duas pessoas.

As seis pessoas pretendem todas passar para a margem direita (usando o bote). No entanto, os missionários têm de arranjar um plano para consegui-lo de modo que, em nenhuma circunstância, existam missionários numa margem em minoria relativamente aos canibais, pois têm receio do que lhes possa acontecer.

Quando o bote chega à margem, os elementos do bote são contados como estando na margem. Assim, se houver apenas um canibal em uma margem, não podemos enviar a essa margem o bote com um canibal e um missionário, pois, ao chegar à outra margem, serão dois canibais contra um missionário.

Lembre-se de que para o bote ir de uma margem a outra é necessário que alguém esteja remando, ou seja, o bote nunca atravessa vazio. Faça um algoritmo que exiba, passo a passo, como efetuar esta travessia de forma segura.

Até  a próxima aula!

Nenhum comentário:

Postar um comentário