Livro Bases Computacionais Parte II

107
6 L´ogica de Programa¸ ao: Vari´ aveis e Estruturas Seq¨ uenciais Harlen Costa Batagelo Jo˜ ao Paulo Gois Let´ ıcia Rodrigues Bueno Luiz Carlos da Silva Rozante Ronaldo Cristiano Prati —– Universidade Federal do ABC 6.1 Introdu¸c˜ ao Nesta etapa do curso, apresentamos conceitos b´ asicos de desenvolvimento de programas para serem executados em dispositivos computacionais, como o computador. O desenvolvimento desses programas envolve uma maneira espec´ ıfica de pensar e planejar estrat´ egias para que esses dispositivos possam ser usados para resolver problemas. Resolu¸c˜ ao de problemas ´ e a habilidade de formular problemas, pensar criativamente em solu¸c˜ oes e express´a-las de maneira clara e precisa, a fim de que, se e quando nos depararmos novamente com o mesmo problema, podemos seguir a descri¸c˜ ao da solu¸c˜ ao como uma receita ou, neste caso, delegar a sua execu¸c˜ ao a um dispositivo (normalmente o computador) que ir´ a executar as instru¸ c˜oes. Essa maneira de pensar e resolver problemas computacionalmente com- bina e integra algumas caracter´ ısticas de diferentes ´areas como matem´ atica, engenharia e ciˆ encias naturais. Da matem´atica, usamos um formalismo para representar id´ eias (particularmente quando envolvendo computa¸c˜ ao). Da en- genharia, a maneira de projetar coisas, juntar componentes em sistemas mai- ores e avaliar e decidir quando temos que ponderar diferentes alternativas. Das ciˆ encias naturais, a habilidade de observar o comportamento de sistemas complexos, formular modelos e hip´oteses e testar predi¸c˜oes. Aprender a desenvolver programas ´ e uma excelente oportunidade para praticar habilidades de resolu¸c˜ ao de problemas. Mostramos aqui como atri- buir instru¸ c˜oes a um computador, de maneira que ele possa nos auxiliar a resolver problemas. Para isto precisamos de dois ingredientes: lingua- gem e l´ogica. Neste cap´ ıtulo, apresentamos tamb´ em, atrav´ es de situa¸c˜ oes do dia-a-dia, como intuitivamente delegamos tarefas prescrevendo instru¸ c˜oes ou realizamos tarefas seguindo instru¸ c˜oes em uma ordem l´ ogica de modo a 145

description

Analise Computacional da Linguagem numa perspectiva moderna.

