You are on page 1of 15

Introdução

O presente trabalho e sobre de Lógicas de Programação, onde encontramos concretamente


alguns subtemas no circular disso.
São objetivos deste trabalho saber ou compreender como quando se programa logicamente ou
usando Lógica de Programação como ela é feita, e como trabalhar com as lógicas de
programação.
Este trabalho esta organizado consoante o tema seguinte: Lógicas de Programação e os seus
subtemas consoante assim como está organizado o trabalho.
A metodologia utlizada foi a pesquisa no motor Google, consoante a bibliografia apresentada no
presente trabalho e enriquecida pela pesquisa bibliográfica encontrada no âmbito da pesquisa.
Historia

A lógica da programação é, sem dúvida, a primeira coisa que deve ser estudada se você quiser se
tornar um bom programador, seja qual for a linguagem. Porque ela é tão importante? Imagine
que agora você é um soldado que recebe ordens e as coloca em prática. O seu capitão lhe diz:
“Soldado, sua missão é encontrar a arma principal do inimigo e sabotá-la, como também fazer o
reconhecimento do local. Assim que você se infiltrar, vai procurar colher o máximo possível de
informações. No entanto, antes das 14:00 deve sair do local. Se observar alguma movimentação
suspeita, saia imediatamente. E lembre-se, sua missão principal é encontrar a arma principal do
inimigo e sabotá-la.” Nessa missão, o soldado precisa sempre se lembrar das ordens do capitão, e
para que ela seja bem sucedida é necessário ele aplicar todas elas. Vamos analisar essa missão:

Objetivos principal: Encontrar e sabotar a arma principal do inimigo.


Objetivo secundário: Colher o máximo de informações possíveis.
Condições: O soldado só vai terminar a missão com êxito se: Não houver nenhuma
movimentação suspeita, que faça com que ele saia do local antes do horário, e, caso isso não
ocorra, ele deve sair de lá sem falta as 14:00.

Quando vamos programar, devemos ser como o comandante. Primeiro, devemos saber qual o
objetivo principal e daí programar as suas condições para que esse objetivo seja atingido.

Como tudo começou

A lógica de programação é quando se pretende realizar alguma função ou um esquema lógico


por meio de parâmetros e metas.

Existe uma associação direta da Lógica de Programação com o Raciocínio Matemático, onde o
importante é a interpretação de um problema e a utilização correta de uma fórmula. De fato, não
existe “fórmulas” em informática, o que existe é nosso modo de pensar em como resolver e
extrair o máximo de informações de um problema, de maneira eficaz e eficiente sobre um ângulo
de visão. Essa solução precisa ser exteriorizada e expressa numa linguagem conhecida. A lógica
da programação entra nesse ponto, para desenvolvermos soluções e algorítimos para apresentar
essa solução ao mundo. A primeira pessoa a pensar em usar lógica matemática para a
programação foi John McCarthy, ele propôs usar programas para manipular com sentenças
instrumentais comuns apropriadas à linguagem formal, ou seja, o programa básico formará
conclusões imediatas a partir de uma lista de premissas. Essas conclusões serão tanto sentenças
declarativas quanto imperativas. Quando uma sentença imperativa é deduzida, o programa toma
uma ação correspondente.
A primeira linguagem de alto nível do mundo foi a Plankalkül, criada pelo cientista alemão
Konrad Zuse, entre os anos 1942-1946 no desenvolvimento dos primeiros computadores. Ela é
considerada de alto nível porque em termos simples, ela é mais “humana” e está longe do código
de máquina, se aproximando mais da linguagem humana. Vamos entender melhor o que é uma
linguagem de alto nível e a diferença dela e a de máquina.
Uma pessoa que não entende nada de programação, mas sabe inglês, entenderia algumas
palavras da linguagem e poderia facilmente interpretar alguma coisa desse código em PASCAL.
“Program” é programa em inglês, “begin” é começar, “write” é escrever e end é fim. Mesmo sem
saber programar, a pessoas que sabe um pouco de inglês chegaria a mais ou menos a essa
conclusão: “É um programa e vai começar a escrever alguma coisa e depois terminar”. E é
justamente isso!
Quando nos falamos de linguagem mais humana é justamente pelo fato de a entendermos
melhor, de ser humanamente mais fácil de se compreender. Você facilmente entenderia, com um
pouco de estudo, esse código, por exemplo:
program HelloWorld;

