Baixe o app para aproveitar ainda mais
Prévia do material em texto
Bases Computacionais da Ciência (BC-0005) Aula 7 - Estruturas de Repetição (laços) David Correa Martins Jr david.martins@ufabc.edu.br Universidade Federal do ABC (UFABC) Introdução Na aula 05: Estudamos os primeiros conceitos de lógica de programação (sequência de instruções) Na aula 06: Estudamos sobre estruturas condicionais e um pouco sobre estruturas de repetição (repeat). Na aula de hoje (aula 07): Veremos mais exemplos com foco em estruturas de repetição. Ilustrando estruturas de repetição repetir(n) { comandos } É usada para REPETIR os comandos entre parênteses n vezes, no qual n é um Parâmetro que CONTROLA o número de vezes que a SEQUÊNCIA de comandos deve ser REPETIDA. Ilustrando estruturas de repetição O que faz o programa? O que faz o programa? Ilustrando estruturas de repetição O que faz o programa? O que faz o programa? A PRIMEIRA estrutura de repetição controla o NÚMERO de VEZES que o percurso do QUADRADO será feito, e a SEGUNDA estrutura controla a REPETIÇÃO de COMANDOS necessária para PERCORRER o QUADRADO. Observe que a sequência andarFrente(1) e virarEsquerda() será executada OITO vezes. Ao executar esse programa, os COMANDOS que estão entre CHAVES serão executados QUATRO vezes. Percorre o QUADRADO DUAS VEZES, usando DUAS estruturas de repetição, uma dentro da outra. Ilustrando estruturas de repetição O que faz o programa? Se você quiser deixar o robô percorrendo esse quadrado indefinidamente, você pode usar o comando repetir() sem argumentos: O robô fica percorrendo o QUADRADO até que a execução do programa seja terminada. Estruturas de repetição Essa estrutura trabalha com a repetição de comandos até que condições se satisfaçam; Os comandos contidos neste tipo de estrutura podem não ser executados nenhuma vez, já que o mesmo testa a condição no início da estrutura. Descrição Narrativa: Enquanto não fizer sol: → ficarei em casa. ≠ Estruturas de repetição repetirEnquanto(condição) { comandos } repetir(9) { comandos } Na estrutura repetir, a sequência de comandos é repetida um NÚMERO de VEZES n PRÉ-DEFINIDO, independentemente do estado do ambiente. Na estrutura repetirEnquanto, o robô EXECUTA a AÇÃO ENQUANTO sua PERCEPÇÃO do AMBIENTE avaliada pela CONDIÇÃO for VERDADEIRA. Estruturas de repetição O que o programa faz? Estruturas de repetição Faz com que o robô siga uma linha em branco pintada no chão. O que o programa faz? Exercício 1 Abrir o mapa openArea.map Crie um programa para desenhar um quadrado de lado 4, repetindo apenas 3 instruções Exercício 1 Abrir o mapa openArea.map Crie um programa para desenhar um quadrado de lado 4, repetindo apenas 3 instruções repetir(4) { pintarBranco() andarFrente(3) virarDireita() } Exercício 2 Considere ainda o mapa openArea.map Crie um programa para desenhar quatro quadrados contíguos de lado 4. Exercício 2 Considere ainda o mapa openArea.map Crie um programa para desenhar quatro quadrados contíguos de lado 4. pintarBranco() repetir(4) { repetir(4){ andarFrente(3) virarDireita() } virarEsquerda() } Exercício 3 Baixe o mapa linha-branca.map (Tidia). Crie um programa para que o robô contorne a linha branca: Uma vez; Quatro vezes; Indefinidamente. Exercício 3 Baixe o mapa linha-branca.map (Tidia). Crie um programa para que o robô contorne a linha branca: Uma vez; andarFrente(3) virarDireita() andarFrente(2) virarDireita() andarFrente(6) virarDireita() andarFrente(2) virarDireita() andarFrente(3) Exercício 3 Baixe o mapa linha-branca.map (Tidia). Crie um programa para que o robô contorne a linha branca: Quatro vezes; repetir(4) { andarFrente(3) virarDireita() andarFrente(2) virarDireita() andarFrente(6) virarDireita() andarFrente(2) virarDireita() andarFrente(3) } Exercício 3 Baixe o mapa linha-branca.map (Tidia). Crie um programa para que o robô contorne a linha branca: Indefinidamente repetir() { andarFrente(3) virarDireita() andarFrente(2) virarDireita() andarFrente(6) virarDireita() andarFrente(2) virarDireita() andarFrente(3) } Exercício 4 Baixe os mapas linha-branca.map e linha-branca2.map(Tidia). Crie um programa para que o robô contorne a linha branca Indefinidamente. O mesmo programa deve funcionar para ambos os mapas! Exercício 4 Baixe os mapas linha-branca.map e linha-branca2.map(Tidia). Crie um programa para que o robô contorne a linha branca Indefinidamente. O mesmo programa deve funcionar em ambos os mapas! repetir() { se(brancoDireita) { andarFrente(1) } senão { virarDireita andarFrente(1) } } Exercício 5 Abrir o mapa default.map. Crie um programa para que o robô se movimente até o começo da linha branca e continue o percurso da linha branca. Utilize estruturas condicionais e de repetição! virarDireita() andarFrente(7) Exercício 5 Abrir o mapa default.map. Crie um programa para que o robô se movimente até o começo da linha branca e continue o percurso da linha branca. Utilize estruturas condicionais e de repetição! virarDireita() andarFrente(7) repetir() { se(brancoFrente()) { andarFrente(1) } se(brancoEsquerda()) { virarEsquerda() } se(brancoDireita()) { virarDireita() } se(temObstáculoFrente()) { fim } } Exercício 6 Considere ainda o mapa default.map Crie um programa para que o robô se movimente sem parar no mapa. Se achar algum obstáculo, vire para qualquer lado. Exercício 6 Considere ainda o mapa default.map Crie um programa para que o robô se movimente sem parar no mapa. Se achar algum obstáculo, vire para qualquer lado. repetir() { se(temObstáculoFrente()) { se(sortear()) { virarDireita() } senão { virarEsquerda() } } senão { andarFrente(1) } } Exercício 7 Considere o mapa espiral1.map (Tidia). Crie um programa para levar o robô do ponto inicial até o ponto branco. Exercício 7 Considere o mapa espiral1.map (Tidia). Crie um programa para levar o robô do ponto inicial até o ponto branco. repetirEnquanto(não brancoFrente()) { se(vazioFrente()) { andarFrente(1) } senão { se(vazioEsquerda()) { virarEsquerda() } senão se(vazioDireita()) { virarDireita() } } } andarFrente(1) Exercício 8 Considere o mapa espiral2.map. Crie um programa para levar o robô do ponto inicial até o ponto branco. Exercício 8 Considere o mapa espiral2.map. Crie um programa para levar o robô do ponto inicial até o ponto branco. O programa feito para o exercício 7 funciona aqui! :-) (isso se você considerou o caso vazio à esquerda) repetirEnquanto(não brancoFrente()) { se(vazioFrente()) { andarFrente(1) } senão { se(vazioEsquerda()) { virarEsquerda() } senão se(vazioDireita()) { virarDireita() } } } andarFrente(1) Exercício 8 repetirEnquanto(não brancoFrente()) { CaminharNaEspiral() } andarFrente(1) procedimento CaminharNaEspiral() { se(vazioFrente()) { andarFrente(1) } senão { se(vazioEsquerda()) { virarEsquerda() } senão se(vazioDireita()) { virarDireita() } } } Uso de procedimentos →Exercício 9 Conside o mapa espiral3.map. Crie um programa para que o robô pegue o objeto e coloque-o na posição inicial de onde partiu o robô. O ponto inicial está indicado por um ponto branco Exercício 9 repetirEnquanto(não temObjetoEsquerda()) { CaminharNaEspiral() } virarEsquerda() pegar() virarDireita() virarDireita() repetirEnquanto(não brancoFrente()) { CaminharNaEspiral() } soltar() Conside o mapa espiral3.map. Crie um programa para que o robô pegue o objeto e coloque-o na posição inicial de onde partiu o robô. O ponto inicial está indicado por um ponto branco Exercício 10 Faça um programa para que o robô, no ambiente dado pelo mapa openArea.map, pinte linhas brancas aleatórias no chão (random walk) e pare somente quando o robô se posicionar em um cruzamento de linhas. Use os comandos andarNorte, andarSul, andarLeste, andarOeste. Para facilitar, nesse exercício não é necessário evitar que o robô trombe nas paredes do mapa. Exercício 10 pintarBranco() repetir(){ se (sortear()){ se (sortear()){ andarNorte(1) } senão { andarSul(1) } } senão { se (sortear()){ andarLeste(1) } senão { andarOeste(1) } } se (brancoDireita()){ se (brancoEsquerda()){ fim } } } Condição de parada Exercício 11 Utilize o mapa: openArea.map. Robô Faxineiro: Robô que limpa e desinfeta. - Considere que o robô limpa com o pincel branco, e desinfeta com o pincel preto. - Faça um programa que, de forma automática (usando laços e condicionais), limpe e desinfete todo o ambiente. - Seu programa deve funcionar para qualquer mapa retângular M X N, sendo M e N maiores ou iguais a 3. Exercício 11 virarEsquerda() repetirEnquanto(vazioFrente()){ andarFrente(1) } virarEsquerda() repetirEnquanto(vazioFrente()){ andarFrente(1) } virarEsquerda() Primeiramente, posicionando o robô no canto inferior esquerdo: E no slide seguinte, o robô faz a faxina de fato Exercício 11 repetir(){ pintarBranco() repetirEnquanto(não temObstáculoFrente()){ andarFrente(1) } virarEsquerda() virarEsquerda() pintarPreto() repetirEnquanto(não temObstáculoFrente()){ andarFrente(1) } se (temObstáculoDireita()){ fim } pararPintar() virarDireita() andarFrente(1) virarDireita() } Condição de parada Teste com outros mapas abertos de tamanhos diferentes! Atividades para casa ● Capítulo 8 do livro – Slides da aula 7 (referentes ao capítulo 8 do livro) ● Tidia, seção Repositório – Estudar e fazer os exercícios ● Capítulo 9 do livro – Slides da aula 8 (referentes ao capítulo 9 do livro) ● Tidia, seção Repositório – Estudar e fazer os exercícios Slide 1 Introdução Slide 3 Slide 4 Slide 6 Introdução Slide 8 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Exercício Slide 17 Slide 19 Slide 21 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37
Compartilhar