Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à lógica de programação e ambiente Python APRESENTAÇÃO Você está convidado a compreender o mundo à sua volta e refletir: os seres humanos vivem em um mundo organizado, não é verdade? Observe a natureza, o espaço à sua volta, o dia a dia das cidades. Tudo, absolutamente tudo ao seu redor tem uma determinada forma de trabalhar, de funcionar. Para que seja possível entender o mundo, e até mesmo os seres humanos, nas decisões e comportamentos que acontecem em todos os momentos da vida, utiliza-se uma ferramenta de raciocínio preciosa: a lógica. Nesta Unidade de Aprendizagem, você irá conhecer um pouco mais sobre a lógica, a forma usual de lógica empregada para programação de computadores, conhecerá, ainda, uma importante linguagem de programação e o ambiente de programação Python. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Resolver desafios lógicos.• Descrever a estratégia de desenvolvimento de programas de computadores.• Definir o ambiente de programação Python e as características da linguagem.• DESAFIO Sabe-se que na lógica de Aristóteles o raciocínio pode ser representado por meio de declarações, ou também as chamadas premissas, que descrevem fatos ou conhecimentos de senso comum. A representação de modo ordenado e sequencial dessas premissas descreve o raciocínio a ser utilizado para resolver um problema ou ainda “descobrir a verdade”. Você foi convidado a integrar o projeto TechLife, que se propõe a desenvolver um ambiente integrado de computação dos serviços públicos da cidade, e a sua função no projeto é de análise e obtenção dos conhecimentos específicos, ações, premissas e conhecimentos de senso comum para elaboração desses programas que irão gerenciar o ambiente digital da cidade. No entanto, um fato está prestes a acontecer, que colocará suas habilidades de raciocínio lógico à prova. Veja: INFOGRÁFICO A essência da lógica em programação reside no algoritmo, e, sem dúvida alguma, é a parte mais difícil em programação. O algoritmo é, em última análise, a síntese lógica criada para resolver algum problema, ou realizar uma tarefa. E um bom programador deve saber criar muito bem um algoritmo. Veja, no Infográfico, um roteiro que apresenta os passos que irão auxiliá-lo nessa tarefa. CONTEÚDO DO LIVRO O ser humano, por sua natureza inteligente, buscou sempre conhecer o funcionamento do mundo como forma essencial para sobrevivência. O conhecimento adquirido experimentalmente foi progressivamente substituído por um conhecimento mais formalizado, sob a forma de uma descrição de fatos ordenados ou ainda leis de formação, que, ainda hoje, convenciona-se chamar de leis da natureza. Tais leis da natureza são, na verdade, abstrações do homem, formas de explicar e relacionar os acontecimentos e seus efeitos no seu dia a dia, usando da única capacidade que o distingue dos demais animais: o raciocínio. O Logus, termo grego para razão, é o modo inerente do ser humano, como espécie, compreender o mundo ao seu redor, seja pela curiosidade inata da espécie, seja pelo motivo único de sobreviver. Leia o capítulo Introdução à lógica de programação e ambiente Python, da obra Pensamento Computacional, e conheça um pouco mais sobre como formalizar e desenvolver esse modo de interpretação da realidade, usando, para isso, a lógica, conhecimento para programar computadores. Por fim, veja também um pouco sobre o ambiente e a linguagem de programação Python, observando o uso e a aplicação prática da lógica no desenvolvimento de aplicações de computador. Boa leitura! PENSAMENTO COMPUTACIONAL Rubem Dutra Ribeiro Fagundes Introdução à lógica de programação e ao ambiente Python Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Resolver desafios lógicos. � Descrever a estratégia de desenvolvimento de programas de computadores. � Definir o ambiente de programação Python e as características da linguagem. Introdução Como sabemos, os computadores realizam tarefas e processos em aten- dimento à programação armazenada em seus circuitos de memória. Essa programação, por sua vez, é criada por seres humanos, os programadores, que utilizam um conhecimento indispensável para a geração não só de programas de computadores, mas também de quaisquer descrições formais do funcionamento organizado do mundo: a lógica. Neste capítulo, você vai estudar sobre lógica e resolver problemas e desafios lógicos, visando a preparar sua forma de pensar para aprender a programar computadores. A partir desse entendimento, você vai ve- rificar como descrever estrategicamente programas de computadores. Por fim, você vai ter contato com uma das linguagens e ambientes de programação mais utilizados atualmente para a geração de aplicativos: a linguagem Python. Resolução de desafios lógicos O ser humano, desde os tempos mais remotos, sempre foi fascinado pelo conhecimento do mundo ao seu redor. Além da curiosidade, o ser humano buscou sempre conhecer o funcionamento do mundo como forma essencial para sua sobrevivência. Os ciclos da natureza, as estações do ano, as temporadas de colheitas de vegetais e os ciclos de procriação de animais são alguns dos exemplos de conhecimentos adquiridos pelo homem, ao longo de milhares de anos, e que mostram o quanto o universo é organizado e regular. De modo similar, o homem busca sempre soluções por meio da descoberta de padrões, também conhecidos como relações de causalidade, para solucionar os problemas que ocorrem cotidianamente em sua existência. Assim, o co- nhecimento adquirido sob forma empírica, isto é, a partir da experimentação prática, aos poucos, foi sendo substituído por um conhecimento mais forma- lizado, relacionado à descrição de fatos ordenados ou às leis de formação, que convencionamos chamar de leis da natureza. Observe que a natureza não está subordinada a nenhuma lei do homem. Lei, aqui, possui o significado de uma obrigatoriedade, observada pelo homem, de um determinado comportamento ou fato acontecer, mediante algumas condi- ções previamente definidas. Trata-se de uma forma de o homem descrever o comportamento da natureza, de forma a prever a sua regularidade. Dizer, por exemplo, que uma das leis da natureza é que “o Sol surgirá no horizonte no começo do dia”, consiste apenas em descrever um comportamento regular do nosso astro-rei. Ele um dia poderá explodir e não nascer mais no horizonte, pouco importando a lei da natureza sobre o seu surgimento. Elaboramos constantemente esse entendimento de tudo o que acontece ao nosso redor por meio de um processo de pensamento chamado raciocínio. O uso da razão, ou raciocínio, pode ser descrito de forma livre como a ca- pacidade do ser humano de estabelecer relações de causa e efeito a partir de determinados fatos observados. Ao observarmos, por exemplo, que uma goiabeira produz goiabas em abundância somente em uma determinada época do ano — digamos, no mês de março —, usamos a razão para concluir que o mês de março é o mês da colheita de goiabas nas goiabeiras. Logo, caso queiramos comer goiabas, vamos ter que esperar o mês de março chegar. Introdução à lógica de programação e ao ambiente Python2 Na Grécia Antiga, em torno do ano de 322 a.C., o filósofo Aristóteles se dedicou a estudar e formalizar esse modo de pensamento, promovendo a descrição e formalização do uso da razão, que, em grego, tem o nome de logus, surgindo, então, a lógica, uma área de estudos da Filosofia. Na lógica de Aristóteles, o raciocínio pode ser representado por meio de declarações, também chamadas premissas, que descrevem fatos ou conhecimentos de senso comum. A representação de modo ordenado e sequencial dessas premissas descreve o raciocínio a ser utilizado para resolver um problema ou, ainda, “descobrir a verdade”. Como exemplo, considere o conjunto de premissas abaixo. a) Duas pessoas são irmãs entresi quando ambas possuem ao menos um mesmo pai ou mãe. b) Maria é filha de Pedro. c) Beto é filho de Pedro. Assumindo que Pedro é o mesmo indivíduo nas premissas 2 e 3, o que podemos concluir? Conclui-se que Beto é irmão de Maria ou Maria é irmã de Beto. A lógica de Aristóteles representou um avanço sem precedentes para a humanidade, pois proporcionou ferramentas racionais (isto é, a partir do uso da razão) para descrever o que, de outra forma, parecia ser desconhecido ou mágico. A lógica é também aplicada extensivamente na matemática, em que leis e teoremas foram descobertos e formalizados diretamente pelo processo conhecido como demonstração de teorema. Considere o exemplo: � X = A � Y = A � Logo, X = Y. 3Introdução à lógica de programação e ao ambiente Python Essa é a apresentação matemática formal da seguinte premissa: “Se duas grandezas são iguais a uma terceira, então são iguais entre si”. Deve-se notar que a representação matemática é totalmente simbólica: A pode ser qualquer coisa; ainda assim, a representação matemática anterior permanecerá válida. A lógica é extensivamente empregada em todas as áreas das ciências, e o conhecimento científico está formalmente representado segundo a lógica. A aplicação da lógica impõe uma abordagem clara e direta frente ao problema que se deseja resolver, exigindo uma análise de cada parte constituinte. A lógica e a resolução de problemas Existem basicamente dois métodos de aplicação de lógica, o método dedutivo e o método indutivo, ambos largamente empregados na resolução de proble- mas. É importante salientar que o termo problema deve ser entendido como qualquer informação, descoberta ou mesmo solução que se deseja encontrar. Não é, necessariamente, uma situação difícil, que necessita de solução. Nesse contexto, denominamos tecnicamente esse problema como desafio lógico. Conforme lecionam Russell e Norvig (2013), para ambos os métodos de aplicação lógica, aplica-se a sequência geral de análise descritiva do pro- blema, apresentada a seguir. 1º passo: enunciar o problema Todo problema necessita ser claramente enunciado. Enunciar significa des- crever claramente o problema ou necessidade, ou ainda o objetivo do que se deseja obter. Para tanto, evite palavras e expressões vagas, bem como descrições emocionais; seja objetivo no enunciado. Por exemplo, se você precisa trocar uma lâmpada no teto, evite dizer: “Necessito de algo que me eleve até o teto”. Prefira um enunciado claro, direto, descrevendo o problema: “Necessito de uma escada para subir até o teto”. Tenha como base que um enunciado deve, no mínimo, ser claramente entendido por qualquer pessoa, sem necessidade de conhecimentos específicos. Observe, no entanto, que o enunciado pode fazer uso de conhecimento comum. No exemplo anterior, o enunciado faz uso do conhecimento que o leitor deverá ter sobre o que é uma escada. Um índio, por exemplo, que nunca tenha visto uma escada, não saberá o significado do enunciado. Introdução à lógica de programação e ao ambiente Python4 2º passo: descrever todas as partes constituintes do problema A partir do enunciado, realiza-se uma decomposição em partes lógicas, que fazem parte da estrutura do problema. Tais partes são declarações, ou ainda premissas, que formam todo o conhecimento verdadeiro que se tem sobre o problema. As premissas abrangem o seguinte. � Fatos descritos no enunciado. � Conhecimentos de senso comum. � Conhecimentos técnicos referentes ao problema. � Relações de causa e efeito conhecidas. � Sujeitos que, segundo o enunciado, realizam ações. � Objetos que, segundo o enunciado, sofrem ações. Enfim, trata-se de informações sob forma de declarações, que detalhem tudo o que for necessário para a condução da solução. 3º passo: ordenação lógica das premissas Uma vez que se possui todas as premissas sobre o problema, deve-se proceder à ordenação, gerando uma sequência declarativa de fatos ou conhecimentos de senso comum, utilizando-se como base a regra da causa e efeito. � Premissas que são reconhecidas como causa devem vir antes de pre- missas reconhecidas como efeitos (ou consequências). � Premissas que são efeitos podem também ser causas de outras premissas, que, então, deverão ser declaradas posteriormente — trata-se do efeito cascata, em que o efeito de um fato anterior é a causa de um fato seguinte. 4º passo: avaliação conclusiva Deve-se avaliar a sequência de premissas, aplicando o método dedutivo ou o método indutivo para a obtenção da solução. 5Introdução à lógica de programação e ao ambiente Python 5º passo: conclusão Deve-se formalizar a conclusão obtida. Tal conclusão é, agora, uma premissa válida e poderá ser utilizada em outro problema. Se, no entanto, uma conclusão não foi obtida, deve-se retornar ao 2º passo, verificando a falta de alguma pre- missa (conhecimento comum ou fato verdadeiro) que esteja faltando. Deve-se seguir posteriormente os passos 3, 4 e 5, até a finalização. Observe que a sequência apresentada é, em si mesma, uma aplicação do método lógico de resolução de problemas. Método indutivo De acordo com Law (2008), no método de análise indutiva, as premissas ou, ainda, os fatos conduzem a uma “lei de formação”, pela repetição de algum padrão de comportamento. Vejamos um exemplo. Temos o seguinte enunciado: “Necessito saber aproximadamente em que momento do dia ocorre o nascimento do sol”. Agora, vejamos as premissas a seguir. 1. O nascimento do sol é o momento em que o astro-rei encontra-se no horizonte leste do local onde estou. 2. Leste é um dos pontos referenciais de localização na superfície do planeta Terra. 3. Dia é um intervalo de tempo em que o planeta Terra gira ao redor de seu próprio eixo, e tal tempo é usualmente de 24 horas. 4. Foram feitas observações durante 30 dias consecutivos, em que: ■ No 1º dia, o sol estava no horizonte leste às 6 horas da manhã. ■ No 2º dia, o sol estava no horizonte leste às 6 horas e 15 minutos da manhã. ■ No 3º dia, o sol estava no horizonte leste às 6 horas e 10 minutos da manhã. ■ No 4º dia, o sol estava no horizonte leste às 6 horas da manhã. ■ No 5º dia, o sol estava no horizonte leste às 6 horas e 12 minutos da manhã. ■ No 30º dia, o sol estava no horizonte leste às 6 horas e 14 minutos da manhã. Introdução à lógica de programação e ao ambiente Python6 No método indutivo, deve-se observar as premissas sobre o problema, procurando algum padrão que revele uma lei de formação que seja a solução. Para esse exemplo, observe que o sol nasceu sempre após as 6 horas da manhã e até as 6 horas e 15 minutos. Conclui-se que o sol nasce aproximadamente entre 6 horas e 6 horas e 15 minutos da manhã, todos os dias. O método indutivo é empregado com muita reserva no meio científico, pois as conclusões obtidas por meio dele são generalizações, que podem conduzir a inverdades. Vejamos um exemplo com as seguintes premissas: 1. Observo que o cisne 1 é branco. 2. Observo que o cisne 2 é branco. 3. Observo que o cisne 3 é branco. 4. Observo que o cisne 4 é branco. 5. Observo que o cisne 5 é branco. 6. Observo que o cisne 6 é branco. 7. Observo que o cisne 5.000 é branco. Logo, por indução, concluo que todo cisne é branco. Parece certo, até o momento em que viajo para a Nova Zelândia. Lá, existem cisnes pretos. Então, minha conclusão baseada no raciocínio da indução me levou à conclusão errada. Método dedutivo No método dedutivo, conforme Law (2008), as premissas são avaliadas e ordenadas em uma sequência de causa e efeito, de modo que a conclusão obtida seja resultante da sequência completa, emergindo como fato novo extraído ou, ainda, deduzido a partir das premissas constituintes. Vejamos um exemplo com o seguinte enunciado: “Desejo saber se Maria é filha de João”. Tem-se as seguintes premissas: 1. Todo ser humano possui em seu corpo uma estrutura molecular deno- minada DNA. 2. O DNA é único para cada ser humano e está presente no seu corpo e no corpo de seus descendentes.3. Descendente é todo ser humano gerado a partir de outros dois seres humanos. 4. Ao ser humano gerador, denominamos pai ou mãe. 5. Ao ser humano gerado, denominamos filho ou filha. 7Introdução à lógica de programação e ao ambiente Python 6. O DNA de um ser humano pode ser identificado utilizando-se de teste inequívoco, chamado teste de DNA. 7. O teste de DNA mostra o DNA presente no corpo do indivíduo, incluindo os componentes de DNA de seus geradores. 8. Maria foi submetida ao teste de DNA. 9. Não foi identificado componente de DNA de João no teste de Maria. Das premissas acima, já ordenadas, podemos concluir que: João não é pai de Maria ou Maria não é filha de João. O método dedutivo usualmente exige um maior número de premissas, todas válidas, para gerar uma conclusão igualmente válida. É o método utilizado pelos cientistas, pois se baseia somente na obtenção da verdade a partir de fatos e conhecimentos que possam ser comprovados também como verdadeiros, sem generalizações. Operadores lógicos Note que tanto o método indutivo quanto o dedutivo são inteiramente suporta- dos pelas premissas, que devem ser claramente apresentadas de forma direta e concisa. Para a construção das premissas, são utilizados operadores lógicos, que estabelecem as relações entre os elementos que compõem a premissa, conforme lecionam Russell e Norvig (2013). Operador de IMPLICAÇÃO (A→B) Esse operador é extensivamente utilizado em lógica e constitui a operação lógica CAUSA→EFEITO. Quando se diz que A IMPLICA B (A→B), isso significa dizer que, quando A acontece, ou é verdadeiro (CAUSA), B necessariamente acontece (EFEITO). Vejamos um exemplo, em que se tem a seguinte premissa: “Sempre que chove, as calçadas da rua ficam molhadas”. Temos a seguinte representação: (CHUVA)→(CALÇADA MOLHADA) No exemplo, CHUVA é a causa, e o efeito, ou a consequência, são as CALÇADAS MOLHADAS. As premissas podem se relacionar entre si, em uma situação causa→efeito, produzindo uma sequência dedutiva lógica, que conduzirá à solução ou à conclusão. Abaixo, podemos analisar a tabela verdade do operador IMPLICAÇÃO, representando todas as situações em que o operador é verdadeiro ou falso. Considere V como fato VERDADEIRO e F como fato FALSO. Introdução à lógica de programação e ao ambiente Python8 A B A → B F F V F V V V F F V V V Quadro 1. Tabela verdade do operador IMPLICAÇÃO O operador A B somente é falso (o resultado é F) quando A é verdadeiro e B é falso. Modus ponens Tome cuidado com a interpretação frequentemente errônea do operador de impli- cação. Dizer que A→B significa que, quando A acontece, B necessariamente também acontece, como consequência de A. No entanto, B poderá ocorrer independentemente de A. Considere a sentença: “Sempre que chove, as calçadas da rua ficam molhadas”. (CHUVA)→(CALÇADA MOLHADA) Se chover for um fato verdadeiro, então temos como verdadeiro que as calçadas estão molhadas. No entanto, se apenas sabemos que as calçadas estão molhadas, isso não torna verdadeiro o fato CHUVA. Afinal, as calçadas podem estar molhadas por qualquer outra razão. Esse processo de dedução errônea descrito aqui é conhecido como modus ponens, que diz o seguinte: sejam dois fatos A e B e A→B, então, se B ocorreu, também ocorreu A. Ou seja, o modus ponens é uma falácia, isto é, uma dedução inválida acerca de uma premissa. Veja outro exemplo bem comum: Maria acredita que, se João está magoado com ela, então não fará contato com ela hoje. Temos a seguinte representação: (JOÃO MAGOADO)→(NÃO FARÁ CONTATO) Então, ao final do dia, se João não tiver feito qualquer contato com Maria, ela concluirá que ele está magoado. No entanto, João pode não ter feito contato com ela por quaisquer outros motivos, como: seu telefone não estava funcionando, não havia acesso a outro meio de comunicação, e João não tinha condições de ir ao encontro de Maria. E, para registro, João está muito feliz com Maria, não está nem um pouco magoado com ela. Fonte: Law (2008). 9Introdução à lógica de programação e ao ambiente Python Operador OU (A + B) Esse operador é também muito utilizado em lógica e constitui a operação que relaciona dois fatos A e B, que podem ocorrem conjuntamente ou de forma alternada. Quando se diz A OU B (A + B), significa dizer que: A acontece e B não acontece; A não acontece e B acontece; A e B acontecem juntos. Vejamos um exemplo com a seguinte premissa: “Todo animal bovino possui cores BRANCA ou PRETA”. Temos a seguinte representação: (COR DE BOVINOS): (BRANCA + PRETA) No exemplo, um BOVINO poderá ser de cor BRANCA, poderá ser de cor PRETA e poderá ser de duas cores, BRANCA e PRETA (bovinos malhados). Isso significa dizer que um bovino obrigatoriamente deve conter ao menos uma dessas duas cores. Qualquer outro animal que não contenha ao menos essas duas cores não será um bovino. Um bovino não poderá ser verde, amarelo, vermelho, enfim, qualquer outras cores que não sejam as citadas. O operador OU pode ser aplicado para mais de dois elementos. Sabe-se, por exemplo, que existem bovinos de cor marrom e, ainda, bovinos com combinações dessa cor com as outras duas, branca e preta. Assim, podemos atualizar de forma mais correta a premissa acima: (COR DE BOVINOS): (BRANCA + PRETA + MARROM) Abaixo, vejamos a tabela verdade do operador OU, representando todas as situações em que o operador é verdadeiro ou falso. Considere V como fato VERDADEIRO e F como fato FALSO. A B A + B F F F F V V V F V V V V Quadro 2. Tabela verdade do operador OU O operador A + B somente é falso (o resultado é F) quando A é falso e B é falso. Introdução à lógica de programação e ao ambiente Python10 Operador E (A . B) Trata-se do operador lógico que relaciona dois fatos, A e B, que podem ocorrem somente juntos. Quando se diz A E B (A.B), significa dizer que A acontece (é verdadeiro) e B necessariamente também acontece (é verdadeiro). Vejamos um exemplo com a seguinte premissa: “Toda autorização de pagamento deve ser assinada pelo presidente e pelo tesoureiro”. Temos a seguinte representação: (AUTORIZAR PAGAMENTO): (ASSINATURA PRESIDENTE . TESOUREIRO) No exemplo, o PRESIDENTE e o TESOUREIRO devem ambos assinar a autorização. Se somente um deles, isoladamente, assinar o documento, sem a assinatura do outro, não haverá autorização. O operador E pode ser aplicado para mais de dois elementos. Em uma dada empresa, por exemplo, exige-se que também o vice-presidente assine a autorização. Assim, para essa empresa, podemos atualizar a premissa acima: (AUTORIZAR PAGAMENTO): (ASSINATURA PRESIDENTE . TE- SOUREIRO . VICE-PRESIDENTE) Abaixo, temos a tabela verdade do operador E, representando todas as situações em que o operador é verdadeiro ou falso. Considere V como fato VERDADEIRO e F como fato FALSO. A B A . B F F F F V F V F F V V V Quadro 3. Tabela verdade do operador E O operador A . B somente é verdadeiro (o resultado é V) quando A é verdadeiro e B é verdadeiro. 11Introdução à lógica de programação e ao ambiente Python Operador de NEGAÇÃO (~A) Esse operador é o mais simples utilizado em lógica e constitui a operação lógica de inversão do estado lógico do elemento da premissa. Quando se diz “não A”, ou a negação de A, NÃO A (~A) significa dizer que, se A existe ou é verdadeiro, ~A não existe ou é falso. Vejamos um exemplo com a seguinte premissa: “Todo ser vivo não pode estar morto”. Ou, ainda: “A morte é a negação da vida”. Temos a seguinte representação: (MORTE): (~VIDA) No exemplo, um ser vivo não pode estar morto, e um morto não pode estar vivo. São fatos opostos um em relação ao outro. O operador ~ pode ser aplicado mais de uma vez no mesmo elemento. Tomando o exemplo anterior, pode-se também enunciar: (VIDA): ~(~VIDA) Esse enunciado pode ser lido como: “a vida é a negação da negação da vida”. Como negação de vida é a morte, então a negação da negação é a vida. Assim, (A): ~(~A), isto é, a negação da negação de A é o próprio A. Abaixo, temosa tabela verdade do operador NEGAÇÃO, representando todas as situações em que o operador é verdadeiro ou falso. Considere V como fato VERDADEIRO e F como fato FALSO. A ~A F V V F Quadro 4. Tabela verdade do operador NEGAÇÃO Estratégia de desenvolvimento de programas de computadores Uma vez que a lógica, seus métodos e seus operadores, formalizam o nosso processo de raciocínio, deve-se empregar esse conhecimento para elaborar programas de computadores. Computadores, como todos sabemos, são máquinas, ou seja, não têm a capacidade de pensar. Mesmo com todos os Introdução à lógica de programação e ao ambiente Python12 atuais recursos computacionais, as formas de comunicação e as capacidades de processamento de dados muitíssimo superiores à capacidade humana, os computadores não conseguem estabelecer seus próprios processos de raciocínio nem conseguem criar por si mesmos qualquer iniciativa de ação. Até o presente momento, todos os computadores executam uma sequência de comandos, conhecida como programa, e tal programa foi anteriormente criado por um ser humano, um programador. Esse ser humano, o progra- mador, é que detém o conhecimento ou, ainda, o uso da razão, para elaborar a sequência lógica que o computador vai executar. Observe que o programador necessita dominar o conhecimento lógico o suficiente para a elaboração dessa sequência de instruções, também chamada de comandos, que será executada pela máquina. De forma análoga ao processo de dedução lógica, não existe possibilidade de declarações vagas, premissas inválidas ou de sentido incompreensível. Máquinas não são inteligentes. A programação de computadores é o processo de registrar na memória da máquina essa sequência de comandos, escrita em uma linguagem de programação de computadores. Existe uma vasta quantidade de diferentes linguagens de programação. Felizmente, não é necessário conhecer todas para programar um computador. É necessário saber criar um algoritmo. Desenvolver um algoritmo para fazer alguma coisa não é uma tarefa simples. No vídeo disponível no link a seguir, conheça Josh Darnit, que publicou uma série de vídeos no YouTube chamada Exact Instructions Challenge (em português, “O desafio das instruções exatas”). Nessa série de vídeos, Josh desafia seus filhos a criarem uma sequência de instruções para a realização de tarefas simples, como fazer um sanduíche de pasta de amendoim ou um desenho. https://qrgo.page.link/aWL7w 13Introdução à lógica de programação e ao ambiente Python Algoritmos De acordo com Cormen et al. (2012), um algoritmo é uma sequência de ins- truções, escritas de forma clara, ordenada e finita, e elaborada para realizar uma determinada tarefa ou resolver um problema. Observe o quão próximo é o processo de análise lógica da definição de algoritmo. Como a lógica procura descrever, com o uso da razão, o mundo ao seu redor, todo o funcionamento do mundo pode ser “algoritmizável”. Qualquer fato, qualquer cenário, qualquer método ou procedimento pode ser descrito com um algoritmo. Qualquer fato, cenário, método ou procedimento pode ser descrito com um algoritmo. Acesse os links a seguir para verificar dois exemplos do cotidiano em que se aplicam al- goritmos — uma receita culinária e a troca de pneu de um automóvel, respectivamente. https://qrgo.page.link/y2Q75 https://qrgo.page.link/YJw8n Segundo Cormen (2014), a criação de algoritmos obedece à sequência descrita a seguir. 1º passo: descrição do problema a resolver ou tarefa a ser feita Essa descrição necessita ser clara e objetiva, definindo-se com precisão qual é a tarefa a ser realizada. Com frequência, o próprio título do algoritmo é sufi- ciente como descrição. Por exemplo, “Receita de pudim de leite condensado” define exatamente o objetivo final. Introdução à lógica de programação e ao ambiente Python14 2º passo: decompor a tarefa ou o problema em todas as ações necessárias para a realização Deve-se também relacionar todos os itens necessários para a realização. Nenhuma ação, tecnicamente chamada instrução, pode ser esquecida ou implicitamente entendida. 3º passo: ordenação lógica das ações Deve-se proceder à ordenação das ações de modo que, ao final, a tarefa ou o problema esteja resolvido com sucesso. 4º passo: conclusão Deve-se avaliar a sequência de instruções, determinando se o objetivo foi alcançado. Ou seja, deve-se testar a sequência, executando passo a passo cada instrução na ordem estabelecida e observando se, ao final, a tarefa foi realmente concluída com êxito. Esse teste é conhecido como teste de mesa. Caso a tarefa ou o problema não tenha sido concluído, retorne ao 2º passo, verificando a falta de alguma instrução, e siga novamente o 3º e o 4º passos, sucessivamente, até que o algoritmo esteja certo. Caso a tarefa ou problema tenha sido concluído com êxito, deve-se parar as ações, já que seu algoritmo estará pronto, conforme leciona Cormen et al. (2012). Ao final do semestre, um professor necessita calcular as médias de seus alunos e publicá-las, indicando quais alunos estão em exame e quais foram aprovados. Sabendo que o professor realiza duas provas de peso igual, e que a média mínima de aprovação é 7, faça um algoritmo para o professor realizar o cálculo e gerar a lista de aprovados e a lista de alunos em exame. Número de alunos: 30 Faça a seguinte sequência para cada um dos 30 alunos: 1. Leia o nome do aluno. 2. Leia a nota da prova P1. 3. Leia a nota da prova P2. 4. Calcule a média do aluno: somar P1 com P2 e dividir o resultado por 2. 15Introdução à lógica de programação e ao ambiente Python 5. Se (média do aluno for menor do que 7,0), então: Inclua o nome do aluno e a média calculada na lista “alunos em exame”. Senão: Inclua o nome do aluno e a média calculada na lista “alunos aprovados”. 6. Proceda para o próximo aluno. 7. Imprima em tela ou papel a lista “alunos aprovados”. 8. Imprima em tela ou papel a lista “alunos em exame”. Note que o algoritmo está em linguagem comum; não é nenhuma linguagem de programação específica. Note também que, para tornar mais clara a interpretação e a compreensão, alguns formatos de escrita e definições são usualmente adotados, como vemos a seguir. � Tabulação de instruções, definindo blocos distintos de instruções. No exemplo acima, veja que as instruções de cálculo de cada média de cada aluno e a decisão e inclusão em uma das listas de alunos estão todas no bloco que começa com a instrução “Faça a seguinte sequência para cada um dos 30 alunos”. � A estrutura SE (CONDIÇÃO LÓGICA) + ENTÃO (BLOCO DE AÇÕES) + SENÃO (BLOCO DE AÇÕES) é conhecida como estrutura condicional e define uma tomada de decisão a partir da validade da condição lógica: � Caso a condição lógica seja verdadeira, o bloco ENTÃO será executado. � Caso a condição lógica seja falsa, o bloco SENÃO será executado. � Veja que a estrutura condicional está também com os seus blocos de instruções com tabulação, em que a sequência de instruções para o bloco ENTÃO e a sequ- ência de instruções para o bloco SENÃO estão posicionadas mais internamente. � No exemplo, nome do aluno, nota da prova P1, nota da prova P2 e média calculada são definidas como variáveis do algoritmo. Criar um algoritmo é a principal etapa para a programação de computadores. A partir de um algoritmo bem desenvolvido, vários programas podem ser feitos, utilizando-se várias linguagens de programação diferentes, à escolha do programador e de acordo com as limitações da máquina. O ambiente de programação Python e as características da linguagem O processo de transformar um algoritmo em um programa de computador é conhecido como codificação. De fato, os computadores são programados por uma linguagem específica, usualmente denominada linguagem de pro- gramação. Programar, no contexto das ciências da computação, corresponde à transcrição da sequência de instruções do algoritmo em uma sequência de Introdução à lógica de programação e ao ambiente Python16instruções de máquina — chamadas mais tecnicamente de códigos de máquina —, gerando-se, assim, um programa que poderá ser executado pelo computador. Note que essa relação do algoritmo com o programa codificado em lingua- gem de programação não é direta. Uma instrução do algoritmo pode necessitar de uma sequência de várias instruções na linguagem de programação. O inverso, dependendo da linguagem de programação, também pode ocorrer: uma sequência de várias instruções do algoritmo pode ser codificada por uma única instrução de programação. Dentre a quantidade realmente grande de linguagens de programação exis- tentes, algumas são mais próximas do modo formal de escrever os algoritmos, tornando fácil o processo de codificação. Uma dessas linguagens é a Python. Introdução à linguagem Python Python é uma linguagem recente no universo da computação. Criada em 1991 por Guido van Rossum, Python é hoje uma das linguagens de programação mais utilizadas no mundo, sendo empregada no desenvolvimento de centenas de milhares de aplicativos por empresas como Microsoft, Google, Amazon, dentre outras. O grande sucesso da linguagem Python vem da sua facilidade para programação, sendo caracterizada pelo próprio autor como uma linguagem utilizada para drasticamente reduzir o tempo de desenvolvimento de aplicações. Assim, conforme Maruch e Maruch (2006), Python tem vantagens únicas, como vemos abaixo. � Linguagem clara e simples: Python é muito fácil de entender, ao menos para os programadores de língua inglesa, pois as instruções são muito próximas das utilizadas para a construção do algoritmo. Mesmo quem nunca tenha visto Python antes consegue entender com pouquíssima dificuldade um programa escrito na linguagem, interpretando o seu funcionamento. � Linguagem multiparadigma: Python aceita tanto programação pro- cedural quanto programação orientada a objetos (os dois principais paradigmas em programação), tornando fácil a interação entre equipes de programadores acostumadas com quaisquer dessas filosofias. � Linguagem interpretada: Python não é compilado para rodar dire- tamente no computador; Python roda em um ambiente previamente instalado na máquina, e o programa é interpretado por esse ambiente no momento da execução. 17Introdução à lógica de programação e ao ambiente Python � Linguagem altamente portável: como Python não é compilado, não há diferenças no código de um programa feito para um computador e que será depois executado em outro tipo de máquina. O ambiente de programação Python, uma vez instalado em ambas as máquinas, vai proporcionar uma padronização de funções e recursos. � Linguagem script: a linguagem script é uma linguagem usualmente utilizada pelo sistema operacional para controlar outros programas e aplicativos. Python tem os recursos de uma linguagem script, o que significa que as aplicações feitas nessa linguagem podem diretamente executar e fazer uso dos resultados de outras aplicações instaladas no computador. Trata-se de uma facilidade para programadores que necessitam de uma integração entre aplicativos diferentes. Python está disponível no link a seguir. Baixe o ambiente de programação e arquivos de instalação, configuração, documentação, programas-exemplo, enfim, tudo o que quiser saber e fazer sobre Python. https://qrgo.page.link/38eFU Python: fundamentos A linguagem Python vem com um ambiente próprio para o desenvolvimento de aplicações e que funciona no modo interativo e no modo programado, denominado integrated development and learning environment (IDLE). Para iniciar o ambiente, escreva python na linha de comando da janela de comandos do seu computador ou clique no ícone IDLE (Python GUI) no menu da sua tela inicial. A Figura 1 mostra como iniciar a chamada do ambiente. Introdução à lógica de programação e ao ambiente Python18 Figura 1. Chamando o ambiente Python (a) no menu iniciar e (b) via console. (a) (b) Modo interativo É a maneira mais fácil de trabalhar e se acostumar com a linguagem, conforme Maruch e Maruch (2006). No modo interativo, os comandos são executados imediatamente, exibindo na tela o resultado. Veja o exemplo da Figura 2. Figura 2. Exemplo do modo interativo. No exemplo, foi definida uma variável de nome x com valor 10, outra va- riável y com valor 12 e, depois, a soma x + y. O ambiente retornou o resultado imediatamente: 22. O ambiente interativo pode ser utilizado para cálculos rápidos, testes de mesa, ou mesmo para testar um bloco de comandos. 19Introdução à lógica de programação e ao ambiente Python Variáveis e expressões Antes de dar continuidade ao modo programado do ambiente Python, é im- portante compreender um pouco mais sobre a linguagem Python. Variáveis As variáveis em Python são declaradas sempre iniciando com uma letra, não podem ter espaços e são variáveis ditas case sensitive, isto é, variáveis com nomes iguais, mas escritos em maiúsculas ou em minúsculas, são reconhecidas como diferentes. Exemplos de declarações de variáveis válidas: x=10 nome="Maria" Area_do_quadrado= Base * Altura CATETO2=200.345 Exemplos de declarações de variáveis inválidas: 20Casal=300 Nome de Familia = "Torres" Note também que, em Python, você não necessita definir o tipo de variável na declaração, como acontece com algumas linguagens. Basta fazer a atribuição do valor, e a linguagem define diretamente o tipo, conforme leciona Lutz (2011). No exemplo anterior, ao declarar nome="Maria", Python já interpretou que nome será uma variável que conterá caracteres (os símbolos “ ” são a forma usual, na maioria das linguagens de programação, de sinalizar que Maria é uma palavra, um conjunto de letras, e não outra variável chamada Maria). Instruções e funções Python possui instruções simples de escrever, tornando o código bem legível e de fácil entendimento. Além de instruções, Python possui um conjunto básico e extenso de funções à disposição do programador, bem como permite a instalação de bibliotecas com funções específicas. Veja a seguir algumas instruções muito utilizadas na linguagem Python. Introdução à lógica de programação e ao ambiente Python20 Entrada de dados — a entrada de dados, realizada pelo usuário via teclado, utiliza a instrução input: Nome_da_Variavel = input('Mensagem ao usuário ') No comando input, o usuário receberá a Mensagem ao usuário, orientando para fazer uma entrada de dados que será atribuída à variável Nome_da_Variavel. Por exemplo: Nome_do_Aluno = input('Entre com o nome do aluno:') Mensagens e saída de dados — as mensagens dirigidas ao usuário, bem como aqueles resultados que serão apresentados durante e ao final do processamento, utilizam o comando print: print('Mensagem ao usuário') Acima, o comando print contém somente uma mensagem ao usuário, que será impressa na tela ou em papel. print('Mensagem sobre alguma saída de dados', Nome_da_Variavel) Nesse formato, o comando print emite uma mensagem ao usuário e, a seguir, o valor que está contido na variável. Esse é um formato usual para apresentação de resultados durante ou após o processamento. A linguagem Python é muito completa, atendendo várias necessidades de programação e diferentes tipos de aplicações, exigindo o aprendizado gradual de vários outros comandos e recursos. Modo programado O modo programado do Python possui um editor de texto, permitindo a escrita do código diretamente. Para utilizar esse modo, deve-se criar um arquivo novo com o editor do ambiente, diretamente no menu de cabeçalho do aplicativo IDLE (Figura 3), conforme leciona Lutz (2011). 21Introdução à lógica de programação e ao ambiente Python Figura 3. Criação do programa: (a) chamando o editor e (b) editor ativo. (a) (b) Na Figura 3b, observe que o símbolo # marca o início de um comentário. Os comentários funcionam como mensagens que o programador utiliza em várias partes do código para descrever o funcionamento do programa. Essas mensagens não são processadas pela máquina. A Figura3b também ilustra um primeiro programa em Python, que vai imprimir as mensagens contidas nas funções print. A Figura 4 exibe o resultado após o uso da tecla F5. Figura 4. Execução do programa da Figura 3b. Introdução à lógica de programação e ao ambiente Python22 Criando um programa em Python Vamos utilizar os conceitos vistos até aqui para criarmos um programa em Python. Enunciado O plano diretor de desenvolvimento urbano de uma cidade determina qual é o percentual de área máximo destinado para garagem em relação à área total do terreno da casa, dependendo da localização desse terreno na cidade. Uma empresa de arquitetura está com vários contratos e necessita calcular rapidamente esse percentual, antes de iniciar os projetos. Faça um programa que recebe as medidas do terreno e da garagem e calcula o percentual de ocupação da área da garagem em relação ao terreno. Algoritmo O algoritmo para esse programa consiste no cálculo da área da garagem, no cálculo da área do terreno e em realizar o quociente entre os dois valores e multiplicar o resultado por 100, para uma resposta em percentual. Lembrando que: área (em metros quadrados) = largura (em metros) × profundidade (em metros). Observe ainda que a operação de multiplicação utiliza o símbolo *. Vejamos a sequência lógica desse algoritmo: 1. Entrar com o valor da largura da garagem em metros. 2. Entrar com o valor da profundidade da garagem em metros. 3. Calcular área da garagem = largura da garagem * profundidade da garagem. 4. Entrar com o valor da largura do terreno em metros. 5. Entrar com o valor da profundidade do terreno em metros. 6. Calcular área do terreno = largura do terreno * profundidade do terreno. 7. Calcular percentual de ocupação = (área da garagem / área do terreno) * 100. 8. Apresentar em tela o resultado. 23Introdução à lógica de programação e ao ambiente Python Programa Python O programa em Python é quase uma tradução direta do algoritmo (considerando a língua inglesa). Observe a clareza do código: Largura_Garagem=float(input("Entre com a largura da garagem em metros: ")) Profundidade_Garagem=float(input("Entre com a pro- fundidade da garagem em metros: ")) #Abaixo, cálculo da área da garagem Area_Garagem=Largura_Garagem * Profundidade_Garagem Largura_Terreno=float(input("Entre com a largura do terreno em metros: ")) Profundidade_Terreno=float(input("Entre com a pro- fundidade do terreno em metros: ")) # Abaixo, cálculo da área do terreno Area_Terreno=Largura_Terreno * Profundidade_Terreno # Agora, cálculo do percentual de ocupação Percentual = ((Area_Garagem)/(Area_Terreno))* 100 print("Percentual de ocupação:",Percentual) A Figura 5 apresenta o código no editor do ambiente Python e a execução do programa, com um exemplo em que a área da garagem é de 30 metros quadrados e a área do terreno da garagem é de 400 metros quadrados. Introdução à lógica de programação e ao ambiente Python24 Figura 5. Programa que calcula o percentual de ocupação da área de garagem em relação ao terreno: (a) algoritmo codificado em Python e (b) execução após uso da tecla F5. (a) (b) Pratique a criação de algoritmos, pois Python será o principal aliado para programar e gerar rapidamente os seus próprios aplicativos. CORMEN, T. H. Desmistificando algoritmos. Rio de Janeiro: Elsevier; Campus, 2014. 188 p. CORMEN, T. H. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: Elsevier; Campus, 2012. 926 p. LAW, S. Filosofia: guia ilustrado Zahar. 2. ed. Rio de Janeiro: Zahar, 2008. 352 p. LUTZ, M. Programming Python. 4. ed. Sebastopol: O’Reilly, 2011. 1585 p. MARUCH, S.; MARUCH, A. Python for dummies. New York: John Wiley & Sons, 2006. 432 p. RUSSELL, S; NORVIG, P. Inteligência artificial. 3. ed. Rio de Janeiro: Elsevier, 2013. 1056 p. Leituras recomendadas LUTZ, M. Python pocket reference: Python in your pocket. 5. ed. Sebastopol: O’Reilly, 2014. 254 p. LUTZ, M.; ASCHER, D. Aprendendo Python. 2. ed. Porto Alegre: Bookman; O’Reilly, 2007. 566 p. MATTHES, E. Curso intensivo de Python: uma introdução prática e baseada em projetos à programação. São Paulo: Novatec, 2016. 656 p. 25Introdução à lógica de programação e ao ambiente Python DICA DO PROFESSOR Python é hoje uma das linguagens de programação mais utilizadas para o desenvolvimento de aplicações, sendo largamente empregada nos mais diversos dispositivos, tais como tablets, celulares, placas de desenvolvimento (existe python para raspberry-pi), computadores PC e Apple, entre tantos outros ambientes de computação. Na Dica do Professor, você verá a importância dessa linguagem e conhecerá os primeiros passos para desenvolver programas. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) A representação do processo de raciocínio baseia-se na definição de declarações conhecidas como premissas, que constituem a base lógica utilizada para a conclusão de um dado problema. Assim, baseado nas premissas de que: - Todo homem é mortal. - Pedro é homem. É possível concluir que: A) Pedro é um mamífero, pois todo homem é mamífero. B) Todo homem é Pedro. C) Todos os mortais são Pedro. D) Pedro é mortal. Highlight E) Todo mamífero é mortal. 2) Veja como os métodos de raciocínio podem ser utilizados nas situações cotidianas da vida: João foi morar algum tempo no interior, em um pequeno sítio, fora da cidade. Uma das coisas interessantes que observou foi o fato de que os galos cantavam pela manhã. Sua curiosidade o levou a acordar antes do sol nascer e observar o momento em que o galo começava a cantar: - Na 1a manhã, o galo cantou exatamente quando o sol estava nascendo no horizonte. - Na 2a manhã, o galo cantou exatamente quando o sol havia nascido a poucos minutos no horizonte. - Na 3a manhã, o galo cantou exatamente quando o sol estava nascendo no horizonte. ... - Na 30a manhã, o galo cantou exatamente quando o sol estava nascendo no horizonte. João também observou que o galo não deixou de cantar em nenhum dos dias. Baseado na narrativa das experiências de João, é possível dizer que: A) Usando o método dedutivo, João concluiu que os galos cantam sempre no nascer do sol. B) Usando o método indutivo, João concluiu que os galos cantam sempre no nascer do sol. C) João não conseguiu chegar a nenhuma conclusão devido ao comportamento imprevisível dos galos. D) Usando o método indutivo, João concluiu o tempo que o planeta Terra leva para girar em torno do próprio eixo. E) Usando o método dedutivo, João concluiu que o galo estava doente. Utilize um mesmo operador lógico para estabelecer a relação entre os conceitos A , B 3) sendo: A B ABERTO FECHADO BRANCO PRETO NOITE DIA A) A : ~B B) A -> B C) A: ~ (~B) D) A + B E) A . B 4) Utilizando as instruções a seguir: I - Em uma folha de papel em branco, desenhe um segmento de reta em qualquer posição: horizontal, vertical ou inclinada. II - Una com outro segmento de reta as extremidades livres dos segmentos de retas já existentes. III - Partindo da ponta escolhida, desenhe outro segmento de reta em qualquer posição que seja diferente da posição do segmento de reta anterior. IV - Escolha uma das pontas do segmento de reta desenhado na folha. Qual seria a sequência de instruções correta de um algoritmo para desenhar um triângulo qualquer? Como sugestão, faça um teste de mesa para validar a sequência correta. A) I, II, III, IV. Highlight B) Falta uma instrução para uso de um compasso, necessário para se desenhar um triângulo. C) I, IV, III, II. D) IV, III, II, I. E) As instruções, quando ordenadas, vão gerar o desenho de um círculo. 5) Com referência à estrutura e à sintaxe da linguagem Python, cujo aprendizado tem sido desenvolvido ao longo da disciplina, analise o programa a seguir: nome=input("Nome do aluno? ") P1=float(input("Entre com a nota da Prova 1 ")) P2=float(input("Entre com a nota da Prova 2 ")) media=(P1+P2)/2 print("ALUNO: ",nome) print("Média= ",media) É possível afirmar que: A) O programa recebe o nome e as notas das provas de um aluno, calcula a média e emite uma mensagem contendo o nome do aluno e a média calculada. B) O programa recebe o nome e as notas das provas de um aluno, calcula a média e emite uma mensagem contendo o nome do aluno, a média calculada e a mensagem "ALUNO APROVADO". C) O programa recebe o nome e as notas das provas de um aluno, calcula a média e emite uma mensagem contendo o nome do aluno, a nota da prova P1, a nota da prova P2, a média calculada e a mensagem "ALUNO APROVADO". O programa recebe o nome e as notas das provas de um aluno, calcula a média e emite D) Highlight Highlight uma mensagem contendo o nome do aluno, a nota da prova P1, a nota da prova P2 e a média calculada. E) O programa recebe o nome e as notas das provas de um aluno, calcula a média e emite uma mensagem contendo o nome do aluno, a média calculada e a mensagem "ALUNO REPROVADO". NA PRÁTICA Os computadores são ferramentas úteis para análise de mercado, levantamento de custos, registros de vendas, entre outras operações que envolvem diretamente o mercado de consumo de produtos e serviços. Assim, com a constante flutuação das moedas estrangeiras, a situação do mercado consumidor e o momento econômico são alguns dos fatores que exigem da indústria de produtos e de serviços uma regular análise e definição de preço final de venda. Um desafio preocupante para a indústria é a elaboração do preço final de venda de um determinado produto. Raquel foi contratada por uma grande fábrica de calçados para auxiliar na criação de uma ferramenta que ajudasse na determinação do valor de custo de um produto e o seu preço final de mercado. Para isso, Raquel usou o ambiente e a linguagem Python. Acompanhe o Na Prática! SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Python Brasil Acesse o link e conheça a página oficial do Python no Brasil. Esse é um endereço essencial para todo o programador da linguagem. Além de documentação, você pode baixar versões para diferentes modelos de computadores e sistemas operacionais. Conteúdo interativo disponível na plataforma de ensino! Code Este site é uma iniciativa internacional em português para aproximar os jovens do mundo inteiro, para aprender ciências da computação e programação. Existem módulos e opções de projetos e formas de ensinar para crianças até 11 anos, jovens adolescentes até 15 anos e até mesmo jovens adultos acima de 18 anos. Excelente referência para quem está começando a programar. Conteúdo interativo disponível na plataforma de ensino! Python Página dedicada aos fãs de Python. Muitas publicações e referências, incluindo ofertas de emprego, bem como cursos de formação. Segundo a própria página, a missão é “ajudar quem está começando a conhecer o Python, assim como divulgar cursos, eventos, jobs, congressos, etc.”. Conteúdo interativo disponível na plataforma de ensino!
Compartilhar