begin
writeln(‘Hello World’);
end.
O que é Lógica de Programação

Lógica de Programação é a técnica de desenvolver sequências lógicas para atingir um


determinado objectivo. Essas sequências lógicas são adaptadas para linguagem de computador
pelo programador a fim de produzir software.

Uma sequência lógica é denominada algoritmo. Então podemos dizer em linguagem mais
coloquial, que um algoritmo é uma sequência de passos para atingir um determinado objectivo.
Como podemos ver a lógica de programação trata basicamente de construir algoritmos que serão
transformados em programas de computador.

Programas de computador, portanto são instruções lógicas que obtém dados do meio externo
(que pode ser um usuário ou um arquivo) e fazem o processamento desses dados gravando as
informações alguma mídia como o HD ou enviando-as para o usuário através de algum
dispositivo. Na realidade, tudo o que vemos em um computador em termos de sistema
operacional e aplicativos, são programas que foram desenvolvidos por programadores. O
programador necessita ter um pensamento lógico bastante desenvolvido, analisando sempre
causa e efeito, e acima de tudo ser paciente e persistente.

Quem quer começar uma carreira como programador deve primeiro aprender lógica de
programação. Uma base sólida em lógica garante ao iniciante conhecimentos suficientes para
aprender qualquer linguagem de programação, seja ela C, C++, Java, Object Pascal (Delphi),
PHP, VB, C#, etc.

Noções de lógica

Segundo o dicionário Houaiss da língua portuguesa, lógico é um “raciocínio rigoroso,


coerente, acertado; que decorre ou procede de acordo com uma ordem normal; conseqüente”.
Um raciocínio lógico, portanto, está relacionado à organização de idéias, ordem de
pensamentos, nexo ou coerência.
Por exemplo, sejam três números A, B e C:
Se A é maior que B,
e C é maior que A,
é lógico que C é maior que B.
O raciocínio lógico é aplicado na matemática, na filosofia, na computação e em outras
ciências, assim como nas tarefas do dia-a-dia. Por exemplo, ao escrever uma mensagem ou
planejar as férias, certamente será necessário empregar algum raciocínio lógico para transmitir
sua idéia com fidelidade ou se divertir como gostaria.

Também do dicionário da Houaiss pode-se selecionar alguns significados para lógica:


“· maneira rigorosa de raciocinar; coerência, fundamento;
· encadeamento coerente de alguma coisa que obedece a certas convenções ou regras;
· organização e planejamento das instruções, assertivas, etc., em um algoritmo, a fim de
viabilizar a implantação de um programa”. (Esta última definição é relacionada à informática).

Lógica de programação

Pode ser definida como o emprego de raciocínio lógico para expressar, por meio de
uma linguagem própria, instruções que compõe um programa a ser executado por um
computador.

Este procedimento visa resolver um determinado problema ou obter um produto final, isto
é, um programa. Antes de começar a programar, é necessário caracterizar clara e
completamente
o problema e o objetivo almejado, devendo-se ter em mente os seguintes passos [1]:
a) entender o problema proposto;
b) verificar todos os dados disponíveis para resolvê-lo;
c) se o problema for complexo, dividi-lo em partes menores;
d) ter bem definido seu objectivo. Qual resultado se deseja alcançar? Trace os passos
necessários pra chegar lá!
e) se não conseguir chegar ao seu objectivo, reflicta a esse respeito e reveja os passos aqui
mencionados.
Assim como o pensamento humano pode se
manifestar em diferentes línguas, a lógica de programação
pode ser expressa em uma das várias linguagens de
programação existentes. Estas linguagens compreendem
detalhes e peculiaridades próprias que pouco tem a ver
com a lógica de programação propriamente dita. Por este
motivo, para se atentar ao raciocínio sem se perder nos
detalhes, usa-se os algoritmos.

Formalismo

Um programa de computador é essencialmente um algoritmo que diz ao computador os passos


