1
Bases Computacionais da Ciência (BC-
0005)
Lógica de Programação: Estruturas
Condicionais
Maria das Graças Bruno Marietto
[email protected]
Centro de Matemática, Computação e Cognição (CMCC)
Universidade Federal do ABC (UFABC)
2
Introdução

Em um computador um conjunto de instruções pode compreender:

Operações aritméticas que encontramos em uma calculadora
simples:
 Soma
 Multiplicação
 Divisão
 Subtração

Até instruções utilizadas para tomar decisões

Ler dados a partir do teclado

Gravar esses dados no disco

Etc
3
Introdução
 Aprender a programar não é uma tarefa trivial:
 Pois envolve manipular uma representação abstrata do
mundo real, criada dentro do computador:
 Aprender as questões relativas à linguagem que
está sendo usada para criar os programas e a lógica
de programação em si
 No capítulo anterior:
 Vimos os primeiros conceitos de Lógica de
Programação:
 Instrução e sequência de instruções
4
Objetivos da Aula
 Objetivos desta aula:
 Apresentaremos um conceito mais elaborado:
 As estruturas condicionais
5
Estruturas
 Estruturas de controle permitem o controle do fluxo de
execução dos comandos
 Temos três estruturas básicas de controle:
 Seqüencial
 Condicional ou Desvio
 Repetição
6
Estrutura de Controle Seqüencial

Estrutura Seqüencial

É padrão em toda a forma de algoritmo:
 Seqüência onde o computador irá ler os comandos de cima para
baixo, e da esquerda para direita

Uma estrutura seqüencial é um conjunto de comandos que serão
executados em uma seqüência linear, de cima para baixo
Os comandos serão
executados na
mesma ordem em
que foram escritos
C1
C2
...
Cn
7
Tomando Decisões – Estruturas Condicionais
 Estrutura Condicional:
 É também conhecida como de decisão ou seleção
 Um desvio condicional é usado para escolher entre cursos
alternativos de ação em um programa
 Estrutura Condicional:
 É caracterizada por executar determinados códigos de
programação que dependem da veracidade de uma
condição
8
Tomando Decisões – Estruturas Condicionais
 O nosso cotidiano é repleto de tomadas de decisões:
 Você deve decidir entre ir à universidade de carro ou
bicicleta
 Estudar para a disciplina de Bases ou ir à festa
 Para cada decisão, há conseqüências específicas
 Estrutura Condicional:
 Esta estrutura se subdivide em outras duas estruturas:
 Estrutura/desvio condicional simples (se-então)
 Estrutura/desvio condicional composta(o) (se-então-
senão)
9
Tomando Decisões: Estrutura Condicional
Simples
No desvio condicional simples uma condição é
avaliada e, se o resultado for verdadeiro, um conjunto
de instruções é executado
A condição irá determinar a execução ou não de um
determinado comando
 Exemplo:
 Descrição narrativa: SE fizer sol ENTÃO vou à praia
 Fluxograma:
Linguagem
Algorítmica SE tempo = Sol
ENTÃO
{
Vou à Praia
}
10
Tomando Decisões: Estrutura Condicional
Composta

No desvio condicional composto, a condição irá determinar qual comando
será executado dentre dois listados
Então
Senão
 Na estrutura composta
temos:
 “Se.....Então.....Sen
ão”.
11
Tomando Decisões: Estrutura Condicional
Composta
 Exemplo:
 Descrição Narrativa: SE fizer sol ENTÃO vou à praia
SENÃO jogarei cartas.
 Fluxograma:
Ent
ão
Senã
o
Linguagem
Algorítmica
SE tempo = sol
ENTÃO
{
Vou à praia
}
SENÃO
{
Jogarei cartas
}
12
RoboMind
13
Mapas no RoboMind
 Para maiores detalhes de como montar um mapa no
RoboMind veja em: http://
www.robomind.net/downloads/RoboMapFormat.pdf
 Os elementos que podem ser colocados no mapa são:
 Ladrilhos/Obstáculos
 Balizas/Objetos
 Robô
 Espaços em branco
 Linha branca ou preta
14
Mapas no RoboMind

Ladrilhos: os ladrilhos são representados por letras maiúsculas

Os ladrilhos existentes são:
15
Mapas no RoboMind
mapaTeste2.map
16
Mapas no RoboMind

Espaço: para inserir
espaços em branco
basta deixar um espaço
livro no arquivo *.map

Objeto/Baliza: o
caracter * (asterisco)
insere um objeto/baliza
no arquivo mapa

