Sie sind auf Seite 1von 41

1

Bases Computacionais da Cincia (BC-


0005)

Lgica de Programao: Estruturas


Condicionais

Maria das Graas Bruno Marietto


graca.marietto@ufabc.edu.br
Centro de Matemtica, Computao e Cognio (CMCC)
Universidade Federal do ABC (UFABC)

Introduo

Em um computador um conjunto de instrues pode compreender:

Operaes aritmticas que encontramos em uma calculadora


simples:
Soma
Multiplicao
Diviso
Subtrao

At instrues utilizadas para tomar decises

Ler dados a partir do teclado

Gravar esses dados no disco

Etc

Introduo
Aprender a programar no uma tarefa trivial:
Pois envolve manipular uma representao abstrata do

mundo real, criada dentro do computador:


Aprender as questes relativas linguagem que

est sendo usada para criar os programas e a lgica


de programao em si
No captulo anterior:
Vimos os primeiros conceitos de Lgica de

Programao:
Instruo e sequncia de instrues

Objetivos da Aula
Objetivos desta aula:
Apresentaremos um conceito mais elaborado:
As estruturas condicionais

Estruturas
Estruturas de controle permitem o controle do fluxo de

execuo dos comandos


Temos trs estruturas bsicas de controle:
Seqencial
Condicional ou Desvio
Repetio

Estrutura de Controle Seqencial

Estrutura Seqencial

padro em toda a forma de algoritmo:


Seqncia onde o computador ir ler os comandos de cima para

baixo, e da esquerda para direita

Uma estrutura seqencial um conjunto de comandos que sero


executados em uma seqncia linear, de cima para baixo

Os comandos sero
executados na
mesma ordem em
que foram escritos

C1
C2
...
Cn

Tomando Decises Estruturas Condicionais


Estrutura Condicional:
tambm conhecida como de deciso ou seleo
Um desvio condicional usado para escolher entre cursos

alternativos de ao em um programa

Estrutura Condicional:
caracterizada por executar determinados cdigos de

programao que dependem da veracidade de uma


condio

Tomando Decises Estruturas Condicionais


O nosso cotidiano repleto de tomadas de decises:
Voc deve decidir entre ir universidade de carro ou

bicicleta
Estudar para a disciplina de Bases ou ir festa
Para cada deciso, h conseqncias especficas
Estrutura Condicional:
Esta estrutura se subdivide em outras duas estruturas:
Estrutura/desvio condicional simples (se-ento)
Estrutura/desvio condicional composta(o) (se-ento-

seno)

Tomando Decises: Estrutura Condicional


Simples
No desvio condicional simples uma condio
avaliada e, se o resultado for verdadeiro, um conjunto
de instrues executado
A condio ir determinar a execuo ou no de um
determinado comando

Exemplo:
Descrio narrativa: SE fizer sol ENTO vou praia
Fluxograma:

Linguagem
Algortmica SE tempo = Sol
ENTO
{
Vou Praia
}

10

Tomando Decises: Estrutura Condicional


Composta

No desvio condicional composto, a condio ir determinar qual comando


ser executado dentre dois listados

Ento

Seno

Na estrutura composta

temos:
Se.....Ento.....Sen
o.

11

Tomando Decises: Estrutura Condicional


Composta
Exemplo:
Descrio Narrativa: SE fizer sol ENTO vou praia

SENO jogarei cartas.


Fluxograma:
Ent
o

Sen
o

Linguagem
Algortmica

