Bases Computacionais da Ciência (BC-0005)
Lógica de Programação: Estruturas Condicionais
Maria das Graças Bruno Marietto graca.marietto@ufabc.edu.br
Centro de Matemática, Computação e Cognição (CMCC) Universidade Federal do ABC (UFABC)
Introdução
Em um computador, um conjunto de instruções pode compreender:
Operações aritméticas que encontramos em uma
calculadorasimples: Soma
Multiplicação Divisão Subtração
Até instruçõesutilizadas para tomar decisões
Ler dadosa partir do teclado Gravaresses dados no disco, etc
Introdução
Aprender a programar não é uma tarefa trivial:
Pois envolve manipularuma representação abstratado
mundo real, criada dentro do computador:
Aprender as questõesrelativas à linguagemque 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çãoe sequência de instruções
3
Objetivos da Aula
Objetivos desta aula:
Apresentaremos um conceito mais elaborado: As estruturas condicionais
Estruturas
Estruturas de controle permitem o controle do fluxo deexecução dos comandos
Temos três estruturas básicas de controle:
Seqüencial
Condicional ou Desvio Repetição
Estrutura de Controle Seqüencial
Estrutura SeqüencialÉpadrãoem toda a forma de algoritmo:
Seqüênciaonde o computador irá ler os comandos de cima para baixo, e da esquerdapara 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
Tomando Decisões – Estruturas Condicionais
Estrutura Condicional:
É também conhecida como estrutura de decisãoou seleção Um desvio condicional é usado para escolher entre cursos alternativos de ação em um programa
7
Estrutura Condicional:
É caracterizadapor executar determinados códigos de programação que dependemda veracidadede uma condição
Tomando Decisões – Estruturas Condicionais
O nosso cotidianoé repleto de tomadas de decisões: Você deve decidirentre ir à universidadede carroou
bicicleta
Estudarpara a disciplina de Bases Computacionaisou ir à festa
Para cada decisão, há conseqüências específicas
Estrutura Condicional:
Esta estrutura se subdivideem outras duas estruturas: Estrutura/desvio condicional simples (se-então)
Estrutura/desvio condicional composta(o) (se-então-senão)
Tomando Decisões: Estrutura Condicional Simples
No desvio condicional simplesuma condição é avaliadae, se o resultado for verdadeiro, um conjunto de instruções é executado
Acondição irá determinar a execução, ou não, de um determinado comando
Exemplo:
Descrição narrativa: SEfizer sol ENTÃOvou à praia Fluxograma:
SE tempo = Sol ENTÃO {
Vou à Praia }
Linguagem Algorítmica
Tomando Decisões: Estrutura Condicional
Composta
No desvio condicional composto, a condição irá determinar qual comando será executado dentre dois listados
Na estrutura composta
temos:
“Se...Então...Senão”.
Então
Senão
Tomando Decisões: Estrutura Condicional
Composta
Exemplo:
Descrição Narrativa: SEfizer sol ENTÃOvou à praia SENÃO jogarei cartas
Fluxograma:
11
Linguagem Algorítmica
SE tempo = sol ENTÃO { Vou à praia } SENÃO { Jogarei cartas } Então Senão 12
RoboMind
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
Mapas no RoboMind
Ladrilhos: os ladrilhos são representados por letras maiúsculasOs ladrilhos existentes são:
Mapas no RoboMind
15mapaTeste2.map
Mapas no RoboMind
Espaço: para inserirespaç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)
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
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á
19
Estrutura Condicionais com o RoboMind
O RoboMind tem comandospara 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áculona célula? (ladrilho)
A célula está vazia?
Tem um objetona célula? (baliza) A célula está pintada de branco? A célula está pintada de preto?
Estrutura Condicional com o RoboMind
Resumo dos comandosparatestar as observações:
Estrutura Condicional com o RoboMind
Comandos de observação do ambiente podem ser usadosem
combinaçãocom estruturas de decisão, para que o robô tome
decisõesbaseando-se no estado do mundo:
se (condição) { comandos } Comandos são executados somente se a CONDIÇÃO for VERDADEIRA
Estrutura Condicional com o RoboMind
O que faz o programa a seguir?
23
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.mape 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
24Se 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??
Estrutura Condicional com o RoboMind
Você pode usar uma variaçãodessa estrutura de controle para instruir o robô a realizar uma atividade alternativa, caso a
condição NÃOseja 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
Expressões Lógicas
No arquivo mapaTeste2.mapaltere a posição do robô para
um local onde não haja marca branca na sua direita
Insira no script testeEsquerda.irobotos comandos a
seguir: senão { andarFrente(3) }
Expressões Lógicas
A condiçãodo comando SEé, na verdade, uma expressão lógica
que pode assumir os valores VERDADEIROou FALSO, dependendo do estado do cenário
Expressões lógicas:
Também podem envolver combinaçãode 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
27
Expressões Lógicas
O conectivo Ecompara duas expressões lógicas e o resultado é VERDADEIROapenas se as DUASforem VERDADEIRASO conectivo OUcompara duas expressões e o resultado da expressão é VERDADEIROse qualqueruma das DUAS, ou AMBAS, forem VERDADEIRAS
Exercícios
Exercício das Caixas I
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 semudarmos a caixa de posição, o programa perde a utilidade
Exercício das Caixas I
31O programa a seguir tenta fazer com que o robô atravesse o cenário da esquerda para a direita
virarDireita() repetir(12) {
andarLeste(1) }
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 mapaCaixasI.map
Exercício das Caixas I
32Neste 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ô
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
CaixaI.irobo
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
verdadeirooufalso
o Caso seja verdadeiro, então o robô deve contornar a caixa por cima. Ou seja, andar para o Sul
o Caso sejafalso, então o robô deve contornar a caixa por baixo. Ou seja, andar para o Norte
Exercício das Caixas II – Usando
sortear()
35CaixaII_Sortear.irobo
Exercício Desenhando no Chão
Abra o mapaopenArea.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