Início do robô: utilize
o caracter @ (arroba)
17
Mapas no RoboMind

Traços (Pintar) : Traços podem ser adicionados ao mapa escrevendo uma
lista com os seguintes pares:


cor = A cor da pintura


(cor, tipo, x , y)
Pode ser somente w ou b, respectivamente branco e preto
tipo = A forma da linha

. = um ponto

− = uma linha horizontal para a direita

| = uma linha vertical para baixo

x = a posição horizontal onde a linha começa

y = a posição vertical onde a linha começa
18
Mapas no RoboMind

Linhas horizontais e verticais ocupam exatamente dois blocos

Um ponto ocupa um bloco

No exemplo duas linhas são definidas:

{ (w, -, 2, 2,) , (b, . , 2, 3) }

uma linha horizontal em x = 2, y = 2, e um ponto preto em x = 2, y = 3

O canto superior esquerdo da tela é x = 0 e y = 0

A direção x é da esquerda para a direita, a direção y é de cima para baixo

Observe que o curso da lista deve começar imediatamente depois de pintar e
não são permitidos espaços em branco (espaços, tabulações, linhas de
quebra)
19
Seguir o Robô ou Não?
 Comando Exibir-> Acompanhar Robô
 Caso esta opção tenha sido selecionada, a execução
da simulação irá focar no movimento do robô. Sendo
assim, não será possível analisar uma outra área do
mapa onde o robô não esteja. Você pode tentar
arrastar o mapa para tal posição, mas ele voltará para
o local onde está o robô
 Sem a opção de rastreamento o sistema mostra
qualquer local do mapa, mesmo naqueles onde o robô
não está
20

Estrutura Condicionais com o
RoboMind
O RoboMind tem comandos para observar o ambiente, para que os seus
programas possam tomar decisões baseando-se no estado do ambiente


O robô pode observar as células da:

Esquerda

Direita

Frente
As observações podem ser de cinco tipos diferentes:

Existe um obstáculo na célula? (ladrilho)

A célula está vazia?

Tem um objeto na célula? (baliza)

A célula está pintada de branco?
 A célula está pintada de preto?
21
Estrutura Condicional com o
RoboMind
 Resumo dos comandos para testar as observações:
22

Estrutura Condicional com o
RoboMind
Comandos de observação do ambiente podem ser usadas
em combinação com estruturas de decisão para que o
robô tome decisões baseando-se no estado do mundo:
se (condição)
{
comandos
}
Comandos são
executados somente
se a CONDIÇÃO for
VERDADEIRA
23

Estrutura Condicional com o
RoboMind
O que faz o programa a seguir?
Observa a célula da
esquerda e, se ela
estiver pintada de
branco, repinta a célula
de preto, voltando a sua
posição



Digite estes comandos no RoboMind e salve-o com o nome
testeEsquerda.irobot
Altere o arquivo mapaTeste2.map para inicializar o robô ao lado
direito da marca branca
Execute o script testeEsquerda.irobot. Diminua a velocidade
de execução e dê um zoom para ver o robô mais de perto
24
Estrutura Condicional com o
RoboMind
Nada acontece pois o
Se você tentar executar
esse programa e a célula
da esquerda não estiver
pintada de branco?
bloco de código será
executado apenas se
aquela célula estiver
pintada de branco
Como resolver esta
situação??
25

Estrutura Condicional com o
RoboMind
Você pode usar uma variação dessa estrutura de controle para instruir o robô
a realizar uma atividade alternativa, caso a condição NÃO seja verdadeira:
se (condição)
{comandos}
senão
{comandos}
Nesse caso, caso SE a célula
esteja pintada de branco, o robô
irá pintá-la de preto e voltar a sua
posição
anterior.
CASO
CONTRRIO, o robô irá andar
três posições para a frente e
parar
Observe que apenas
UM dos blocos de
comandos é executado
26
Expressões Lógicas
 No arquivo mapaTeste2.map altere a posição do robô
para um local onde não haja marca branca na sua direita

Insira no script testeEsquerda.irobot os comandos
a seguir:
senão
{
andarFrente(3)
}
27
Expressões Lógicas

A condição do comando SE é, na verdade, uma expressão lógica que pode
assumir os valores VERDADEIRO ou FALSO, dependendo do estado do
cenário

Expressões lógicas:


Também podem envolver combinação de expressões simples através do
uso de conectivos lógicos
O RoboMind dispõe de três conectivos lógicos:

Não

E