SE tempo = sol
ENTO
{
Vou praia
}
SENO
{
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 so:
Ladrilhos/Obstculos
Balizas/Objetos
Rob
Espaos em branco
Linha branca ou preta

14

Mapas no RoboMind

Ladrilhos: os ladrilhos so representados por letras maisculas

Os ladrilhos existentes so:

15

Mapas no RoboMind
mapaTeste2.map

16

Mapas no RoboMind

Espao: para inserir


espaos em branco
basta deixar um espao
livro no arquivo *.map

Objeto/Baliza: o
caracter * (asterisco)
insere um objeto/baliza
no arquivo mapa

Incio do rob: utilize


o caracter @ (arroba)

17

Mapas no RoboMind

Traos (Pintar) : Traos 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 posio horizontal onde a linha comea

y = a posio vertical onde a linha comea

18

Mapas no RoboMind

Linhas horizontais e verticais ocupam exatamente dois blocos

Um ponto ocupa um bloco

No exemplo duas linhas so 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 direo x da esquerda para a direita, a direo y de cima para baixo

Observe que o curso da lista deve comear imediatamente depois de pintar e


no so permitidos espaos em branco (espaos, tabulaes, linhas de
quebra)

19

Seguir o Rob ou No?


Comando Exibir-> Acompanhar Rob
Caso esta opo tenha sido selecionada, a execuo

da simulao ir focar no movimento do rob. Sendo


assim, no ser possvel analisar uma outra rea do
mapa onde o rob no esteja. Voc pode tentar
arrastar o mapa para tal posio, mas ele voltar para
o local onde est o rob
Sem a opo de rastreamento o sistema mostra

qualquer local do mapa, mesmo naqueles onde o rob


no est

20

Estrutura Condicionais com o


RoboMind
O RoboMind tem comandos para observar o ambiente, para que os seus
programas possam tomar decises baseando-se no estado do ambiente

O rob pode observar as clulas da:

Esquerda

Direita

Frente

As observaes podem ser de cinco tipos diferentes:

Existe um obstculo na clula? (ladrilho)

A clula est vazia?

Tem um objeto na clula? (baliza)

A clula est pintada de branco?

A clula est pintada de preto?

21

Estrutura Condicional com o


RoboMind

Resumo dos comandos para testar as observaes:

22

Estrutura Condicional com o


RoboMind
Comandos de observao do ambiente podem ser usadas
em combinao com estruturas de deciso para que o
rob tome decises baseando-se no estado do mundo:
se (condio)
{
comandos
}

Comandos so
executados somente
se a CONDIO for
VERDADEIRA

23

Estrutura Condicional com o


RoboMind
O que faz o programa a seguir?
Observa a clula da
esquerda e, se ela
estiver pintada de
branco, repinta a clula
de preto, voltando a sua
posio

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 execuo 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 clula
da esquerda no estiver
pintada de branco?

bloco de cdigo ser


executado apenas se
aquela clula estiver
pintada de branco

Como resolver esta


situao??

25

Estrutura Condicional com o


RoboMind
Voc pode usar uma variao dessa estrutura de controle para instruir o rob
a realizar uma atividade alternativa, caso a condio NO seja verdadeira:

se (condio)
{comandos}
seno
{comandos}
Nesse caso, caso SE a clula
esteja pintada de branco, o rob
ir pint-la de preto e voltar a sua
posio
anterior.
CASO
CONTRRIO, o rob ir andar
trs posies para a frente e
parar

Observe que apenas


UM dos blocos de
comandos executado

26

Expresses Lgicas
No arquivo mapaTeste2.map altere a posio do rob

para um local onde no haja marca branca na sua direita

Insira no script testeEsquerda.irobot os comandos


a seguir:

seno
{
andarFrente(3)
}

27

Expresses Lgicas

A condio do comando SE , na verdade, uma expresso lgica que pode


assumir os valores VERDADEIRO ou FALSO, dependendo do estado do
cenrio

Expresses lgicas:

Tambm podem envolver combinao de expresses simples atravs do


uso de conectivos lgicos

O RoboMind dispe de trs conectivos lgicos:

No

Ou

28

Expresses Lgicas

O conectivo E compara duas expresses lgicas e o resultado


VERDADEIRO apenas se as DUAS forem VERDADEIRAS

O conectivo OU compara duas expresses e o resultado da expresso


VERDADEIRO se qualquer uma das DUAS, ou AMBAS, forem
VERDADEIRAS

29

Expresses Lgicas

Insira o script a seguir no RoboMind

se(sortear() e no
brancoEsquerda())
{
virarEsquerda()
andarFrente(1)
pintarPreto()
pararPintar()
andarTrs(1)
virarDireita()
}
seno
{
andarFrente(3)
}

Abra um mapa onde o rob ser

inicializado em um local que no


haja marca branca na esquerda
Execute algumas vezes o
programa e veja quantas vezes
o trecho do cdigo SE foi
executado
E quantas vezes o trecho do
cdigo ENTO foi executado
Explique este comportamento
do programa

30

Exerccio

31

Neste exerccio iremos fazer com que o rob tome decises

para contornar os obstculos sua frente


Vamos criar um cenrio em que o rob deve se mover em linha
reta da esquerda para a direita, mas com um obstculo frente.
O arquivo para a criao do mapa para esse cenrio est a
seguir:

32

O caminho a ser percorrido pelo rob para esse mapa pode ser
visto na figura abaixo. A princpio poderamos usar uma estratgia
parecida com a da aula passada, e programar o caminho na mo,
e passando pelos pontos que contornam a caixa. Entretanto, essa
abordagem no muito flexvel, pois se mudarmos a caixa de
posio, o programa perde a utilidade

33

O programa a seguir faz com que o rob atravesse o cenrio da

esquerda para a direita


O comando repetir(11) tem por objetivo repetir o comando
andarLeste(1) onze vezes
Esse programa funcionaria se no houvesse a CAIXA no
cenrio, mas se voc executar esse programa nesse cenrio, 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 execuo da

simulao

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 obstculo
na frente ele contorna a
caixa dando um passo
para o norte, dois para o
leste, e um para o sul
Observe que o nmero
de vezes em que a
sequncia repetida foi
diminuda para 10 pois o
rob d dois passos
para a frente quando
est contornando a
caixa

se
(temObstculoFrente())
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
seno
{
andarLeste(1)
}
}

35

repetir(10)
{
se
(temObstculoFrente())
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
seno
{
andarLeste(1)
}
}

Esse programa funciona

para qualquer lugar que


voc colocar a caixa no
caminho do rob
Isto porque a posio da
caixa no est codificada
diretamente no cdigo,
mas ela encontrada
testando-se se h um
obstculo frente
Experimente mudar a
posio da caixa no
cenrio para se certificar
disso

36

A mesma estrutura do programa


funciona mesmo que existam duas
caixas separadas no cenrio
Vamos test-lo agora num cenrio
com duas caixas, que pode ser
construdo usando a descrio do
mapa mostrada na figura a seguir
Para percorrer esse cenrio voc
pode usar o programa ao lado

repetir(9)
{
se
(temObstculoFrente(
))
{
andarNorte(1)
andarLeste(2)
andarSul(1)
}
seno
{
andarLeste(1)
}
}

37

Novamente, no importa a posio


das caixa no caminho do rob
(desde que elas no estejam
juntas), pois o rob ir verificar a
posio delas testando se h um
obstculo a frente.

38

Faa 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 trs posies e escolhe
aleatoriamente uma direo (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)
}
seno
{
andarOeste(3)
andarSul(3)
andarLeste(3)
}
pararPintar()

40

Atividades para Casa

41

Atividades para Casa


Exerccios:
Propostos (1-7): Pgina 164;
Para Casa (1-8): Pginas 164-165.

Das könnte Ihnen auch gefallen