específicos e em que ordem eles devem ser executados, como por exemplo, os passos a serem
tomados para calcular as notas que serão impressas nos boletins dos alunos de uma escola. Logo,
o algoritmo pode ser considerado uma sequência de operações que podem ser simuladas por uma
máquina de Turing completa.
Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informação é
lida de uma fonte de entrada, processada e retornada sob novo valor após processamento, o que
geralmente é realizado com o auxílio de uma ou mais estruturas de dados.
Para qualquer processo computacional teórico, o algoritmo precisa estar rigorosamente definido,
especificando a maneira que ele se comportará em todas as circunstâncias. A corretude do
algoritmo pode ser provada matematicamente, bem como a quantidade assintótica de tempo e
espaço (complexidade) necessários para a sua execução. Estes aspectos dos algoritmos são alvo
da análise de algoritmos. As implementações, porém, podem se limitar a casos específicos.
A maneira mais simples de se pensar um algoritmo é por uma lista de procedimentos bem
definida, no qual as instruções são executadas passo a passo a partir do começo da lista, uma
ideia que é pode ser facilmente visualizada através de um fluxograma. Tal formalização adota as
premissas da programação imperativa, que é uma forma mecânica para visualizar e desenvolver
um algoritmo. Concepções alternativas para algoritmos variam em programação funcional e
programação lógica.
Termino de Algoritmo

Alguns autores restringem a definição de algoritmo para procedimentos que eventualmente


terminam. Minksy constatou que se o tamanho de um procedimento não conhecido de antemão,
tentar descobri-lo é problema indecidível já que o procedimento pode ser executado
infinitamente, de forma que nunca se terá a resposta. Alan Turing provou em 1936 que não existe
máquina de Turing para realizar tal análise para todos os casos, logo não há algoritmo para
realizar tal tarefa para todos os casos. Tal condição é conhecida actualmente como problema da
parada. Basicamente, isto quer dizer que não existe um programa de computador que possa
antever, de forma geral, se um outro programa de computador vai parar algum dia.
Para algoritmos intermináveis o sucesso não pode ser determinado pela interpretação da resposta
e sim por condições impostas pelo próprio desenvolvedor do algoritmo durante sua execução.
Por exemplo, podemos querer um algoritmo interminável para controlar um sinal de trânsito.

Implementação

A maioria dos algoritmos é desenvolvida para ser implementada em um programa de


computador. Apesar disso eles também podem ser implementados por outros modos tais como
uma rede neural biológica (tal como no cérebro quando efectuamos operações aritméticas) em
circuitos eléctricos ou até mesmo em dispositivos mecânicos.
Para programas de computador existem uma grande variedade de linguagens de programação,
cada uma com características específicas que podem facilitar a implementação de determinados
algoritmos ou atender a propósitos mais gerais.

Analise de Algoritmo

A análise de algoritmos é um ramo da ciência da computação que estuda as técnicas de projecto


de algoritmos e os algoritmos de forma abstracta, sem estarem implementados em uma
linguagem de programação em particular ou implementadas de algum outro modo. Ela preocupa-
se com os recursos necessários para a execução do algoritmo tais como o tempo de execução e o
espaço de armazenamento de dados. Deve-se perceber que para um dado algoritmo pode-se ter
diferentes quantidades de recursos alocados de acordo com os parâmetros passados na entrada.
Por exemplo, se definirmos que o factorial de um número natural é igual ao factorial de seu
antecessor multiplicado pelo próprio número, fica claro que a execução de factorial(10) consome
mais tempo que a execução de factorial(5).
Um meio de exibir um algoritmo a fim de analisá-lo é através da implementação por
pseudocódigo em português estruturado. O exemplo a seguir é um algoritmo em português
estruturado que retorna (valor de saída) a soma de dois valores (também conhecidos como
parâmetros ou argumentos, valores de entrada) que são introduzidos na chamada da função:

função Soma De Dois Valores (A numérico, B numérico)


inicio
declare SOMA numérico
SOMA <-- A + B
retorne (SOMA)
fim

Classificação

Classificação por implementação

Pode-se classificar algoritmos pela maneira pelo qual foram implementados.

 Recursivo ou iterativo - um algoritmo recursivo possui a característica de invocar a si


mesmo repetidamente até que certa condição seja satisfeita e ele é terminado, que é um
método comum em programação funcional. Algoritmos iterativo usam estruturas de
repetição tais como laços, ou ainda estruturas de dados adicionais tais como pilhas, para
resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e
vice versa, mas que pode ter mais ou menos complexidade em sua construção. É possível
construir algoritmos que sejam ao mesmo tempo iterativo e recursivo, provavelmente para
aproveitar alguma optimização de tempo ou espaço que isso permita.

 Lógico - um algoritmo pode ser visto como uma dedução lógica controlada. O componente