Ou
28
Expressões Lógicas

O conectivo E compara duas expressões lógicas e o resultado é
VERDADEIRO apenas se as DUAS forem VERDADEIRAS

O conectivo OU compara duas expressões e o resultado da expressão é
VERDADEIRO se qualquer uma das DUAS, ou AMBAS, forem
VERDADEIRAS
29
Expressões Lógicas

Insira o script a seguir no RoboMind
se(sortear() e não
brancoEsquerda())
{
virarEsquerda()
andarFrente(1)
pintarPreto()
pararPintar()
andarTrás(1)
virarDireita()
}
senão
{
andarFrente(3)
}
 Abra um mapa onde o robô será
inicializado em um local que não
haja marca branca na esquerda
 Execute algumas vezes o
programa e veja quantas vezes
o trecho do código SE foi
executado
 E quantas vezes o trecho do
código ENTÃO foi executado
 Explique este comportamento
do programa
30
Exercício
31
 Neste exercício iremos fazer com que o robô tome decisões
para contornar os obstáculos à sua frente
 Vamos criar um cenário em que o robô deve se mover em linha
reta da esquerda para a direita, mas com um obstáculo à frente.
O arquivo para a criação do mapa para esse cenário está a
seguir:
32
O caminho a ser percorrido pelo robô para esse mapa pode ser
visto na figura abaixo. A princípio poderíamos usar uma estratégia
parecida com a da aula passada, e programar o caminho “na mão”,
e passando pelos pontos que contornam a caixa. Entretanto, essa
abordagem não é muito flexível, pois se mudarmos a caixa de
posição, o programa perde a utilidade
33
 O programa a seguir faz com que o robô atravesse o cenário da
esquerda para a direita
 O comando repetir(11) tem por objetivo repetir o comando
andarLeste(1) onze vezes
 Esse programa funcionaria se não houvesse a CAIXA no
cenário, mas se você executar esse programa nesse cenário, o
seu programa ficará parado em frente à caixa
 Execute este programa e veja o que ocorre
 Dê um zoom no robô e diminua a velocidade de execução da
simulação
34
 Vamos alterar o programa conforme o script a seguir:
repetir(10)
 Neste script o robô dá
{
um passo de cada vez, e
se houver um obstáculo
na frente ele contorna a
caixa dando um passo
para o norte, dois para o
leste, e um para o sul
 Observe que o número
de vezes em que a
sequência é repetida foi
diminuída para 10 pois o
robô dá dois passos
para a frente quando
está́ contornando a
caixa
se
(temObstáculoFrente())
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
senão
{
andarLeste(1)
}
}
35
repetir(10)
{
se
(temObstáculoFrente())
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
senão
{
andarLeste(1)
}
}
 Esse programa funciona
para qualquer lugar que
você colocar a caixa no
caminho do robô
 Isto porque a posição da
caixa não está codificada
diretamente no código,
mas ela “é encontrada”
testando-se se há um
obstáculo à frente
 Experimente mudar a
posição da caixa no
cenário para se certificar
disso
36



A mesma estrutura do programa
funciona mesmo que existam duas
caixas separadas no cenário
Vamos testá-lo agora num cenário
com duas caixas, que pode ser
construído usando a descrição do
mapa mostrada na figura a seguir
Para percorrer esse cenário você
pode usar o programa ao lado
repetir(9)
{
se
(temObstáculoFrente(
))
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
senão
{
andarLeste(1)
}
}
37
Novamente, não importa a posição
das caixa no caminho do robô
(desde que elas não estejam
juntas), pois o robô irá verificar a
posição delas testando se há um
obstáculo a frente.
38
 Faça um programa para que o robô, no ambiente dado pelo
mapa openArea.map, pinte de branco um quadrado do
seguinte modo:
 O robô anda para frente três posições e escolhe
aleatoriamente uma direção (esquerda ou direita)
 Depois conclui a pintura segundo esta escolha
 Execute o programa algumas vezes e observe quando
ocorreu o sorteio. Quantas vezes ele fez o quadrado para
cada lado?
39
pintarBranco()
andarNorte(3)
se (sortear())
{
andarLeste(3)
andarSul(3)
andarOeste(3)
}
senão
{
andarOeste(3)
andarSul(3)
andarLeste(3)
}
pararPintar()
40
Atividades para Casa
41
Atividades para Casa
 Exercícios:
 Propostos (1-7): Página 164;
 Para Casa (1-8): Páginas 164-165.
Download

Bases Computacionais da Ciência (BC- 0005)