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