lógico expressa os axiomas usados na computação e o componente de controle determina a
maneira como a dedução é aplicada aos axiomas. Tal conceito é base para a programação
lógica.
 Serial ou paralelo - algoritmos são geralmente assumidos por serem executados instrução à
instrução individualmente, como uma lista de execução, o que constitui um algoritmo serial.
Tal conceito é base para a programação imperativa. Por outro lado existem algoritmos
executados paralelamente, que levam em conta arquitecturas de computadores com mais de
um processador para executar mais de uma instrução ao mesmo tempo. Tais algoritmos
dividem os problemas em sub-problemas e o delegam a quantos processadores estiverem
disponíveis, agrupando no final o resultado dos sub-problemas em um resultado final ao
algoritmo. Tal conceito é base para a programação paralela. De forma geral, algoritmos
iterativos são paralelizáveis; por outro lado existem algoritmos que não são paralelizáveis,
chamados então problemas inerentemente seriais.
 Determinístico ou não-determinístico - algoritmos determinísticos resolvem o problema
com uma decisão exacta a cada passo enquanto algoritmos não-determinísticos resolvem
o problema ao deduzir os melhores passos através de estimativas sob forma de
heurísticas.
 Exacto ou aproximado - enquanto alguns algoritmos encontram uma resposta exata,
algoritmos de aproximação procuram uma resposta próxima a verdadeira solução, seja
através de estratégia determinística ou aleatória. Possuem aplicações práticas sobretudo
para problemas muito complexos, do qual uma resposta correta é inviável devido à sua
complexidade computacional.

Classificação por paradigma

Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais


como:

Divisão e conquista - algoritmos de divisão e conquista reduzem repetidamente o problema em


sub-problemas, geralmente de forma recursiva, até que o sub-problema é pequeno o suficiente
para ser resolvido. Um exemplo prático é o algoritmo de ordenação merge sort. Uma variante
dessa metodologia é o decremento e conquista, que resolve um sub-problema e utilização a
solução para resolver um problema maior. Um exemplo prático é o algoritmo para pesquisa
binária.

Programação dinâmica - pode-se utilizar a programação dinâmica para evitar o re-cálculo de


solução já resolvidas anteriormente.
Algoritmo ganancioso - um algoritmo ganancioso é similar à programação dinâmica, mas difere
na medida que as soluções dos sub-problemas não precisam ser conhecidas a cada passo, uma
escolha gananciosa pode ser feita a cada momento com o que até então parece ser mais
adequado.

Programação linear

 Redução - a redução resolve o problema ao transformá-lo em outro problema. É chamado


também transformação e conquista.
 Busca e enumeração - vários problemas podem ser modelados através de grafos. Um
algoritmo de exploração de grafo pode ser usado para caminhar pela estrutura e retornam
informações úteis para a resolução do problema. Esta categoria inclui algoritmos de busca e
backtracking.
 Paradigma heurístico e probabilístico - algoritmos probabilísticos realizam escolhas
aleatoriamente. Algoritmos genéticos tentam encontrar a solução através de ciclos de
mutações evolucionárias entre gerações de passos, tendendo para a solução exata do
problema. Algoritmos heurísticos encontram uma solução aproximada para o problema.

Classificação por campo de estudo

Cada campo da ciência possui seus próprios problemas e respectivos algoritmos, adequados para
resolvê-los. Exemplos clássicos são algoritmos de busca, de ordenação, de análise numérica, de
teoria de grafos, de manipulação de cadeias de texto, de geometria computacional, de análise
combinatória, de aprendizagem de máquina, de criptografia, de compressão de dados e de
interpretação de texto.

Classificação por complexidade

Ver artigo principal: Complexidade computacional. Alguns algoritmos são executados em tempo
linear, de acordo com a entrada, enquanto outros são executados em tempo exponencial ou até
mesmo nunca terminam de serem executados. Alguns problemas possuem múltiplos algoritmos
enquanto outros não possuem algoritmos para resolução.
Programação lógica

Paradigma baseado no Cálculo de Predicados (Lógica Matemática Dedutiva)


