estruturas condicionais

41
Bases Computacionais da Ciência (BC- 0005) 1 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)

Upload: marcella-cafe

Post on 25-Sep-2015

286 views

Category:

Documents


4 download

DESCRIPTION

Estruturas Condicionais

TRANSCRIPT

  • Bases Computacionais da Cincia (BC-0005)

    1

    Lgica de Programao: Estruturas Condicionais

    Maria das Graas Bruno [email protected] 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

    2

  • 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

    3

  • Objetivos da Aula

    Objetivos desta aula:

    Apresentaremos um conceito mais elaborado:

    As estruturas condicionais

    4

  • Estruturas

    Estruturas de controle permitem o controle do fluxo de execuo dos comandos

    Temos trs estruturas bsicas de controle:

    Seqencial

    Condicional ou Desvio

    Repetio

    5

  • 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

    6

    Os comandos sero executados na

    mesma ordem em que foram escritos

    C1C2...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

    7

    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)

    8

  • 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

    9

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

    SE tempo = Sol ENTO{

    Vou Praia}

    Linguagem Algortmica

  • Tomando Decises: Estrutura Condicional Composta

    No desvio condicional composto, a condio ir determinar qual comando ser executado dentre dois listados

    10

    Na estrutura composta temos: Se.....Ento.....Sen

    o.

    Ento

    Seno

  • Tomando Decises: Estrutura Condicional Composta

    Exemplo:

    Descrio Narrativa: SE fizer sol ENTO vou praia SENO jogarei cartas.

    Fluxograma:

    11

    Linguagem Algortmica

    SE tempo = sol ENTO{

    Vou praia}SENO{

    Jogarei cartas}

    Ento

    Seno

  • 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 so:

    Ladrilhos/Obstculos

    Balizas/Objetos

    Rob

    Espaos em branco

    Linha branca ou preta

    13

  • Mapas no RoboMind Ladrilhos: os ladrilhos so representados por letras maisculas

    Os ladrilhos existentes so:

    14

  • Mapas no RoboMind15

    mapaTeste2.map

  • 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)

    16

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

    y = a posio vertical onde a linha comea

    17

  • 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)

    18

  • 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

    19

  • 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?

    20

  • Estrutura Condicional com o RoboMind

    Resumo dos comandos para testar as observaes:

    21

  • 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:

    22

    se (condio){

    comandos}

    Comandos so executados somente se a CONDIO for

    VERDADEIRA

  • Estrutura Condicional com o RoboMind

    O que faz o programa a seguir?

    23

    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

  • Estrutura Condicional com o RoboMind

    24

    Se voc tentar executar esse programa e a clula da esquerda no estiver

    pintada de branco?

    Nada acontece pois o bloco de cdigo ser executado apenas se aquela clula estiver

    pintada de branco

    Como resolver esta situao??

  • 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:

    25

    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

  • 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)}

    26

  • 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

    E

    Ou

    27

  • 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

    28

  • Expresses Lgicas Insira o script a seguir no RoboMind

    29

    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

    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

    Vamos alterar o programa conforme o script a seguir:repetir(10){ se

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

  • 35

    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

    repetir(10){ se

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

  • 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

  • Atividades para Casa

    Exerccios:

    Propostos (1-7): Pgina 164;

    Para Casa (1-8): Pginas 164-165.

    41

    Slide 1IntroduoIntroduoObjetivos da AulaEstruturasEstrutura de Controle SeqencialTomando Decises Estruturas CondicionaisTomando Decises Estruturas CondicionaisTomando Decises: Estrutura Condicional SimplesTomando Decises: Estrutura Condicional CompostaTomando Decises: Estrutura Condicional CompostaSlide 12Mapas no RoboMindMapas no RoboMindMapas no RoboMindMapas no RoboMindMapas no RoboMindMapas no RoboMindSeguir o Rob ou No?Estrutura Condicionais com o RoboMindEstrutura Condicional com o RoboMindEstrutura Condicional com o RoboMindEstrutura Condicional com o RoboMindEstrutura Condicional com o RoboMindEstrutura Condicional com o RoboMindExpresses LgicasExpresses LgicasExpresses LgicasExpresses LgicasSlide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Atividades para Casa