1
2
Introdução
Bases Computacionais da Ciência (BC-0005)
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
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)
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
6
Estrutura de Controle Seqüencial
Estruturas de controle permitem o controle do fluxo de
execução dos comandos
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
Temos três estruturas básicas de controle:
Seqüencial
Condicional ou Desvio
Repetição
Os comandos serão
executados na mesma
ordem em que foram
escritos
C1
C2
...
Cn
8
7
Tomando Decisões – Estruturas Condicionais
Estrutura Condicional:
É também conhecida como estrutura de decisão ou seleção
Um desvio condicional é usado para escolher entre cursos
alternativos de ação em um programa
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 Computacionais ou ir à
festa
Para cada decisão, há conseqüências específicas
Estrutura Condicional:
É caracterizada por executar determinados códigos de
programação que dependem da veracidade de uma condição
Estrutura Condicional:
Esta estrutura se subdivide em outras duas estruturas:
Estrutura/desvio condicional simples (se-então)
Estrutura/desvio condicional composta(o) (se-entãosenã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
10
Tomando Decisões: Estrutura Condicional
Composta
No desvio condicional composto, a condição irá determinar qual comando
será executado dentre dois listados
A condição irá determinar a execução, ou
não, de um determinado comando
Então
Exemplo:
Descrição narrativa: SE fizer sol ENTÃO vou à praia
Fluxograma:
Linguagem
Algorítmica
Na estrutura composta
temos:
“Se.....Então.....Senão”.
Senão
SE tempo = Sol ENTÃO
{
Vou à Praia
}
12
11
Tomando Decisões: Estrutura Condicional
Composta
Exemplo:
Descrição Narrativa: SEfizer sol ENTÃO vou à praia SENÃO jogarei
cartas
Fluxograma:
Senão
Então
Linguagem
Algorítmica
SE tempo = sol ENTÃO
{
Vou à praia
}
SENÃO
{
Jogarei cartas
}
RoboMind
13
14
Mapas no RoboMind
Para maiores detalhes de como montar um mapa no RoboMind veja em:
http://www.robomind.net/downloads/RoboMapFormat.pdf
Mapas no RoboMind
Ladrilhos: os ladrilhos são representados por letras maiúsculas
Os ladrilhos existentes são:
Os elementos que podem ser colocados no mapa são:
Ladrilhos/Obstáculos
Balizas/Objetos
Robô
Espaços em branco
Linha branca ou preta
15
16
Mapas no RoboMind
mapaTeste2.map
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)
18
17
Mapas no RoboMind
Traços (Pintar) : Traços podem ser adicionados ao mapa escrevendo uma
lista com os seguintes pares:
(cor, tipo, x , y)
cor = A cor da pintura
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
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
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?
22
21
Estrutura Condicional com o RoboMind
Estrutura Condicional com o RoboMind
Comandos de observação do ambiente podem ser usados em
combinação com estruturas de decisão, para que o robô tome
decisões baseando-se no estado do mundo:
Resumo dos comandos para testar as observações:
se (condição)
{
comandos
}
Comandos são
executados somente se
a CONDIÇÃO for
VERDADEIRA
24
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.irobo
Abra o mapa mapaTeste2.map e execute o programa
testeEsquerda.irobo
Diminua a velocidade de execução e dê um zoom para ver o robô
mais de perto
Estrutura Condicional com o RoboMind
Se você tentar executar esse
programa e a célula da
esquerda não estiver pintada
de branco?
Nada acontece pois o bloco
de código será executado
apenas se aquela célula
estiver pintada de branco
Como resolver esta
situação??
25
26
Expressões Lógicas
Estrutura Condicional com o RoboMind
No arquivo mapaTeste2.map altere a posição do robô para
um local onde não haja marca branca na sua direita
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:
Insira no script testeEsquerda.irobot os comandos a
seguir:
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
senão
{
andarFrente(3)
}
Observe que apenas UM
dos blocos de comandos é
executado
28
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
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
Exercício das Caixas I
30
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
Exercícios
Exercício das Caixas I
31
Exercício das Caixas I
CaixaI.irobo
O programa a seguir tenta fazer com que o robô atravesse o cenário da
esquerda para a direita
virarDireita()
repetir(12)
{
andarLeste(1)
}
mapaCaixasI.map
Esse programa funcionaria se não houvesse as CAIXAS no cenário
Mas se você executar esse programa nesse cenário, o seu
programa ficará parado em frente à primeira caixa
Vamos alterar este programa, para que possamos contornar as caixas
32
Exercício das Caixas I
33
Exercício das Caixas II – Usando sortear()
34
CaixaI.irobo
Neste novo programa o robô
dá um passo de cada vez
e se houver um obstáculo à
frente, ele contorna a caixa
dando um passo para o
norte, dois para o leste, e um
para o sul
Esse programa funciona para
qualquer lugar que você colocar
a caixa no caminho do robô
Altere o programa do “Exercício das Caixas I” para que, quando o
robô encontrar uma caixa:
O robô utilize o comando sortear() para gerar um valor
verdadeiro ou falso
o Caso seja verdadeiro, então o robô deve contornar a
caixa por cima. Ou seja, andar para o Sul
o Caso seja falso, então o robô deve contornar a caixa por
baixo. Ou seja, andar para o Norte
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 a frente
Exercício das Caixas II – Usando sortear()
35
CaixaII_Sortear.irobo
Exercício Desenhando no Chão
36
Abra o mapa openArea.map
Desenvolva um programa no qual o robô comece a pintar em branco
e depois decida em qual das quatro direções vai andar (com
probabilidades iguais)
Sempre quando ele se deparar com uma linha na frente, ele vai pintar
na cor oposta
Por exemplo, quando o robô está diante de uma linha branca, vai
começar a pintar em preto, e vice versa
37
Download

Estruturas Condicionais