Exemplo:
Zé Carioca é um papagaio.
Todo papagaio é uma ave.
Logo, Zé Carioca é uma ave.

Programas são declarativos: especificam resultados desejados em vez de procedimentos para


produzi-los
Semelhança com paradigma functional.

Separação de lógica e controle:


Lógica: definição do que deve ser solucionado
Controle: como a solução pode ser obtida
Programador escreve definições que permitam a dedução da solução.

Elementos de um programa

Proposições lógicas que formam uma base de fatos conhecidos


Regras que definem como deduzir novas proposições a partir da base
Consultas à base (execução do programa).

Elementos de um programa: exemplo

Proposição (fato)
Zé Carioca é um papagaio.
Regra de inferência
Todo papagaio é uma ave.
Consulta
Zé Carioca é uma ave?
Solução/resposta/resultado
Sim.
Elementos de um programa: exemplo

Proposições (fatos)
João é pai de José.
João é pai de Maria.
Consulta
João é pai de quem?
Solução/resposta/resultado
José
Maria

Elementos de um programa: exemplo

Proposição (fato)
O fatorial de 0 é 1.
Regra
O fatorial de um número N (N > 0) é igual a N*fatorial(N-1).
Consultas/Respostas:
O fatorial de 2 é 200?
Resposta: Não
Consulta: Quanto é o fatorial de 3?
Resposta: 6

Bases da programação lógica

Lógica matemática
Álgebra de Boole
Descrição de proposições e verificação quanto à validade das mesmas
Cálculo de predicados
Lógica simbólica
Proposições envolvem símbolos e operadores lógicos
Cláusulas de Horn: proposições com forma restrita, 2 partes.
Origens da programação lógica

Lógica matemática, lógica simbólica e cálculo de predicados


Linguagem Prolog
Início da década de 70: colaboração entre universidades
Colmerauer e Roussel (Marseille): processamento de linguagem natural
Kowalski (Edinburgh): prova automatizada de teoremas
Desenvolvimento independente a partir de meados de 70.

Vantagens e Desvantagens

Vantagens

Separação entre lógica de programa e controle


Programas fáceis de entender e manter.

Até aqui, nada parece justificar o investimento de ter duas pessoas realizando a mesma tarefa,
afinal, desenvolvimento de software não envolve tantos riscos quanto aviação.

No entanto, a programação em par traz diversas vantagens a todos os envolvidos:

Compartilhamento do conhecimento

Como todo o código produzido é visto por, pelo menos, duas pessoas é menor o risco de existir a
figura do “responsável pelo código do produto X”. O conhecimento pode ser ainda mais
compartilhado, principalmente se os pares forem revezados com frequência.

Isso é, obviamente, bom para o projeto. Mas também é muito bom para os desenvolvedores.
Afinal de contas, é comum desenvolvedores que não podem tirar férias pois caso contrário o
projeto onde eles trabalham não pode ser mantido.

Ser o responsável único por determinado projeto, ou parte dele, quase sempre é um fardo pesado
demais que faz com que o desenvolvedor seja levado ao esgotamento.

Desvantagens

Eficiência
Baixa expressividade para certas aplicações.
Conclusão

Neste trabalho abordamos acerca de Lógicas de Programação e dentro do tema fora destacados
alguns subtemas de forma uma forma resumida . E concluímos que apesar do tema e dos
subtemas serem novos, tentamos apresentar e aprofundar mais, aprofundando tivemos alguns
conhecimentos acerca do tema cima referido ou citado mas com isso agente não parou de ter
mais monte de conhecimentos consoante o tema, uma vez que o tema foi gostoso.
Não cumprimos todos os objetivos que nos tínhamos proposto, e cabe ao docente dizer algo a
nós a cerca do trabalho. Este trabalho foi muito importante para o nosso conhecimento,
compreensão e aprofundamento de mais conhecimento de Programação usando a Lógica,uma
vez que deu-nos alguns conhecimentos que não tínhamos acerca de Programação Lógicas e
espera-se que haja ais desenvolvimento do docente acerca do tema para a melhor compreensão.
Referencias Bibliográficas

Sebesta, R. Conceitos de Linguagens de Programação. Bookman, 2011. Capítulo 16: Linguagens


de programação lógica.

https://pt.wikibooks.org/

You might also like