Transcript of Livro Bases Computacionais Parte II

  • 6 Logica de Programacao: Variaveis e Estruturas Sequenciais

    Harlen Costa Batagelo

    Joao Paulo Gois

    Letcia Rodrigues Bueno

    Luiz Carlos da Silva Rozante

    Ronaldo Cristiano Prati

    Universidade Federal do ABC

    6.1 Introducao

    Nesta etapa do curso, apresentamos conceitos basicos de desenvolvimentode programas para serem executados em dispositivos computacionais, comoo computador. O desenvolvimento desses programas envolve uma maneiraespecfica de pensar e planejar estrategias para que esses dispositivos possamser usados para resolver problemas. Resolucao de problemas e a habilidadede formular problemas, pensar criativamente em solucoes e expressa-las demaneira clara e precisa, a fim de que, se e quando nos depararmos novamentecom o mesmo problema, podemos seguir a descricao da solucao como umareceita ou, neste caso, delegar a sua execucao a um dispositivo (normalmenteo computador) que ira executar as instrucoes.

    Essa maneira de pensar e resolver problemas computacionalmente com-bina e integra algumas caractersticas de diferentes areas como matematica,engenharia e ciencias naturais. Da matematica, usamos um formalismo pararepresentar ideias (particularmente quando envolvendo computacao). Da en-genharia, a maneira de projetar coisas, juntar componentes em sistemas mai-ores e avaliar e decidir quando temos que ponderar diferentes alternativas.Das ciencias naturais, a habilidade de observar o comportamento de sistemascomplexos, formular modelos e hipoteses e testar predicoes.

    Aprender a desenvolver programas e uma excelente oportunidade parapraticar habilidades de resolucao de problemas. Mostramos aqui como atri-buir instrucoes a um computador, de maneira que ele possa nos auxiliara resolver problemas. Para isto precisamos de dois ingredientes: lingua-gem e logica. Neste captulo, apresentamos tambem, atraves de situacoesdo dia-a-dia, como intuitivamente delegamos tarefas prescrevendo instrucoesou realizamos tarefas seguindo instrucoes em uma ordem logica de modo a

    145

  • resolver problemas. Utilizamos estes exemplos como motivacao para intro-duzir os conceitos basicos de logica de programacao. No objetivo de auxiliarna ilustracao dos conceitos apresentados, utilizamos ao longo dos Captulos5, 6 e 7 uma ferramenta chamada RoboMind1. Neste aplicativo, o obje-tivo e controlar um robo virtual atraves da prescricao de instrucoes, usandouma linguagem que contem varios elementos de logica de programacao. Aofinal do captulo, exemplificamos os mesmos conceitos em uma linguagemde programacao de proposito mais geral chamado Scilab. O estudo e odesenvolvimento de programas mais elaborados e deixado para o curso deProcessamento na Informacao.

    6.2 Delegando tarefas - O Conceito de Instrucao

    Em nosso cotidiano, a todo momento, costumamos delegar tarefas em formade instrucoes:

    (i) Voce chega faminto a uma lanchonete e faz um pedido de uma refei-cao: um lanche, um suco e uma sobremesa. Tambem solicita que sejapreparada com urgencia, pois esta faminto. Se a refeicao for prepa-rada como voce gostaria, a instrucao foi bem dada e a lanchonete (aexecutora da instrucao) foi eficiente.

    (ii) Para voce nao perder o horario, voce ja instruiu algum equipamentoque possui a funcao de despertador (relogio cuco, telefone celular, radio-relogio). Se voce ajustou corretamente o horario e o volume sonoro altoo suficiente para voce acordar, voce despertara.

    Estes sao exemplos de como costumamos delegar tarefas por prescreverinstrucoes. No primeiro caso, as instrucoes foram dadas atraves de comu-nicacao oral na Lngua Portuguesa, enquanto no segundo foram instrucoesespecficas para o equipamento adotado.

    As instrucoes diferem de acordo com as funcionalidades que o equipa-mento e capaz de oferecer. Por exemplo, uma campainha tem a unica funcaode ser tocada. Em uma calculadora simples, as instrucoes correspondem a`soperacoes aritmeticas de soma, subtracao, multiplicacao e divisao. Ja emum aparelho de televisao, dentre as diversas instrucoes que podem haver,normalmente, estao os comandos de avancar/retroceder o canal, aumentar/-diminuir o volume e a funcao liga/desliga. Em todos os casos, temos umconjunto de instrucoes especficas basicas que sao as acoes fundamentais queo equipamento e capaz de realizar.

    1disponvel em http://www.robomind.net/

    146

  • 6.3 Sequencia de Instrucoes - Estruturas

    Sequenciais

    Nem sempre as instrucoes basicas sao capazes de resolver um problema. Nessecaso, instrucoes podem ser compostas de modo a produzir resultados quenao poderiam ser obtidos com apenas uma unica instrucao. Por exemplo,voce pode combinar com algum morador da sua casa que se a campainhafor tocada tres vezes seguidas, com um intervalo de aproximadamente doissegundos entre cada toque, e voce que esta na porta e ela pode ser abertapor quem estiver dentro da casa.

    Vamos agora ver um exemplo um pouco mais computacional. Suponhaque desejamos calcular o resto da divisao de 9 por 2 usando uma calculadoraque possui as operacoes de soma, subtracao, multiplicacao e divisao, mas naopossui a operacao de resto da divisao. Voce, sendo um aluno astuto, pensouna seguinte solucao:

    1. Dividir 9, o dividendo, por 2, o divisor, obtendo o resultado 4,5;

    2. Considerar apenas a parte inteira do resultado, ou seja, 4;

    3. Multiplicar a parte inteira do resultado pelo divisor, obtendo 42 = 8;4. Subtrair o dividendo pelo resultado da multiplicacao anterior, isto e,

    9 8 = 1, que e o resultado esperado.

    Assim, conseguimos obter o resto da divisao entre dois numeros usandouma composicao das operacoes de multiplicacao, subtracao e divisao. De fato,nao apenas a operacao de resto da divisao, mas uma infinidade de operacoesmais complexas pode ser obtida atraves da composicao de operacoes simples.

    A sequencia de instrucoes importa?

    A ordem em que uma sequencia de instrucoes e executada pode alterar oresultado obtido. Por exemplo, quando voce pede a refeicao na lanchonete,voce nao espera que o garcom traga a sobremesa antes do lanche. Outroexemplo em que a ordem e importante e no caso de, antes de executar a acaode vestir seu calcado, primeiro voce executa a acao de vestir a meia.

    Mas nem sempre a ordem das instrucoes importa. Por exemplo, usandoainda o exemplo da calculadora, se desejamos calcular o resultado da expres-sao 1 + 1 2, podemos calcular primeiramente 1 + 1 e entao subtrair 2 doresultado. Mas tambem podemos calcular 12 em primeiro lugar e so entaosomar 1 ao resultado. O resultado sera o mesmo neste caso, nao importa a

    147

  • ordem das operacoes. Entretanto, as expressoes (1 + 1) 2 e 1 + (1 2), naqual apenas os parenteses foram modificados, nao sao equivalentes, ja que(1 + 1) 2 = 4 e 1+ (1 2) = 3. Assim, em geral, alem de saber quais instru-coes devemos utilizar, devemos saber exatamente qual a ordem em que essasinstrucoes serao executadas.

    Ilustrando instrucao e sequencia de instrucoes com RoboMind

    Vamos exemplificar o conceito de instrucao e sequencia de instrucoes usandoRoboMind. O objetivo do RoboMind e criar um programa para que o roboexecute alguma tarefa. O robo tem algumas instrucoes basicas tais como:

    se mover;

    marcar (pintar) o chao;

    observar o ambiente; e

    pegar um objeto.

    As instrucoes para o robo podem ser dadas via controle remoto ou es-crevendo um programa com comandos. Vamos primeiro experimentar comocontrolar o robo usando o controle remoto. No programa RoboMind, abra ocontrole remoto (ExecutarControle Remoto) e experimente movimentar orobo. Na Figura 6.1 e apresentada uma janela do RoboMind com o controleremoto aberto.

    Observe que na parte de cima do controle remoto tem alguns botoes comsetas para fazer o robo se mover para cima, baixo, direita e esquerda. Odesenho simbolizando um alvo faz o robo voltar para a posisao inicial nocenario. Experimente usar os botoes direcionais para movimentar o robo noambiente. Observe que logo abaixo dos botoes, a` medida que voce moveo robo, vao aparecendo os comandos associados aos movimentos que vocemandou o robo executar atraves do controle remoto.

    Observe bem os comandos que sao gerados a` medida que o robo se mo-vimenta. Quando se pressiona seta para cima (), aparece o comando2andarFrente(1), o que faz com que o robo ande um passo para frente. Domesmo modo, quando se pressiona seta para baixo (), aparece o comandoandarTras(1), que faz o robo andar um passo para tras. As setas para adireita () e para a esquerda () fazem com que o robo vire 90para a direita

    2Se a interface do RoboMind nao estiver em portugues, voce pode trocar a lngua emFileSettings e selecionar o portugues como idioma.

    148

  • Figura 6.1: Janela do RoboMind com o controle remoto aberto.

    ou esquerda, exibindo os comandos virarEsquerda() e virarDireita(),respectivamente.

    Usando o controle remoto, tente fazer com que o robo percorra um qua-drado andando um passo a frente e virando a` esquerda, ate voltar para suaposicao inicial. Para fazer isso, voce provavelmente deve ter usado a sequen-cia de comandos ,,,,,,,, o que gerou o seguinte programa:

    1 andarFrente (1)

    2 virarEsquerda ()

    3 andarFrente (1)

    4 virarEsquerda ()

    5 andarFrente (1)

    6 virarEsquerda ()

    7 andarFrente (1)

    8 virarEsquerda ()

    Ao inves de usar o controle remoto, vamos agora instruir o robo a per-correr o mesmo quadrado usando comandos. Para fazer isso, voce pode usara mesma sequencia de comandos que foi gerada quando voce usou o con-trole remoto. Feche o controle remoto e coloque essa sequencia de comandosna janela de comandos, do lado esquerdo do cenario, como mostrado na Fi-gura 6.2, e execute o programa clicando em executar, na parte inferior dajanela. Se tudo estiver certo, o robo deve percorrer um quadrado e voltara` posicao inicial, como aconteceu anteriormente quando usamos o controleremoto.

    149

  • Figura 6.2: Janela do RoboMind com comandos para o robo percorrer umquadrado.

    Agora, imagine que ao inves de percorrer o quadrado andando um unicopasso para a frente, voce quer que o robo de dois passos antes de cada viradaa` esquerda. Utilizando o controle remoto, isso pode ser feito clicando em,,,,,,,,,,,, o que levaria ao seguinte programa:

    1 andarFrente (1)

    2 andarFrente (1)

    3 virarEsquerda ()

    4 andarFrente (1)

    5 andarFrente (1)

    6 virarEsquerda ()

    7 andarFrente (1)

    8 andarFrente (1)

    9 virarEsquerda ()

    10 andarFrente (1)

    11 andarFrente (1)

    12 virarEsquerda ()

    Voce ja deve ter notado que existe uma diferenca entre as instrucoes deandar e virar. Nos comandos andarFrente e andarTras, entre os paren-teses existe o numero 1, o que nao ocorre nos comandos virarEsquerda evirarDireita. Se voce intuiu que esse numero esta relacionado ao tama-nho do passo que o robo anda, voce esta certo! Para fazer o robo andarum quadrado no qual ele da dois passos antes de virar a` esquerda, ao in-ves de repetir duas vezes o comando andarFrente(1), voce pode substituir

    150

  • por andarFrente(2). O numero entre parenteses e chamado argumento ouparametro da instrucao andarFrente(n), no qual n e uma variavel que re-presenta o valor que deve ser atribudo ao parametro da instrucao. Dessamaneira, para fazer com que o robo percorra um quadrado de lado dois, vocepode usar o seguinte programa:

    1 andarFrente (2)

    2 virarEsquerda ()

    3 andarFrente (2)

    4 virarEsquerda ()

    5 andarFrente (2)

    6 virarEsquerda ()

    7 andarFrente (2)

    8 virarEsquerda ()

    Veja que, em termos praticos, esse programa tem o mesmo funcionamentodo programa anterior, mas usa menos instrucoes. Escrever instrucoes parece,a princpio, mais trabalhoso do que usar o controle remoto. Entretanto, uti-lizando o controle remoto, voce esta limitado aos comandos embutidos nosbotoes exibidos na interface do programa RoboMind, enquanto a linguagempor tras proporciona muito mais flexibilidade! Alem disso, voce pode arma-zenar o programa em um arquivo, e executa-lo quantas vezes voce quiser,ao passo que com o controle remoto, se quiser percorrer um novo quadrado,voce teria que repetir toda a sequencia de botoes. Alem desses comandosde movimento, o RoboMind tem tambem os comandos andarNorte(n),andarSul(n), andarLeste(n) e andarOeste(n), nos quais n e um parametroque pode ser usado da mesma maneira que andarFrente(n). Experimenteusa-los para percorrer o ambiente.

    Alem dos comandos para movimentar o robo no ambiente, o RoboMindprove comandos para o robo interagir com o ambiente com acoes como pintaro chao de branco ou preto e pegar a baliza do chao. Apos executar a instru-cao pintarBranco() (ou pintarPreto()), para cada movimento do robo,o caminho que o robo passou e pintado de branco (preto, respectivamente).Para parar de pintar, e preciso dar a instrucao pararPintar(). A seguir, oprograma desenha um quadrado branco (preto, respectivamente) no chao:

    1 pintarBranco ()

    2 andarFrente (1)

    3 virarEsquerda ()

    4 andarFrente (1)

    5 virarEsquerda ()

    6 andarFrente (1)

    7 virarEsquerda ()

    8 andarFrente (1)

    9 virarEsquerda ()

    151

  • 10 pararPintar ()

    Os comandos pegar() e soltar() servem para pegar e soltar a baliza,respectivamente. O comando pegar() so funciona se a baliza estiver na celulaimediatamente a` frente e o robo nao estiver carregando nenhuma baliza. Ocomando soltar() coloca a baliza na celula imediatamente a` frente, casonao tenha nenhum obstaculo nessa celula.

    6.4 Exerccios para Sala de Aula

    Exerccio resolvido

    Vamos agora realizar um exerccio completo passo-a-passo, para que vocepossa praticar depois resolvendo outros problemas e treinar logica de progra-macao. Para realizacao deste exerccio, considere que:

    O sentido nortesul equivale ao eixo Y e o sentido lesteoeste equivaleao eixo X.

    O ponto (0,0) e a origem.

    Vamos primeiro criar um mapa, que sera o cenario para o nosso robo.Abra um programa de edicao de texto, como o Notepad, e inserir as linhasapresentadas na Figura 6.3. Observe que as linhas que comecam com #saoos comentarios, e nao precisam ser inseridas; logo a seguir, a partir da linhade comando map, estao representadas os caracteres para desenhar o mapa.

    Quando voce terminou de definir o seu mapa voce deve salva-lo com umnome que voce escolher, mas com a extensao .mapao inves da extensao.txt. Agora, inicie o RoboMind para testar o seu mapa. E so clicar emArquivo Abrir mapa. Na Figura 6.4 e mostrada a visualizacao do mapadentro do RoboMind.

    O objetivo desse exercsio e programar o robo para ir ate as coordenadas:(3,-2), (2, 3), (-3, 1), considerando que cada uma das coordenadas acima queo robo parar, sera a nova origem. Antes do programar o robo, vamos tentarentender melhor o problema para planejar como iremos resolve-lo, analisandoas seguintes perguntas:

    a) Represente as coordenadas em um plano cartesiano, como mostrado naFigura 6.5.

    b) Qual a coordenada final em relacao a` origem?

    c) Que rota o robo realizou?

    152

  • Figura 6.3: Criacao do cenario para o RoboMind

    Figura 6.4: Visualizacao do mapa criado dentro do RoboMind

    Primeiro passo Fazer o mapa: um tabuleiro de 11 por 7 casas, conformeilustrado a seguir; onde o posicao inicial do Robo e a posicao P0, e o Robodevera percorrer os seguintes pontos P1, P2 e P3.

    153

  • Figura 6.5: Representacao de um plano cartesiano

    P3P2

    P0

    P1

    Segundo passo Inserir os comandos no Robomind, utilizando os comandosdisponveis, para que o robo percorre os pontos solicitados. Como nao epossvel andar na diagonal, voce deve passar por pontos intermediarios antesde chegar a`s coordenadas solicitadas no problema. Trace um possvel caminhoque passe por esses pontos e tente imaginar os comandos para percorrer essecaminho. Uma possvel resposta e mostrada na Figura 6.6.

    Terceiro passo Executar o programa. Para executar o programa, voce deveclicar no botao executar, mostrado na Figura 6.7. O robo deve percorrer ocaminho indicado na Figura 6.8, e parar na posicao final.

    Exerccios propostos

    Caro aluno, para que voce possa desenvolver a logica de programacao e im-portante que voce tente primeiro construir os programas sem o auxlio daferramenta Controle Remoto do RoboMind.

    154

  • Figura 6.6: Uma possvel resposta para o exerccio de percorrer os tres pontos

    Figura 6.7: Controle de execucao do programa

    Figura 6.8: Um possvel caminho para o exerccio de percorrer os tres pontos

    155

  • 1. Acesse o RoboMind e teste os programas vistos na secao anterior.

    2. Escreva um programa para que o robo pinte a letra E no chao.

    3. E possvel construir um programa diferente daquele que voce fez noexerccio anterior e que faz a mesma coisa? Se sim, entao faca-o; senao, entao justifique. Obs.: vamos assumir que dois programas saodiferentes se suas sequencias de instrucoes nao sao identicas.

    4. Escreva um programa para que o robo desenhe um alvo, isto e, pintecrculos (aqui na verdade quadrados) concentricos em preto e brancoalternadamente. Faca de tal modo que a mosca (centro) seja umponto preto e que haja seis quadrados a` sua volta.

    5. Escreva um programa que faca com que o robo escreva o seu nome nochao.

    6. Similarmente ao exerccio anterior, escreva um programa para que orobo escreva o seu primeiro nome no chao, mas agora alternando ascores das letras com preto e branco. Comece com a primeira letrasendo branca.

    7. No ambiente dado pelo mapa padrao (default.map), observe o ambi-ente em que o robo esta e escreva um programa em que o robo busca abaliza mais proxima e a coloca no ponto de partida.

    8. Faca um programa para que o robo, no ambiente dado pelo mapa pa-drao (default.map), pegue a baliza mais proxima e a coloque junto damais distante. Seu programa deve ter no maximo 7 instrucoes.

    6.5 Exerccios com o Robomind

    1. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map, agrupe todas as balizas junto a`quela que esta maisdistante da posicao inicial do robo.

    2. Similarmente ao exerccio anterior, escreva um programa para que orobo escreva o seu nome inteiro no chao, mas agora alternando as coresdas letras com preto e branco. Comece com a primeira letra sendopreta.

    156

  • 3. Faca um programa para que o robo, no ambiente dado pelo mapapassBeacons.map, saia da posicao inicial (salao a` esquerda) e va para oponto marcado em branco no salao a` direita. Ao final as balizas devemestar na mesma posicao inicial.

    4. Usando os recursos que voce ja apreendeu do RoboMind, e possvelconstruir um programa que faca com que o robo pinte de preto a ce-lula a` sua esquerda, caso ela esteja pintada de branco? Se sim, facaesse programa; se nao, justifique porque nao e possvel: quais recursosseriam necessarios para isso?

    5. Faca os exerccios indicados na secao 6.7.

    6.6 Ilustrando os conceitos aprendidos com o

    Scilab

    Neste captulo, vimos varios exemplos de como prescrevemos instrucoes paraexecutar determinadas tarefas. Nesta secao, veremos como o computadorpode nos auxiliar na resolucao de problemas usando o Scilab.

    O primeiro problema a resolver e o calculo da area A, do permetro Pe diagonal D de um quadrado de lado x = 3 unidades de medida (u.m.).Como sabemos, a area A = x2, o permetro P = 4x e a diagonal D =

    2x.

    Agora ja temos todas as informacoes matematicas necessarias para resolver oproblema no computador. Resta conhecer a linguagem que o Scilab utilizapara resolver este problema para nos. A esta conversa escrita, daremos onome de codigo-fonte. A seguir, apresentamos nosso primeiro codigo-fonteem Scilab para resolver o problema descrito.

    1 x = 3;

    2 A = x*x

    3 P = 4*x

    4 D = sqrt (2)*x

    Este codigo-fonte deve ser digitado em um arquivo em formato textousando um editor tal como o Bloco de Notas do Microsoft Windows, gEditdo Gnome-Linux ou o proprio editor presente no Scilab (SciNotes), quepode ser acessado pelo primeiro cone da janela do Scilab (Figura 6.9). Ocodigo anterior, por exemplo, foi digitado no SciNotes (Figura 6.10) e salvocom o nome quadrado.sce, em que sce e a extensao padrao do Scilab.

    Para executarmos as instrucoes contidas no nosso codigo-fonte, devemosusar o comando exec no console do Scilab, do seguinte modo:

    157

  • Figura 6.9: Console do Scilab: Icone para abrir o SciNotes (Figura 6.10).

    Figura 6.10: Janela do SciNotes para editar o codigo-fonte.

    exec("quadrado.sce");

    Outra forma de executar o programa e atraves do menu Arquivo/Executar,selecionando o arquivo quadrado.sce. A execucao do programa anterior geracomo resposta

    A =

    4.

    P =

    8.

    D =

    2.8284271

    Em cada uma das linhas do codigo que acabamos de executar, existe aomenos uma das letras x,A,P e D, que sao as variaveis do nosso problema. Por

    158

  • exemplo, na Linha 1 (x=3;), atribumoso valor 3 a` variavel x ou, em outraspalavras, armazenamos o valor 3 na variavel x. Isto e, estamos considerandoque o lado de nosso quadrado e de comprimento de 3 u.m. Podemos ler aLinha 1 por o valor 3 e atribudo a x, ou x recebe 3.

    Na Linha 2 (A=x*x), realizamos a operacao x2 para, em seguida, atribuireste resultado a` variavel A. A Linha 3 e executada de forma analoga. Observeque na Linha 4 aparece a instrucao sqrt(2), que significa

    2. Na verdade,

    poderamos calcular a raz quadrada de qualquer numero n no lugar de 2.

    6.6.1 Entrada e sada

    Agora queremos executar novamente o programa anterior, so que para umquadrado de lado x = 5. A forma mais imediata de se fazer esta tarefa emodificando a Linha 1, substituindo o 3 por 5. E que tal deixar que ousuario do seu programa decida o comprimento a ser inserido? Experimentesubstituir a Linha 1 pela seguinte instrucao:

    x = input("Entre com o comprimento do lado do quadrado: ");

    Salve o programa e execute-o. O programa aguardara que o usuario entrecom o tamanho do lado. Experimente entrar com o valor 5, seguido da teclaenter. Voce tera algo como:

    Entre com o comprimento do lado do quadrado: 5

    A =

    25.

    P =

    20.

    D =

    7.0710678

    Dizemos entao que seu programa tem como entrada, via teclado, o valorda variavel x e, como sada no monitor, as variaveis A,P e D. Vamos tornara sada mais amigavel. As variaveis A,P e D estao sendo mostradas porqueomitimos o ponto-e-vrgula no final das Linhas 2, 3 e 4. Vamos inserir ponto-e-vrgula no final de cada uma destas linhas e acrescentar uma nova instrucao:

    1 x = input("Entre com o comprimento do lado do quadrado: ");

    2 A = x*x;

    159

  • 3 P = 4*x;

    4 D = sqrt (2)*x;

    5 printf("A area e %f\nO permetro e %f\nA diagonal e %f",A,P,D

    );

    A sada deste programa, para a entrada x = 5, sera:

    Entre com o comprimento do lado do quadrado: 5

    A area e 25.000000

    O permetro e 20.000000

    A diagonal e 7.071068

    O comando printf e uma instrucao de sada formatada. Por exemplo,os caracteres \n formatam a sada de modo que ela pule para a proximalinha. Experimente tirar os \n e confira o que acontece. Ja os caracteres %fformatam a sada de variaveis para representacao em ponto flutuante (umsubconjunto dos numeros reais). Observe que existem tres ocorrencias doscaracteres %f, uma para cada uma das variaveis A,P e D, respectivamente.Substituindo o %f por %d, a sada das variaveis sera formatada para os nu-meros inteiros:

    Entre com o comprimento do lado do quadrado: 5

    A area e 25

    O permetro e 20

    A diagonal e 7

    6.7 Exerccios com o Scilab

    1. Acesse o Scilab e teste os exemplos vistos na secoes anteriores.

    2. Fazer um programa que:

    Leia do teclado 5 numeros inteiros em ordem crescente represen-tando cada um a idade de um indivduo.

    Em relacao a estas idades, calcule e escreva: media, mediana,moda, desvio padrao e variancia.

    3. A conversao de graus Fahrenheit para Celsius e dada pela expressao

    C =F 321.8

    160

  • e a conversao de graus Kelvin para graus Celsius e dada por

    C = k 273.15.

    Fazer um programa que calcule e escreva duas tabelas: uma de grausCelsius em funcao de graus Fahrenheit e outra de Celsius em funcao degraus Kelvin. Ambos graus Fahrenheit e Kelvin variam de 50 a 60 de1 em 1. Seu programa deve tambem apresente um grafico de linha quemostra a relacao entre graus Celsius, Fahrenheit e Kelvin.

    4. Agora voce quer construir um programa que leia do teclado o seu por-centual x de aproveitamento na disciplina de Bases Computacionais daCiencia e calcule seu conceito final, segundo a seguinte tabela:

    Se x < 45%, seu conceito e F;

    Caso contrario, se x 45% e x < 50%, seu conceito e D; Caso contrario, se x 50% e x < 70%, seu conceito e C; Caso contrario, se x 70% e x < 85%, seu conceito e B; Caso contrario, seu conceito e A.

    Isso e possvel com os recursos que voce ja viu do Scilab? Se sim, facaesse programa; se nao, justifique porque nao e possvel: quais recursosseriam necessarios para isso?

    161

  • 7 Logica de Programacao: Estruturas Condicionais

    Harlen Costa Batagelo

    Joao Paulo Gois

    Letcia Rodrigues Bueno

    Luiz Carlos da Silva Rozante

    Ronaldo Cristiano Prati

    Universidade Federal do ABC

    7.1 Introducao

    Em um computador, o conjunto de instrucoes pode compreender desde asoperacoes aritmeticas que encontramos em uma calculadora simples, ate ins-trucoes utilizadas para tomar decisoes, repetir a execucao de sequencias deoutras instrucoes, ler dados a partir do teclado, gravar esses dados no disco,envia-los pela rede ou exibi-los no monitor, produzir sons, entre muitas ou-tras. Aprender a programar nao e uma tarefa trivial, pois envolve manipularuma representacao abstrata do mundo real, criada dentro do computador;aprender as questoes relativas a` linguagem que esta sendo usada para criaros programas e a logica de programacao em si. No captulo anterior, vimosos primeiros conceitos de logica de programacao: instrucao e sequencia deinstrucoes. Neste captulo, apresentamos um conceito mais elaborado: asestruturas condicionais.

    7.2 Tomando decisoes - Estruturas Condicionais

    O nosso cotidiano e repleto de tomadas de decisoes. Voce deve decidir entreir a` universidade de carro ou de bicicleta, ou entre estudar para a disciplinade Bases ou ir a` festa. Para cada decisao, ha consequencias especficas.

    Voce pode estabelecer as tomadas de decisoes com base em regras. Porexemplo, voce esta jogando par-ou-mpar com seu amigo. Se a soma dosdedos apresentados por voce e seu amigo for par, voce ganha, caso contra-rio, seu amigo ganha. Um outro exemplo de tomada de decisoes baseadaem regras pode ser aplicado na definicao do seu conceito final da disciplinade Bases Computacionais da Ciencia. Seja x a porcentagem final que voceconseguiu no curso:

    162

  • Se x < 45%, seu conceito e F;

    Caso contrario, se x 45% e x < 50%, seu conceito e D; Caso contrario, se x 50% e x < 70%, seu conceito e C; Caso contrario, se x 70% e x < 85%, seu conceito e B; Caso contrario, seu conceito e A.

    Ilustrando estruturas condicionais com RoboMind

    O RoboMind tambem tem comandos para observar o ambiente, para que oseus programas possam tomar decisoes baseando-se no estado do ambiente.O robo pode observar as celulas da esquerda, direita e a frente. Essas obser-vacoes podem ser de cinco tipos diferentes: existe um obstaculo na celula?; acelula esta vazia?; tem um objeto na celula?; a celula esta pintada de branco?;e a celula esta pintada de preto? Um resumo dos comandos para testar essasobservacoes esta na Tabela 7.1.

    esquerda frente direitatemObstaculoEsquerda() temObstaculoFrente() temObstaculoDireita()

    vazioEsquerda() vazioFrente() vazioDireita()

    temObjetoEsquerda() temObjetoFrente() temObjetoDireita()

    brancoEsquerda() brancoFrente() brancoDireita()

    pretoEsquerda() pretoFrente() pretoDireita()

    Tabela 7.1: Comandos de observacao do ambiente.

    Esses comandos de observacao do ambiente podem ser usadas em com-binacao com estruturas de decisao para que o robo tome decisoes baseando-seno estado do mundo. Uma dessas estrutures e o se (condic~ao) {comandos},que executa a sequencia de comandos somente se a condicao for verdadeira.O programa a seguir, por exemplo, observa a celula da esquerda e, se elaestiver pintada de branco, repinta a celula de preto, voltando a` sua posicao.

    1 se(brancoEsquerda ()){

    2 virarEsquerda ()

    3 andarFrente (1)

    4 pintarPreto ()

    5 pararPintar ()

    6 andarTras (1)

    7 virarDireita ()

    8 }

    163

  • Se voce tentar executar esse programa e a celula da esquerda nao estiverpintada de branco, nada acontece pois o bloco de codigo sera executado ape-nas se aquela celula estiver pintada de branco. Voce pode usar uma variacaodessa estrutura de controle para instruir o robo a realizar uma atividade al-ternativa, caso a condicao nao seja verdadeira: se (condic~ao) {comandos}sen~ao {comandos}. Compare o programa anterior com o programa a seguir.

    1 se(brancoEsquerda ()){

    2 virarEsquerda ()

    3 andarFrente (1)

    4 pintarPreto ()

    5 pararPintar ()

    6 andarTras (1)

    7 virarDireita ()

    8 }

    9 sen~ao{

    10 andarFrente (3)

    11 }

    Nesse caso, caso a celula esteja pintada de branco, o robo ira pinta-lade preto e voltar a` sua posicao anterior. Caso contrario, o robo ira andartres posicoes para a frente e parar. Observe que apenas um dos blocos decomandos e executado. Se a celula da direita estiver pintada de branco, orobo pinta de preto e nao ira avancar as tres casas. Caso contrario, ele iraavancar as tres casas, mas nao ira pintar a celula da esquerda de preto.

    Expressoes logicas

    A condicao no comando se e, na verdade, uma expressao logica que podeassumir os valores verdadeiro ou falso, dependendo do estado do cenario.Uma expressao logica pode ser uma acao de percepcao, como aquelas listadasna Tabela 7.1, ou a instrucao sortear(), que retorna um valor verdadeiroou falso, de maneira aleatoria.

    Expressoes logicas tambem podem envolver combinacao de expressoessimples atraves do uso de conectivos logicos. No RoboMind dispomos de tesconectivos logicos: n~ao (~), e (&) e ou (|). O conectivo n~ao modifica o valorverdade da expressao logica posterior a ele. Por exemplo, se brancoFrente()e verdadeiro, n~ao brancoFrente() sera falso, e vice-versa. O conectivo ecompara duas expressoes logicas e o resultado e verdadeiro apenas se as duasforem verdadeiras. Para qualquer outra combinacao, o resultado da expres-sao e falso. Ja o conectivo ou compara duas expressoes e o resultado daexpressao e verdadeiro se qualquer uma das duas, ou ambas, forem verdadei-ras. Somente a combinacao falso ou falso tem valor verdade falso. Para

    164

  • referencia, um resumo das conectivos logicos e seu significado e mostrado naTabela 7.2.

    conector funcionamenton~ao n~ao verdadeiro = falso

    n~ao falso = verdadeiro

    e verdadeiro e verdadeiro = verdadeiro

    verdadeiro e falso = falso

    falso e verdadeiro = falso

    falso e falso = falso

    ou verdadeiro ou verdadeiro = verdadeiro

    verdadeiro ou falso = verdadeiro

    falso ou verdadeiro = verdadeiro

    falso ou falso = falso

    Tabela 7.2: Conectores logicos e a sua interpretacao

    E possvel combinar as expressoes logicas usando varios conectivos, masa ordem em que os conectivos aparecem e importante. O conectivo n~ao eo que tem maior prioridade, seguindo e e ou. Parenteses podem ser usadospara mudar a prioridade, caso necessario. O programa a seguir tem algumexemplos de expressoes logicas.

    1 se(sortear () e n~ao brancoDireita ())

    2 {

    3 virarDireita ()

    4 andarTras (1)

    5 }

    6

    7 se(verdadeiro e falso){

    8 # essa instruc~ao nunca e executada

    9 andarFrente (1)

    10 }

    7.3 Exerccios para Sala de Aula

    Exerccio Resolvido

    Neste exerccio iremos fazer com que o robo tome decisoes para contornar osobstaculos a` sua frente. Vamos criar um cenario em que o robo deve se moverem linha reta da esquerda para direita, mas com um obstaculo a` frente. Oarquivo para a criacao do mapa para esse cenario pode ser visto na Figura 7.1.

    165

  • Figura 7.1: Descricao do mapa com uma caixa

    O caminho a ser percorrido pelo robo para esse mapa pode ser visto naFigura 7.2. A princpio poderamos usar uma estrategia parecida com a docaptulo anterior, e programar o caminho na mao, e passando pelos pontosque contornam a caixa. Entretanto, essa abordagem nao e muito flexvel,pois se mudar-mos a caixa de posicao, o programa perde a utilidade.

    Figura 7.2: Cenario com uma caixa

    O programa a seguir faz com que o robo atravesse o cenario da esquerdapara a direita. Nao se preocupe por enquanto com o comando repetir(11).Ele sera explicado e explorado melhor na proxima aula, mas o seu proposito erepetir o comando andarLeste(1) catorze vezes. Esse programa funcionariase nao houvesse a caixa no cenario, mas se voce executar esse programa nesse

    166

  • cenario, o seu programa ficara parado em frente a caixa.

    1 repetir (11){

    2 andarLeste (1)

    3 }

    Vamos altera-lo para contornar a caixa:

    1 repetir (10){

    2 se(temObstaculeFrente (){

    3 andarNorte (1)

    4 andarLeste (2)

    5 andarSul (1)

    6 }sen~ao{

    7 andarLeste (1)

    8 }

    9 }

    Esse da um passo de cada vez, e se houver um obstaculo a frente, elecontorna a caixa dando um passo para o norte, dois para o leste, e um parao sul. Observe que o numero de vezes em que a sequencia e repetida foidiminuda para 12 pois o robo da dois passos para a frente quando estacontornando a caixa. Esse programa funciona para qualquer lugar que vocecolocar a caixa no caminho do robo (experimente mudar a posicao da caixano cenario para se certificar disso), uma vez que a posicao do caixa nao estacodificada diretamente no codigo, mas ela e encontradatestando-se se haum obstaculo a frete.

    A mesma estrutura do programa funciona mesmo que existam duas caixasseparadas no cenario. Vamos testa-lo agora num cenario com duas caixas,que pode ser construdo usando a descricao do mapa mostrada na Figura .

    Para percorrer esse cenario voce pode usar o programa a seguir

    1 repetir (9){

    2 se(temObstaculeFrente (){

    3 andarNorte (1)

    4 andarLeste (2)

    5 andarSul (1)

    6 }sen~ao{

    7 andarLeste (1)

    8 }

    9 }

    Observe que a estrutura e a mesma, a unica diferenca e que, como temosduas caixas, o numero de repeticoes da sequencia de comandos deve ser ape-nas dez e nao doze. Ao executar esse programa, o robo percorrera o percursomostrado na Figura 7.4. Novamente, nao importa a posicao das caixa no ca-minho do robo (desde que elas nao estejam juntas), pois o robo ira verificara posicao delas testando se ha um obstaculo a frente.

    167

  • Figura 7.3: Descricao do mapa com duas caixas

    Figura 7.4: Cenario com duas caixas

    7.4 Exerccios com o Robomind

    Agora tente resolver os exerccios a seguir

    1. Acesse o RoboMind e teste os programas vistos na secao anterior.

    2. Faca um programa para que o robo, no ambiente dado pelo mapaopenArea.map, escreva de preto seu nome ou sobrenome. A escolhase sera o nome ou sobrenome deve ser aleatoria.

    3. Faca um programa para que o robo, no ambiente dado pelo mapaopenArea.map, pinte de branco um quadrado do seguinte modo: o robo

    168

  • anda para frente tres posicoes e escolhe aleatoriamente uma direcao (es-querda ou direita), depois conclui a pintura segundo esta escolha.

    4. Faca um programa para que o robo pinte um quadrado de modo similarao exerccio anterior, mas agora escolhendo as cores dos lados de modoaleatorio. Use o mesmo ambiente dado pelo mapa openArea.map.

    5. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map, escolha aleatoriamente uma de duas direcoes (parafrente ou para tras) e:

    se escolheu ir para frente, pinte de preto o restante da linha jaexistente no mapa ate o limite definido pelo muro ao norte.

    se escolheu ir para tras, pinte de preto o restante da linha jaexistente no mapa ate o limite definido pelo muro ao sul.

    6. Faca um programa que permita o robo escolher aleatoriamente umadas quatro direcoes possveis: direita, esquerda, frente e tras.

    7. Faca um programa para que o robo, no ambiente dado pelo mapafindSpot1.map, encontre o vaso com planta ou vaso com agua.

    8. Escreva um programa para que o robo desenhe um alvo, isto e, pintecrculos (aqui na verdade quadrados) concentricos em preto e brancoalternadamente. Faca de tal modo que a cor da mosca (centro) sejaescolhida aleatoriamente e que haja seis quadrados a` sua volta.

    9. Escreva um programa para que o robo pinte o seu primeiro nome nochao, sendo que as cores de cada letra devem ser escolhidas aleatoria-mente.

    10. Similarmente ao exerccio anterior, escreva um programa para que orobo pinte o seu primeiro nome no chao, sendo que as cores de cadaletra devem ser escolhidas aleatoriamente; entretanto, agora com umatarefa adicional: se a ultima letra for preta, o robo deve pintar tambemo sobrenome (com qualquer cor).

    11. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map faca uma das seguintes tarefas:

    pinte de branco a faixa ja pintada de preto presente mapa;

    pegue o objeto (baliza) que esta mais distante do robo;

    pegue o objeto que esta mais proximo do robo.

    169

  • pegue o objeto que nao e o mais distante nem o mais proximo dorobo.

    12. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map, escolha aleatoriamente um dos tres objetos presentesno mapa e o coloque na posicao inicial do robo.

    13. De forma parecida com o exerccio anterior, faca um programa para queo robo, tambem no ambiente dado pelo mapa copyLine1.map, escolhaaleatoriamente um dos tres objetos presentes no mapa e o coloque naposicao inicial do robo. Adicionalmente o robo devera fazer:

    se o objeto escolhido foi o mais proximo, a faixa preta no mapadevera ser pintada de branco;

    se o objeto escolhido foi o mais distante, a faixa preta no mapadevera ser duplicada (pintar outra faixa preta paralela a` ja exis-tente);

    se o objeto escolhido nao foi nem o mais distante nem o maisproximo, entao nada sera feito.

    14. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map, escolha aleatoriamente um dos tres objetos presentesno mapa e agrupe os demais objetos em torno dele.

    15. Faca os exerccios indicados na secao 7.5.1.

    7.5 Ilustrando os Conceitos Aprendidos usando

    Scilab

    Retomando o problema exemplificado em Scilab no captulo anterior, lem-bre que o problema consiste em calcular a area A, o permetro P e a diagonalD de um quadrado de lado x unidades de medida (u.m.), onde x e um valorde entrada fornecido pelo usuario. E se o usuario entrar com um numeronegativo? O programa funcionara normalmente mas os resultados nao faraosentido para este problema. O modo de resolver isso e fazendo um testeantes de realizar os calculos, ou seja, verificamos se o comprimento e positivo(se x > 0) utilizando uma estrutura condicional. Alteramos nosso programaobtendo:

    170

  • 1 x = input("Entre com o comprimento do lado do quadrado: ");

    2 if x > 0

    3 A = x*x;

    4 P = 4*x;

    5 D = sqrt (2)*x;

    6 printf("A area e %f\nO permetro e %f\nA diagonal e %f",A,P

    ,D);

    7 end

    Se, por exemplo, x = 5, entao teremos a solucao ja conhecida do captuloanterior. Porem, se entrarmos com 0, 1 ou qualquer outro numero negativo,nenhuma sada e apresentada. As novas instrucoes utilizadas neste ultimocodigo-fonte estao nas Linhas 2 e 7. Na Linha 2 (if x > 0), a instrucao if(do ingles, se) e utilizada para que o programa tome uma decisao sobre acondicao x > 0. Isto e, se x > 0 for verdadeiro, o programa executara todosos comandos seguintes ate encontrar a instrucao end (Linha 7). Observe queacrescentamos espacos no incio das Linhas 3 a 6. Fizemos isto para facilitara leitura do codigo-fonte, uma vez que estas instrucoes serao executadasapenas quando x > 0. Para esta boa pratica de programacao damos o nomede identacao. Estes espacos nao interferem no resultado final do programae facilitam a identificacao do bloco de comandos que serao executados casoa condicao seja verdadeira. Experimente acrescentar a seguinte instrucaoabaixo da Linha 7:

    printf("\nFim do programa");

    Execute novamente com os valores x = 5 e x = 1 e veja o que acontece.Seria desejavel que o programa informasse ao usuario que uma entrada x 0nao e valida, em vez de simplesmente nao apresentar nenhuma sada:

    1 x = input("Entre com o comprimento do lado do quadrado: ");

    2 if x > 0

    3 A = x*x;

    4 P = 4*x;

    5 D = sqrt (2)*x;

    6 printf("A area e %f\nO permetro e %f\nA diagonal e %f",A,P

    ,D);

    7 else

    8 printf("Entrada invalida\n");

    9 end

    Na Linha 7 do programa acima, acrescentamos a instrucao else (do in-gles, senao). Se x > 0, todas as instrucoes contidas entre as instrucoesifelse serao executadas. Senao (x 0), todas as instrucoes contidas entre

    171

  • elseend serao executadas. Agora, para qualquer valor de x, o programaapresentara algum tipo de mensagem ao usuario.

    No exemplo anterior, a comparacao foi realizada com o smbolo de maior.De fato, podemos realizar comparacoes com quaisquer um dos smbolos Ma-tematicos. Na Tabela 7.3 apresentamos as sintaxes para as operacoes decomparacao entre numeros no SciLab.

    igual ==diferente =menor

    menor-ou-igual =

    Tabela 7.3: Sintaxe para as operacoes de comparacao entre numeros no Sci-Lab.

    7.5.1 Exerccios com o Scilab

    1. Acesse o Scilab e teste os exemplos vistos na secao anterior.

    2. Faca um programa que leia do teclado dois numeros inteiros x e ye coloca o menor desses valores em x e o maior em y, mostrando oresultado na sada.

    3. Escreva um programa que le do teclado um numero inteiro x e verifiquese x e par ou mpar.

    4. Escreva um programa que receba tres valores, armazenando-os nas va-riaveis x, y e z, e ordene esses valores de modo que, ao final, o menorvalor esteja armazenado na variavel x, o valor intermediario esteja ar-mazenado na variavel y e o maior valor esteja armazenado na variavelz.

    5. Escreva um programa que leia do teclado o seu percentual x de apro-veitamento na disciplina de Bases Computacionais da Ciencia e calculeseu conceito final, segundo a seguinte tabela:

    Se x < 45%, seu conceito e F;

    Caso contrario, se x 45% e x < 50%, seu conceito e D; Caso contrario, se x 50% e x < 70%, seu conceito e C;

    172

  • Caso contrario, se x 70% e x < 85%, seu conceito e B; Caso contrario, seu conceito e A.

    O programa deve escrever na sada se voce foi aprovado ou nao e comque conceito.

    6. Faca um algoritmo que receba tres valores que representarao os lados deum triangulo (fornecidos pelo usuario) e verifique se os valores formamum triangulo, classificando-o em:

    equilatero: tres lados iguais;

    isosceles: dois lados iguais;

    escaleno: tres lados diferentes.

    Lembre-se de que , para formar um triangulo, nenhum dos lados podeser igual a zero e um lado nao pode ser maior do que a soma dos outrosdois.

    173

  • 8 Logica de Programacao: Estruturas de Repeticao

    Harlen Costa Batagelo

    Joao Paulo Gois

    Letcia Rodrigues Bueno

    Luiz Carlos da Silva Rozante

    Ronaldo Cristiano Prati

    Universidade Federal do ABC

    8.1 Introducao

    No Captulo 5, estudamos os primeiros conceitos de logica de programacao:instrucao e sequencia de instrucoes. No captulo anterior, vimos estrutu-ras condicionais. No contexto de logica de programacao, veremos agora umimportante e muito utilizado conceito: estruturas de repeticao.

    8.2 Repetindo as mesmas instrucoes

    Em diversas situacoes, desejamos realizar uma determinada sequencia deacoes um numero repetido de vezes. Por exemplo, voce pode querer usaro despertador para acordar todo o dia no mesmo horario. Se voce usa odespertador do celular, ja deve ter notado que ele tem a opcao de tocaruma unica vez ou repetir o toque diariamente. A opcao de repetir o toquediariamente foi adicionada para que voce nao precise ficar programando tododia o despertador do celular.

    Suponha que desejamos calcular a expressao 210. Sabemos que

    210 = 2 2 2 2 2 2 2 2 2 2 = 1024.A expressao acima contem nove vezes a instrucao de multiplicacao. Usandouma calculadora, voce teria que repetir a multiplicacao nove vezes. Agora,se quisermos calcular 2100? Por favor, nao faca isto usando a tecnica acima.Assim como celulares tem a opcao de repetir o toque diariamente, linguagensde programacao fornecem mecanismos para facilitar a execucao de tarefasrepetidas. Mostramos agora como um computador pode nos auxiliar a reali-zar facilmente este calculo atraves de instrucoes especficas para repetir outras

    174

  • instrucoes. Em particular, podemos passar ao computador a instrucao 2 2e instrui-lo a usar o resultado desta operacao para novamente multiplicar pordois, e assim sucessivamente ate que esta operacao seja repetida 99 vezes.

    Ilustrando estruturas condicionais com RoboMind

    Vamos ilustrar a ideia usando RoboMind. No programa que desenha umquadrado no Captulo 5, as instrucoes andarFrente(n) e virarEsquerda()sao repetidas quatro vezes seguidas. A linguagem utilizada para criar progra-mas para o RoboMind prove uma estrutura de controle que pode ser usadapara situacoes desse tipo, de maneira que voce nao precisa repetir as instru-coes para executar acoes repetidas que seguem um padrao. Essa estruturade controle e o repetir(n) {comandos} e e usada para repetir os comandosentre parenteses n vezes, no qual n e um parametro que controla o numerode vezes que a sequencia de comandos deve ser repetida. Por exemplo, parapercorrer o quadrado, voce poderia usar o seguinte programa:

    1 repetir (4){

    2 andarFrente (1)

    3 virarEsquerda ()

    4 }

    Ao executar esse programa, os comandos que estao entre chaves seraoexecutados quatro vezes, o que e equivalente aos programas para se percorrerum quadrado que fizemos anteriormente nos Captulos 5 e 6. Voce podecolocar qualquer sequencia de comandos entre as chaves, incluindo uma outraestrutura de repeticao. O programa a seguir percorre o quadrado duas vezes,usando duas estruturas de repeticao, uma dentro da outra:

    1 repetir (2){

    2 repetir (4){

    3 andarFrente (1)

    4 virarEsquerda ()

    5 }

    6 }

    A primeira estrutura de repeticao controla o numero de vezes que o per-curso do quadrado sera feito, e a segunda estrutura controla a repeticao decomandos necessaria para percorrer o quadrado. Observe que a sequenciaandarFrente(1) e virarEsquerda() sera executada oito vezes. Se voce qui-ser deixar o robo percorrendo esse quadrado indefinidamente, voce pode usaro comando repetir() sem argumentos. O programa a seguir, por exemplo,faz com que o robo fique percorrendo o quadrado ate que a execucao doprograma seja abortado.

    175

  • 1 repetir (){

    2 repetir (4){

    3 andarFrente (1)

    4 virarEsquerda ()

    5 }

    6 }

    O RoboMind tambem tem uma estrutura condicional que envolve a re-peticao dos comandos enquanto a condicao for verdadeira. Essa estrutura erepetirEnquanto(condic~ao) {comandos}. Observe a diferenca entre as es-truturas repetirEnquanto e repetir. Na estrutura repetir, a sequencia decomandos e repetida um numero de vezes n pre-definido, independentementedo estado do ambiente. Na estrutura repetirEnquanto, o robo executa aacao enquanto sua percepcao do ambiente avaliada pela condicao for verda-deira. O programa a seguir faz com que o robo siga uma linha em brancopintada no chao.

    1 repetirEnquanto(brancoFrente ()){

    2 andarFrente (1)

    3 }

    8.3 Criando programas complexos

    Computadores sao usados para resolver diferentes problemas, muitos deles ex-tremamente complexos como manter atualizado o saldo bancario de centenasde milhares de correntistas de grandes bancos, que envolve o processamentode milhoes de transacoes diarias; controlar equipamentos complexos comoos diversos componentes eletronicos de um aviao, que contem centenas desensores e atuadores para que o aviao funcione corretamente; e realizar simu-lacoes computacionais de modelos matematicos do universo, que pode gerarquantidades enormes de dados a respeito dessas simulacoes, dentre muitosoutros.

    Apesar da complexidade, na grande maioria dos casos, esses sistemas saocriados usando sequencias de comandos, repeticoes e desvios de fluxo devidoa tomada de decisao, combinados de maneira apropriada.

    8.4 Exerccios para Sala de Aula

    1. Acesse o RoboMind e teste os programas vistos na secao anterior.

    176

  • 2. Faca um programa para que o robo, no ambiente dado pelo mapadefault.map, se desloque, a partir da posicao inicial, indo para leste,ate encontrar a primeira posicao pintada de branco. A partir da orobo devera rastrear a linha branca pintada no chao, isto e, segu-la ateencontrar o muro ao norte.

    3. Faca um programa para que o robo, no ambiente dado pelo mapadefault.map, a partir da posicao inicial faca: escolhe uma direcaoaleatoria, segue na direcao escolhida e para somente quando encontraralgum obstaculo.

    4. Faca um programa para que o robo, no ambiente dado pelo mapaopenArea.map, pinte linhas aleatorias no chao e pare somente quandohouver um cruzamento de linhas.

    5. Faca um programa para que o robo, no ambiente dado pelo mapapassBeacons.map, saia da posicao inicial (salao a` esquerda) e va parao ponto marcado em branco no salao a` direita.

    8.5 Exerccios com o Robomind

    1. Faca um programa para que o robo, no ambiente dado pelo mapaopenArea.map, pinte quadrados (de lado tamanho 3) em posicoes ale-atorias do mapa e em cores aleatorias. Ele deve fazer isso ate que oprograma seja abortado pelo usuario.

    2. Faca um programa para que o robo, no ambiente dado pelo mapamaze1.map, encontre sozinho o objeto no labirinto. A palavra sozi-nho aqui significa que voce nao pode programa-lo de modo a explorara visao global que voce tem desse labirinto especfico. Voce deveraprograma-lo de modo que ele possa encontrar o objeto mesmo que aconfiguracao do labirinto seja trocada.

    3. Faca um programa para que o robo, no ambiente dado pelo mapafindSpot1.map, se encaixe na garagemdefinida pela posicao pintadade branco. Aqui tambem o robo devera fazer a tarefa sozinho.

    4. Faca um programa para que o robo, no ambiente dado pelo mapacopyLine1.map, coloque os tres objetos existentes em alguma das po-sicoes pintadas de preto do mapa. Mais uma vez aqui tambem o robodevera fazer a tarefa sozinho.

    177

  • 5. Faca os exerccios indicados na Secao 8.7.

    8.6 Ilustrando os Conceitos Aprendidos usando

    Scilab

    Retomando o problema exemplificado em Scilab no Captulo 5 e 6 queconsiste em calcular a area A, o permetro P e a diagonal D de um quadradode lado x unidades de medida (u.m.), onde x e um valor de entrada fornecidopelo usuario. Suponha, agora, que queiramos realizar varias vezes os calculosde diferentes quadrados. Para isto, utilizamos a estrutura de repeticao while,conforme o codigo a seguir:

    1 x = 0;

    2 while x ~= -1

    3 x = input("Entre com o comprimento do lado do quadrado: ");

    4 if x > 0

    5 A = x*x;

    6 P = 4*x;

    7 D = sqrt (2)*x;

    8 printf("A area e %f\nO permetro e %f\nA diagonal e %f",A

    ,P,D);

    9 else

    10 printf("Entrada invalida\n");

    11 printf("N~ao foi possvel realizar os calculos\n");

    12 end

    13 end

    14 printf("\nFim do programa");

    No codigo anterior as Linhas 312 sao executadas repetidas vezes en-quanto (while) o valor de x (variavel que representa o lado do quadrado) ediferente (~=) de -1. Podemos observar que o comportamento do comandowhile no Scilab e identico ao comando repetirEnquanto no Robomind.

    Vamos apresentar um outro exemplo de uso de instrucao de repeticao.Provavelmente voce ja ouviu falar do calculo do Maximo Divisor Comum(MDC) de dois numeros inteiros pelo algoritmo de Euclides. Na Figura 8.1apresentamos um exemplo do calculo do MDC dos numeros 320 e 250. Ospassos para realizar o calculo do MDC sao:

    1. Insira os dois numeros (em ordem crescente) nas duas primeiras colunasda segunda linha;

    2. Divida o primeiro numero (320) pelo segundo (250);

    178

  • (a)

    (b)

    (c)

    (d)

    Figura 8.1: Algoritmo de Euclides do Maximo Divisor Comum de dois nu-meros inteiros positivos: MDC(320,250) = 10.

    3. Coloque a parte inteira da divisao sobre o numero 250;

    4. Coloque o resto da divisao (70) abaixo do numero 320;

    5. Copie o resto da divisao para a terceira coluna da segunda linha;

    6. Repita o processo a partir de 2 considerando o resto como segundonumero e o primeiro como o antigo segundo numero;

    7. O processo para quando o resto da divisao for igual a zero e neste caso,o MDC e dado pelo numero da ultima coluna na segunda linha.

    179

  • Como pode ser observado na Figura 8.1 o processo e iterativo, repetidoenquanto o resto da divisao e diferente de zero. No programa em Scilab aseguir mostramos como se calcular o MDC entre dois numeros:

    1 primeiro = input(Digite o primeiro numero );

    2 segundo = input(Digite o segundo numero );

    3 cprimeiro = primeiro;

    4 csegundo = segundo;

    5 resto = 1;

    6 while resto ~= 0

    7 divisao = int(primeiro/segundo);

    8 resto = modulo(primeiro ,segundo);

    9 primeiro = segundo;

    10 segundo = resto;

    11 end

    12 printf(\nMDC(%d,%d)=%d,cprimeiro ,csegundo ,primeiro);

    No incio da Secao 8.2 apresentamos o seguinte problema: Calcular itera-tivamente a expressao:

    210 = 2 2 2 2 2 2 2 2 2 2 = 1024.Podemos resolver este problema repetindo a operacao de multiplicacao 10

    vezes, conforme o programa em Scilab a seguir:

    1 contador = 1;

    2 resultado = 1;

    3 while contador

  • mais compacta de se escrever lacos de repeticao com contadores e a utilizacaoda instrucao for, cuja sintaxe e:

    for contador=inicio:fim

    end

    onde inicio e o valor inicial da variavel contador e fim e o seu valor final. Avariavel contador e incrementada automaticamente em uma unidade a cadaiteracao. Podemos tambem especificar o passo do incremento utilizando aseguinte sintaxe:

    for contador=inicio:passo:fim

    end

    Deste modo, os dois exemplos podem ser reescritos utilizando lacos forda seguinte maneira:

    1 resultado = 1;

    2 for contador =1:10

    3 resultado = resultado *2;

    4 end

    5 printf(%d, resultado);

    1 resultado = 0;

    2 for contador =2:2:51

    3 resultado = resultado + contador;

    4 end

    5 printf("%d",resultado);

    8.7 Exerccios com o Scilab

    1. O que acontece quanto o primeiro numero inserido e menor do que osegundo no algoritmo MDC? O que poderamos fazer para corrigir estalimitacao?

    2. Sem usar funcoes matematicas prontas do Scilab, isto e, empregandoapenas estruturas de repeticao e as operacoes basicas (+ - * /) , facaprogramas que:

    (a) Escreva a seguinte sequencia de numeros inteiros:

    1,2,3, . . . ,100

    181

  • (b) Leia do teclado um inteiro positivo n e imprima os n primeirosnaturais mpares. Exemplo: Para n = 4 a sada devera ser 1,3,5,7.

    (c) Leia do teclado um inteiro positivo n e calcula n!.

    (d) Leia do teclado um inteiro positivo n e imprima as n primeiras po-tencias de 2. Exemplo: para n = 5 a sada devera ser 1,2,4,8,16.

    (e) Leia do teclado um inteiro x e um natural n e calcule xn.

    (f) Leia do teclado um inteiro positivo n e uma sequencia de n inteirose depois some esses n numeros.

    (g) Leia do teclado um inteiro positivo n e uma sequencia de n nu-meros inteiros e depois determina a soma dos numeros inteirospositivos da sequencia. Exemplo: se n = 7 e a sequencia de nume-ros inteiros e 6,2,7,0,5,8,4 a sada deve ser 25.

    (h) Leia do teclado um inteiro positivo n e uma sequencia de n inteirose depois some os numeros pares e os numeros mpares.

    (i) Leia do teclado um inteiro positivo n e uma sequencia de n inteirose depois determine quantos numeros da sequencia sao positivos equantos sao nao-positivos. Um numero e nao-positivo se e negativoou se e igual a 0 (zero).

    (j) Leia do teclado um inteiro positivo n e uma sequencia de n intei-ros e depois determine quantos numeros da sequencia sao pares equantos sao mpares.

    (k) Faca um programa que leia um inteiro maior do que um e retornedizendo se ele e um numero primo ou nao.

    3. Faca programas que calculem e imprimam o valor de S , para as seguin-tes casos (nao e permitido utilizar condicional (if) nestes exerccios):

    S = 11 +32 +

    53 + . . .+

    9950

    S = 11 24 + 39 416 + 525 636 + 749 864 + 981 101004. Fazer um programa que calcule e escreva a soma dos 50 primeiros ter-

    mos da seguinte serie (nao e permitido utilizar condicional (if) nestesexerccios):

    1000

    1 997

    2+994

    3 991

    4+ . . .

    182

  • 9 Modelagem e Simulacao Computacional: Conceitos Fundamentais

    Alessandro Nascimento

    Maria das Gracas Bruno Marietto

    Ricardo Suyama

    Wagner Tanaka Botelho

    Universidade Federal do ABC

    Nao ha nada pior do que uma imagem ntida de um conceitonebuloso. Ansel Adams

    9.1 Introducao

    A area de Modelagem e Simulacao Computacional, com sua infraestruturateorico-tecnica, esta cada vez mais sendo utilizada nos diferentes campos dosaber. Isto deve-se a` possibilidade de estudar sistemas reais de maneira apro-ximada, criando-se modelos matematicos que os representem. Tais modelossao, posteriormente, implementados em simulacoes computacionais que saoexecutadas visando obter um melhor entendimento do sistema real. Destaforma, a simulacao computacional configura-se como uma poderosa ferra-menta para testar teorias, hipoteses, predizer comportamentos e acoes futu-ras, etc.

    Objetivos

    Depois de estudar este captulo, o aluno sera capaz de:

    Definir o que e um sistema e suas formas de estudo;

    Definir um modelo, bem como os passos principais para sua construcao;

    Diferenciar modelos gerais dos modelos de simulacao;

    Identificar os quatro tipos principais de sistemas computacionais, aserem utilizados em simulacao;

    Definir os conceitos de validacao e verificacao, no contexto de simulacaocomputacional;

    183

  • Enumerar e descrever os passos para o desenvolvimento de simulacoescomputacionais (metodologia);

    Trabalhar com simulacoes simples no software Scilab;

    Testar hipoteses e analisar os resultados, em simulacoes computacio-nais.

    9.2 Definicao de Sistema

    O termo sistema vem do grego snistanai e significa fazer ficar junto. Umsistema e um conjunto de elementos interconectados e que interagem entresi visando alcancar um objetivo em comum, procurando formar um todoorganizado. Um sistema e seus elementos estao inseridos em um ambiente,havendo uma fronteira entre ambos. Assim, o que nao pertencer ao sistemaira pertencer ao seu ambiente. Sistemas sao classificados como abertos oufechados. Sistemas abertos sao aqueles que interagem com seu ambiente e,consequentemente, o sistema e o ambiente influenciam-se mutuamente. Nossistemas fechados nao ha interacao dos elementos do sistema com ambiente,e por isto tais sistemas sao considerados auto-suficientes.

    Como exemplos de sistemas cita-se:

    Sistema computacional;

    Sistema economico;

    Sistema solar;

    Sistema nervoso;

    Uma Universidade;

    Uma colonia de formigas.

    Considerando um exemplo, uma empresa e um sistema pois (i) e formadapor um conjunto de elementos (funcionarios e proprietarios), (ii) seus elemen-tos possuem um objetivo em comum, que e manter a empresa no mercado,(iii) ha relacionamentos entre os funcionarios e proprietarios, (iv) os elemen-tos procuram estabelecer um sistema organizado e (v) a empresa esta em umambiente, que neste caso e o mercado economico.

    Este exemplo pode gerar a seguinte pergunta: os clientes da empresafazem parte do sistema ou do ambiente da empresa? Para responder a esta

    184

  • questao e preciso verificar se a empresa (o sistema em questao) tem o poderde controlar o cliente, obrigando-o a realizar determinadas acoes. Caso umsistema tenha este poder sobre um elemento, entao este elemento faz partedo sistema. Caso contrario, ele faz parte do ambiente do sistema. No casodo cliente, ele faz parte do ambiente da empresa pois a empresa pode tentarinduzi-lo a um tipo de comportamento, mas a decisao final de como utilizaros servicos da empresa e do cliente.

    9.2.1 Formas de se Estudar um Sistema

    O estudo de sistemas envolve teorias e tecnicas adequadas. Nas proximassubsecoes tem-se algumas formas de se estudar sistemas, apresentadas em(AVERILL; KELTON, 1991), quais sejam: esperimentos com o sistema real(9.2.1.1), experimento com modelos fsicos (9.2.1.2) e experimentos com mo-delos matematicos (9.2.1.3).

    9.2.1.1 Experimentos com o Sistema Real

    Caso seja possvel trabalhar diretamente com o sistema real, atuando emseus elementos e/ou alterando sua configuracao para faze-lo operar sob es-tas novas condicoes propostas, entao este e um experimento possvel de serrealizado. Por exemplo, um dos temas tratados na area de Robotica Movele a navegabilidade de robos por ambientes desconhecidos, exigindo assim oreconhecimento dos objetos e dos limites de tais ambientes. Nesta situacaoos robos podem interagir diretamente com o ambiente fsico real, ate mesmoalterando algumas de suas estruturas.

    Como exemplo, na Figura 9.1 tem-se um experimento real de crash-testrealizado em um veculo da General Motors (CRASH-TEST, 2011).

    Em outro exemplo, o trabalho de (OKADA; BOTELHO; SHIMIZU, 2009)tem como objetivo principal descrever a mudanca no modo de locomocaoentre pernas e rodas do robo hbrido PEOPLER-II (Perpendicularly Orien-ted Planetary Legged Robot) ilustrado na Figura 9.2. O robo pode realizarcinco tarefas: caminhar, locomocao por rodas, mudanca entre os modos delocomocao com pernas e rodas, movimento de virar para esquerda ou direitae rotacao no sentido horario ou anti-horario. Considere a situacao onde orobo esta andando utilizando rodas, e depara-se com uma rampa, conformeilustrado na Figura 9.3. Neste caso, a tarefa do robo e realizar o chaveamentode roda para perna em 1- 12. Apos a configuracao 10 o robo passa a utilizara perna como meio de locomocao.

    Entretanto, tratar diretamente com o sistema real muitas vezes nao erecomendado pois:

    185

  • Figura 9.1: Experimento Real de Crash-Test.

    Figura 9.2: Prototipo do Robo PEOPLER-II.

    O experimento pode ser muito caro ou perigoso, ate mesmo desestabi-lizando o sistema real. Por exemplo, analisar pessoas em uma situacaode incendio visando estudar seus comportamentos nao e viavel, tantopela seguranca fsica dos indivduos, por questoes eticas bem como poruma possvel inviabilidade economica e logstica;

    Em algumas situacoes e impossvel tratar diretamente com sistemasreais, como por exemplo no caso da analise direta dos buracos negrosdescritos pela Astrofsica;

    Ha tambem situacoes onde nao ha evidencias da existencia do sistema.Este tipo de estudo permite ao pesquisador abstrair a priori quais-

    186

  • Figura 9.3: Resultado Experimental no Chaveamento de Roda para Perna.

    quer relacoes fsicas, sociais, psicologicas, economicas, etc. usualmenteconhecidas e adotadas.

    Sendo assim, pode-se perceber que em muitas situacoes e necessario cons-truir um modelo que represente parcialmente o sistema, e realizar experi-mento com este modelo. Desta forma, e possvel estudar o sistema real demaneira indireta, deixando-o inalterado. Para este momento e importantesaber que um modelo e uma representacao parcial de um sistema. Na Secao9.3 tem-se um detalhamento maior deste conceito.

    De acordo com (AVERILL; KELTON, 1991) ha duas formas de se construiro modelo de um sistema: ou se faz um modelo fsico ou se faz um modelomatematico.

    9.2.1.2 Experimentos com Modelos Fsicos

    Os modelos fsicos consideram experimentos com objetos reais, e tais objetosatuam como representacoes parciais do sistema que se deseja estudar. Comoexemplo de modelos fsicos cita-se mapas e maquetes de avioes (veja as figuras9.10(b) e 9.4(b), respectivamente).

    187

  • (a) Mapa do Brasil.

    (b) Maquete de um Aviao.

    Figura 9.4: Exemplos de Modelos Fsicos Representados por um Mapa doBrasil e uma Maquete de Aviao em (a) e (b), respectivamente.

    9.2.1.3 Experimento com Modelos Matematicos

    Modelos matematicos usam smbolos em lugar de dispositivos fsicos, procu-rando representar as principais caractersticas e comportamentos do sistemaalvo que se deseja analisar. A estrutura de um modelo matematico e formadapor um conjunto de equacoes e/ou representacoes logicas, que representamvariaveis e relacionamentos logicos e quantitativos do referido sistema.

    As equacoes e representacoes mlogicas sao tratadas e resolvidas visandoanalisar como o modelo reage sob determinadas condicoes, definidas pelaatribuicao de valores aos parametros do modelo. Os resultados obtidos daexecucao do modelo podem, posteriormente, ser comparados com dados ob-tidos no proprio sistema alvo (BERENDS; ROMME, 1999).

    188

  • De acordo com (AVERILL; KELTON, 1991) ha duas formas de solucao demodelos matematicos: a solucao analtica e a solucao numerica, via simula-cao.

    Na solucao analtica o problema matematico e resolvido encontrando-se a solucao exata para a(s) equacao(coes) que descreve(m) o modelo. Emcasos como estes as teorias geralmente utilizadas sao de Pesquisa Operacional,Teoria das Filas, equacoes diferenciais, dentre outras. Por exemplo, imagineque queremos achar a solucao de um sistema que pode ser dada por umaequacao do segundo grau, do tipo ax2 + bx + c e que a solucao do nossoproblema consista em encontrar quais sao as razes deste polinomio. Nestecenario, podemos empregar a solucao analtica para encontrar as razes daequacao ou ainda uma solucao numerica, via simulacao.

    Vamos comecar encontrando uma solucao analtica utilizando a formulade Bhaskara. Tomemos o polinomio da Equacao 9.1.

    2x2 8x +2 (9.1)Utilizando a formula de Bhaskara, nas equacoes 9.2 e 9.3, teremos como

    solucoes as razes 3,732 e 0,2679.

    x =b

    b2 4ac2a

    (9.2)

    x =864 16

    4=848

    4(9.3)

    Entretanto, ha sistemas complexos cujos modelos nao apresentam respos-tas precisas e definitivas, sendo necessario uma abordagem mais holstica esistemica. Em tais casos uma solucao exata nao e possvel. Nestes casos, sim-plificacoes podem ser feitas para viabilizar a construcao de um modelo atravesde metodos empregados em simulacoes. Por exemplo, em (RACZYNSKI, 2004)tem-se um estudo sobre como se organizam e interagem estruturas terroristase anti-terroristas. Para tanto o autor modelou elementos tais como: terro-ristas, agentes anti-terror, pessoas neutras, agentes anti-terror infiltrados emambientes terroristas, etc. Neste caso a execucao do modelo deve atuar comoum laboratorio para o teste de hipoteses e melhor entendimento do sistemaalvo. Sendo assim a possibilidade de executar o modelo varias vezes, simulardiversas situacoes, elaborar e explorar hipoteses, etc, sera o foco do uso domodelo matematico (nao apenas uma solucao analtica exata). Os mode-los que apresentam este objetivo sao denominados modelos de simulacao eresolvidos via solucao numerica, que sao o foco de estudo deste captulo.

    Vamos retomar ao problema do calculo das razes de um polinomio. Casouma solucao analtica nao fosse possvel, poderamos ainda estimar os valores

    189

  • das razes de um modo relativamente preciso utilizando um metodo numericovia simulacao. Neste exemplo, empregaremos o metodo de Newton-Rhapsonpara estimar estas razes. O metodo consiste em chutar um valor inicialpara a raiz e melhorar a estimativa deste valor inicial atraves da seguinterelacao:

    xn+1 = xn f (xn)

    f (xn)(9.4)

    Aqui, f (xn) e f(xn) representam o valor do polinomio para os valores de x

    calculados e o valor da derivada do polinomio, respectivamente. A derivadade uma funcao y = f (x) com relacao a` variavel x e usualmente escrita na

    formadydx (embora nao seja uma razao) e mede a taxa com a qual o valor de

    y varia em funcao de uma variacao de x. Assim, podemos verificar a taxa devariacao (derivada) de y com relacao a x fazendo:

    y

    x=y(x +x) y(x)

    x(9.5)

    isto e, para um dado valor de x, calculamos o valor de y correspondente.Em seguida, calculamos um novo valor de y, mas desta vez, somamos umapequena diferenca (x) no valor de x. Desta forma, teremos dois valoresde y, calculados para x e para x. Podemos, finalmente, avaliar a taxa devariacao da funcao y em razao da alteracao que fizemos em x ao somar um atraves da relacao mostrada na equacao 9.5. A derivada tambem pode servista de uma grafica como a inclinacao da reta tangente a` curva da funcaoy = f (x).

    Se repertimos a operacao da equacao 9.5 para valores muito pequenos(infinitesimos) de x, trocamos a notacao da derivada para:

    dy

    dx=y(x +x) y(x)

    x|limx0 (9.6)

    Nesta situacao limite, onde x tende a zero, algumas regras de derivacaopodem ser desenvolvidas para cada tipo de funcao.

    A relacao de Newton-Raphson mostra que para uma solucao inicial xn,uma nova solucao, xn+1, mais precisa, pode ser calculada, refinando a esti-mativa inicial da raiz do polinomio. Apos alguns ciclos de refinamento, umasolucao precisa pode ser atingida atraves deste metodo. Uma vantagem dometodo de Newton e que ele funciona para qualquer polinomio com ordemmaior ou igual a dois (02). Por outr lado, vale dizer tambem que somente asrazes reais de um polinomio podem ser obtidas atraves deste metodo.

    190

  • 9.3 Definicao de Modelo

    De acordo com (SHANNON, 1975), um modelo e uma representacao parcialde um objeto, sistema ou ideia. A construcao de um modelo e util quandoum sistema pode ser simplificado/reduzido em um nvel tratavel, tornandoclara a estrutura essencial do sistema e como seus componentes interagementre si.

    Um ponto importante na construcao de um modelo e a definicao de quaise como simplificacoes sao introduzidas. Tais simplificacoes envolvem, porexemplo, a escolha dos elementos do sistema alvo a serem considerados, quaisrelacionamentos serao modelados, como delimitar o ambiente do sistema,etc. Esta escolha deve levar em consideracao um ponto de equilbrio pois,muito embora a exatidao do modelo aumente em uma relacao direta comas informacoes consideradas, sabe-se que uma parcela destas informacoesconsegue explicar o sistema de estudo. Assim, o ponto chave do processo demodelagem e descobrir as variaveis principais e a relacao entre elas.

    Dentre as variaveis a serem inseridas em um modelo tem-se as variaveisde entrada e de sada, conforme ilustra a Figura 9.5.

    Figura 9.5: Modelo e suas Variaveis.

    Espera-se que o modelo consiga estabelecer relacoes entre estas variaveis.Para tanto, e necessario entender quais aspectos do sistema alvo o modeloprocura descrever, e quais sao as limitacoes do modelo decorrentes das sim-plificacoes. A modelagem deve manter, com o maior grau de aderencia efidedignidade possvel, o relacionamento entre o sistema alvo e o sistemaresultante da modelagem e posterior simulacao.

    9.3.1 Construcao de Modelos

    Os passos principais para a construcao de um modelo estao descritos a se-guir. Para ilustrar cada passo da construcao de modelos, sera apresentado oexemplo da modelagem de um sistema de robos moveis exploradores.

    Detectar o problema de interesse: Uma das principais etapas consiste emdetectar o problema a ser modelado, para que se possa observar o

    191

  • seu comportamento sob determinadas condicoes de forma a, cientifi-camente, estuda-los e entende-los.

    Para o exemplo da modelagem dos robos exploradores, a resolucao deproblemas de busca representa um vasto campo de pesquisa em Inteli-gencia Artificial (IA). Segundo (RUSSELL; NORVIG, 2004), o processo deprocurar por diferentes sequencias de acoes possveis, e depois escolhera melhor sequencia e conhecido como busca. Um algoritmo de buscarecebe um problema como entrada e retorna uma solucao sob a formade uma sequencia de acoes. Depois que uma solucao e encontrada, asacoes que ela recomenda podem ser executadas.

    O deslocamento, reconhecimento e planejamento dos movimentos emum ambiente desconhecido permitem que dispositivos autonomos pos-sam realizar suas funcoes em ambientes dinamicos, como por exemploos robos moveis.

    Definicao dos objetivos de estudo do sistema: Os objetivos indicam qual afinalidade do trabalho, para o que ele sera utilizado. Os objetivos dire-cionarao a construcao do modelo, e geralmente sao elaborados na formade hipoteses a serem testadas, efeitos a serem analisados, etc.

    Como objetivos do modelo dos robos exploradores, tem-se que em umambiente desconhecido, um labirinto ou uma sala com algumas paredesdivisorias e um grupo de robos que compartilham suas informacoescriando uma memoria coletiva, busca-se mapear o ambiente na intencaode encontrar a sada. Alem de detectar e mapear as paredes, os robosdevem evitar trafegar em locais ja conhecidos, evitar choques, bemcomo determinar o melhor trajeto ate a` sada.

    Delimitacao do escopo do modelo: O escopo limita a abrangencia do estudo.Como exemplo de delimitacao do escopo tem-se: estudar o tema (i)criminalidade, (ii) a criminalidade em termos de homicdio, (iii) os ho-micdios no Estado de Sao Paulo, (iv) qual a relacao que existe entreo perfil dos assassinos e as condicoes socio-economicas do Estado, noperodo de 1980 a` 2011.

    Como delimitacao do escopo do modelo, os robos andarao em um labi-rinto.

    Configuracoes do sistema a ser modelado: Tais configuracoes estabelecem parao modelo seus limites, restricoes, etc. Dentre as principais configuracoese premissas do sistema de navegacao dos robos exploradores tem-se:

    192

  • A modelagem do robo deve considerar suas caractersticas e limi-tacoes;

    O robo possui quatro sensores que podem identificar obstaculos:frente, traz, direita e esquerda;

    As paredes sao detectadas por estes sensores e imediatamente adi-cionadas ao mapa;

    O mapa e compartilhado por todos os robos, ou seja, todos con-tribuem para a formacao do mesmo;

    O mapa e confiavel, ou seja, a informacao fornecida por todos osrobos e real;

    Caminhos ja percorridos devem ser evitados. Caminhos desconhe-cidos sao priorizados;

    Quando ha informacao suficiente para encontrar a sada, algorit-mos mais eficientes devem ser utilizados.

    Construcao do modelo propriamente dito: Aqui tem-se a elaboracao dos ele-mentos principais do modelo, bem como seus relacionamentos. A seguirsao apresentados os principais elementos do sistemas de navegacao dosrobos exploradores em um labirinto.

    O Ambiente e o Mapa

    A Figura 9.6 mostra um exemplo de ambiente utilizado na simulacaoproposta. No incio da simulacao este ambiente e carregado pelo pro-grama e exibido e os robos sao distribudos aleatoriamente.

    A Figura 9.7(a) mostra o mapa no incio da simulacao. A Figura 9.7(b)mostra o mapa apos a conclusao da simulacao onde os robos encontra-ram a sada.

    O Agente Robo Virtual

    Seguindo as especificacoes do modelo conceitual, o robo e capaz demovimentar-se nas quatro direcoes e detectar os obstaculos nestas dire-coes. A cada movimento, o mesmo avalia a informacao de seus sensorese seu ultimo movimento para determinar o seu proximo passo. Em pri-meiro lugar o agente verifica em quais direcoes e possvel movimentar-se, detectando paredes e outros agentes. Estas informacoes sao inclu-das no mapa, informando onde ha paredes e onde ha espacos livres.Com estas informacoes, o agente faz as seguintes inferencias:

    193

  • hb

    Figura 9.6: Ambiente Exemplo com a identificacao dos Robos, Paredes e aSada.

    hb

    (a) (b)

    Figura 9.7: (a) Mapa na Memoria no Incio da Simulacao. (b) O MesmoMapa ao Termino da Simulacao.

    194

  • A posicao que possui uma parede e descartada imediatamente dalista de possveis movimentos;

    Se ha um outro agente em alguma posicao da lista, esta tambeme descartada.

    A escolha da nova posicao entre as disponveis considera, nesta ordem:

    Sada do ambiente;

    Continuidade do movimento, ou seja, se o agente esta indo paradirecao sul, ele prefere continuar nesta direcao, considerando cus-toso o processo de mudanca da mesma;

    Locais nunca visitados;

    Locais menos visitados.

    No momento que o agente robo ocupa uma nova posicao, este ponto nomapa e incrementado para identificar que uma nova visita foi feita nesteponto. Na proxima inferencia, por este ou outro agente, esta posicaosera preterida.

    Metricas de desempenho: Estas metricas sao utilizadas para medir a eficaciade diferentes configuracoes do sistema.

    Para o caso da exploracao de labirintos, uma das metricas a ser utili-zada para analisar a eficacia do modelo e o tempo que os robos demo-ram para sair do labirinto. Define-se que quanto mais rapido os robosencontrarem a sada, mais eficiente sera o sistema.

    Levantamento da infra-estrutura necessaria: Nesta etapa tem-se o levanta-mento dos equipamentos, ferramentas e programas computacionais aserem utilizados na construcao do modelo.

    Para a implementacao do modelo dos robos navegadores, considera-senecessario o uso de uma plataforma de simulacao. Dentre as opcoes deplataformas disponveis cita-se a plataforma Swarm (SWARM. . . , 2010),desenvolvida no Santa Fe Institute (INSTITUTE, 2011).

    9.3.2 Modelos de Simulacao

    Ummodelo de simulacao e um tipo particular de modelo que tambem procurarepresentar um determinado sistema, real ou abstrato. Entretanto, difere dosdemais na medida em que permite:

    195

  • Estudar como o sistema modelado se comporta sob determinadas con-dicoes;

    Examinar, em variados graus de detalhamento, as consequencias dealteracoes internas no comportamento geral do sistema.

    Um dos primeiros modelos de simulacao, desenvolvido em 1940 por JohnVon Neumann e Stanislaw Ulam durante a Segunda Guerra Mundial, foiutilizado para o estudo da blindagem de reatores nucleares. Este estudo seriamuito caro em uma solucao experimental real, e ate mesmo muito perigoso emtermos de seguranca a`s pessoas envolvidas. Von Neumann e Ulam utilizaramferramentas estatsticas com amostragens aleatorias como metodo para obteruma aproximacao numerica de problemas complexos. Assim, conseguiramsimular um comportamento complexo atraves de um modelo estatstico. Taltecnica foi denominada de Metodo de Monte Carlo, e sera utilizada em umasimulacao na Secao 9.5.1 para a estimativa do valor de PI.

    Em (GILBERT; TROITZSCH, 1999; FERBER, 1996) sao apresentados algunsobjetivos de uma simulacao:

    Elaborar e formalizar novas teorias, bem como tambem auxiliar em ummelhor entendimento de teorias ja existentes;

    Testar hipoteses do sistema modelado;

    Obter um melhor entendimento de algumas caractersticas do sistemareal;

    Predizer comportamentos e acoes futuras;

    Analisar e detectar elementos crticos do sistema.

    A infraestrutura tecnico-teorica da area de simulacao permite capturarelementos essenciais de um sistema alvo, sem trabalhar diretamente com omesmo. Esta caracterstica e importante em situacoes onde, por exemplo:

    E proibitivo, por ser arriscado ou caro realizar experiencias em situacoesreais;

    Deseja-se saber os limites de um sistema, sem o risco de destru-lo.

    196

  • 9.4 Simulacao Computacional

    A area de Simulacao Computacional propicia uma infraestrutura teorico-tecnica adequada para a manipulacao e geracao de conhecimento de formasistemica e integrada. Isto porque propicia a criacao e execucao de modelos,em ambientes computacionais, que funcionam como laboratorios que podemser usados para analisar e testar teorias, hipoteses, limites, previsoes, etc.Assim, ambientes computacionais de simulacao podem ser vistos como labo-ratorios, e uma simulacao como um experimento realizado a partir de ummodelo.

    As tecnicas e ferramentas computacionais de simulacao tem sido usadasem diversas areas, como por exemplo:

    Pesquisadores da area medica usam ambientes simulados para treinartecnicas de cirurgia, antes de testar em pacientes reais. Como exemplo,a Figura 9.8 ilustra um robo cirurgiao conhecido como da Vinci quetem a habilidade de reproduzir remotamente os movimentos das maosde um medico;

    Na industria projetos de maquinas, processos e produtos podem ser ini-cialmente desenvolvidos em ambientes controlados de simulacao. Comoexemplo, na Figura 9.9 tem-se um ambiente para a construcao de pecas;

    Simular situacoes de catastofres e posterior trabalho de resgate, comopor exemplo em queimadas, terremotos, situacoes de panico coletivo,etc. A Figura 9.10 ilustra um ambiente de simulacao para situacoesde resgate, dentro do contexto do projeto RoboCup Rescue (RESCUE,2011).

    9.4.1 Sistemas Computacionais para Simulacao

    Sistemas computacionais para simulacao auxiliam os desenvolvedores e pes-quisadores na medida em que permitem estudar o modelo em ambientescontrolados, possibilitando a analise de itens tais como: a dinamica do mo-delo, detalhes de sua estrutura, execucao variada da simulacao alterandoparametros de entrada para verificar os resultados obtidos, etc. Com estasfuncionalidades tais sistemas contribuem para o uso cada vez mais intensode tecnicas de simulacao.

    Os primeiros sistemas de simulacao foram implementados usando lingua-gens de programacao gerais, como por exemplo C e Fortran. Ha vantagens

    197

  • Figura 9.8: Robo da Vinci Utilizado em Cirurgias (VINCI, 2011).

    Figura 9.9: Simulador de Pecas.

    na implementacao de simulacoes utilizando linguagens de programacao ge-rais: elas tendem a ser mais rapidas e existe poucas limitacoes com relacaoao que pode ser feito. Uma das desvantagens desta abordagem e que o temponecessario para modelar, codificar e verificar tais sistemas pode ser proibitivo.

    O proximo passo no desenvolvimento dos sistemas computacionais de si-mulacao foi a criacao de linguagens de programacao especficas para simu-lacao. Como exemplo cita-se as linguagens GPSS, SIMAN, SLAM, GASP,

    198

  • (a) Simulador de Cenarios de Situacoes deDesastres.

    (b) Mapa do LocalSimulado da Ocor-rencia do Desastre.

    (c) Robo para Realizar o Res-gate de Vtimas.

    Figura 9.10: Projeto RobCup Rescue e seus Ambiente de Simulacao paraResgate em Situacoes de Desastre. Fonte: (RESCUE, 2011).

    DYNAMO e SIMSCRIPT. O uso de linguagens de simulacao tende a reduziro tempo de implementacao de um modelo (HARRELL; TUMAY, 1995).

    Na decada de 80 a simulacao computacional comecou a ser utilizada naoapenas em universidades e centros de pesquisa, mas tambem no setor indus-trial. Sendo assim, sistemas computacionais voltados para a area industrialforam desenvolvidos. Tais sistemas foram concebidos para serem utilizadospor equipes interdisciplinares, com profissionais de diversas areas e com di-ferentes nveis de conhecimento em simulacao. Como exemplo tem-se Xcelle Simfactory (HARRELL; TUMAY, 1995).

    Na decada de 90 foram desenvolvidos sistemas computacionais de simu-lacao mais flexveis, com melhores tecnicas de modelagem, integracao doscomponentes do sistema e visualizacao. Como exemplo destes pacotes tem-se Swarm, Arena e Stella.

    199

  • 9.4.2 Verificacao e Validacao

    A credibilidade e consequente aceitacao de uma simulacao e atestada atravesde duas metodologias: a verificacao e a validacao.

    O processo de verificacao objetiva comprovar se o modelo computacionalfoi implementado corretamente em um sistema computacional. A compro-vacao se da atraves da comparacao entre o modelo conceitual e o modelocomputacional (SARGENT, 1999). Aqui, a pergunta a ser respondida e: omodelo esta implementado corretamente no computador?

    Para verificar a implementacao pode-se utilizar tecnicas tradicionais deEngenharia de Software, bem como tecnicas mais especficas para programasde simulacao. O crescente numero de variaveis presentes nas simulacoespode representar um obstaculo no processo de verificacao, aumentando oesforco necessario nesta fase de desenvolvimento. Neste caso, uma abordagemcomum e a escolha de variaveis-chave no processo de verificacao.

    Por sua vez, validar um modelo significa comprovar que as consideracoesfeitas para simplificar o comportamento do sistema real sao aceitaveis. Aquestao a ser respondida no processo de validacao e: o modelo conceitual foiconstrudo de forma correta? Ou seja, como determinar que uma simulacaoe um modelo correto da realidade? A validacao e um processo iterativode comparacao entre os comportamentos do modelo conceitual e do sistemaalvo. Correcoes sao feitas ate que se atinja a precisao desejada, obtendo-se confianca de que a analise dos resultados da simulacao leva a inferenciasvalidas (SARGENT, 1999).

    Algumas tecnicas de validacao sao propostas em (SARGENT, 1999) e apre-sentadas aqui em tres grupos: visuais, estatsticas e comparativas. A seguirdescreve-se essas tecnicas de validacao.

    A tecnica visual pode ser aplicada quando o comportamento do modelopode ser demonstrado atraves de movimentos, estes podem ser avaliados deforma similar ao mundo real. Como exemplo, o movimento de formigas, decarros em transito, de pessoas em uma situacao de panico, etc. Em (FRANcA,2010) um modelo de panico em multidoes em um incendio e apresentado. Amovimentacao dos agentes representam estas pessoas durante o incendio,sendo um dos itens avaliados durante o processo de validacao do modeloproposto. A Figura 9.11 mostra a visualizacao grafica da simulacao propostaem (??), com os agentes que representam as pessoas dirigindo-se para a sadado ambiente onde esta ocorrendo um incendio.

    As tecnicas estatsticas utilizam para a validacao a aplicacao da estatsticae matematica nos resultados produzidos pela simulacao. Dentre as tecnicasestatstica e matematica utilizadas, as mais comuns sao o teste de intervalosde confianca, comparacao grafica de dados e a validacao interna. No caso de

    200

  • Figura 9.11: Movimentacao dos Agentes em Direcao a` Sada Formando umArco (FRANcA, 2010).

    intervalos de confianca, para cada condicao experimental sao obtidos inter-valos de confianca pelas diferencas entre as medias, variancias e distribuicoesde diferentes variaveis de sada do sistema. E um tratamento estatsticoonde os valores obtidos possuem intervalos de variacao bem estabelecidos.Na comparacao grafica de dados, as sadas obtidas durante a simulacao saorepresentadas graficamente em varias condicoes experimentais, objetivandodeterminar se o comportamento do modelo tem uma precisao suficiente paraa sua finalidade. E finalmente a validacao interna, onde varias repeticoesde uma simulacao sao feitas para determinar a variabilidade estocastica domodelo. Uma grande variabilidade demonstra falta de coerencia no modelo,tornando seus resultados questionaveis. Se isso nao representa um compor-tamento tpico do sistema real, o modelo conceitual e questionado.

    As tecnicas comparativas utilizam outros modelos e/ou padroes ja atesta-dos para a avaliacao dos dados produzidos pela simulacao. Dentre as tecnicascomparativas, as mais utilizadas e a comparacao entre modelos, a validade deface e o teste de extremos. A comparacao entre modelos visa a comparacaodo comportamento e/ou as sadas de um modelo computacional com um ou-tro ja validado, desde que estejam no mesmo ambito de atuacao. Ha tambemcasos onde diferentes abordagens sao comparadas com dados de modelos ana-lticos, reforcando ainda mais a validade do modelo proposto. A validade deface preocupa pela opiniao do especialista na area de conhecimento do modelopara indicar se o comportamento e a modelagem sao razoaveis. Sao avali-

    201

  • Figura 9.12: Ciclo de Vida de uma Simulacao Computacional.

    ados o modelo conceitual, seu comportamento, a relacao de entrada/sadade dados, etc. No teste de extremos pressupoe-se que condicoes extremasocorrem, e podem ser av