A lógica relaciona-se com a razão, investiga a correção do pensamento/raciocínio. Estuda e ensina a colocar ordem no pensamento. No nosso caso, usaremos a lógica, tanto a matemática como a de programação, para nos ajudar a compreender, modelar e propor soluções viáveis para problemas computacionais.
Lógica de Programação é a técnica de desenvolver sequências lógicas para atingir um determinado objetivo. Essas sequências lógicas são adaptadas para linguagem de computador pelo programador a fim de produzir software. Veremos mais sobre isso em seguida.
Um algoritmo é uma sequência finita de passos para realizar uma tarefa ou solucionar um problema. Esses passos serão definidos a partir das sequências lógicas desenvolvidas para atingir algum objetivo, e são ordenados convenientemente. A ordem dos passos é muito importante. Mudando a ordem dos passos alteramos um algoritmo.
Algoritmos não são exclusivos da Computação, mas fazem parte do nosso dia a dia:
Os algoritmos são importantes em Ciência da Computação porque os computadores fazem exatamente aquilo que dizemos para eles fazerem. Dessa forma, precisamos estabelecer muito claramente quais passos ele deve seguir para cumprir uma determinada tarefa.
Na prática, criamos algoritmos com o objetivo de automatizar tarefas:
Um dado é uma sequência de símbolos. São elementos conhecidos de um problema (são os fatos em sua forma primária, como observamos no mundo).
Quando organizamos os dados atribuimos significado, eles ganham valor, tornam-se informação. Além disso, Um mesmo conjunto de dados pode ser utilizado para representar informações de natureza distintas.
Por exemplo:DADO e INFORMAÇÃO não são termos exclusivos da computação. Foram cunhados por outras áreas,tais como a semiótica.
A solução de qualquer problema envolve um processamento, que manipula dados de entrada e gera dados de saída. Solucionar o problema consiste exatamente em gerar dados de saída esperados a partir dos dados de entrada.
Nesta disciplina, queremos aprender a:
Dado um problema,
determinar uma sequência de instruções tal que,
fornecidos os dados de entrada,
a execução da sequência da instruções
resulte como saída a solução do problema.
Entrada: carro, macaco mecânico, pneu reserva Saída: carro com o pneu trocado
Faça:
Afrouxar ligeiramente os parafusos; Suspender o carro; Retirar os parafusos e o pneu; Colocar o pneu reserva; Apertar os parafusos; Abaixar o carro; Dar o aperto final nos parafusos.
Ou seja, construímos um algortimo que é generalizado para qualquer carro, basta seguir os passos do algortimo desenvolvido com as devidas entradas que a saída será a mesma.
Entrada: número A, número B, número C Saída: média dos 3 números
Faça:
Somar os números A, B e C Dividir a soma por 3
A mesma ideia serve para esse exemplo, independente de quais sejam os números representados por A, B ou C, a resposta sempre será a média dos 3 números.
Existem diversas formas de representação de algoritmos.
Não existe um consenso sobre qual é a melhor forma, cada uma tem vantagens e desvantagens.
Algumas formas tratam os problemas apenas no nível lógico, abstraindo os detalhes relacionados de implementação.
Outras formas entram em mais detalhes e são mais específicas, porém que podem obscurecer a idéia principal.
Entre as formas mais conhecidas, podemos citar:
Descrição Narrativa;
Fluxograma Convencional;
Pseudocódigo, também conhecido como portugol.
Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural.
Uso da linguagem natural pode gerar ambiguidades e imprecisões.
Por exemplo, no algoritmo do pneu, o que significa “Afrouxar ligeiramente o parafuso”?
Não seria mais preciso dizer “Afrouxar o parafuso, girando o mesmo 33.8° no sentido anti-horário”?
Quando criamos algoritmos, frequentemente precisamos utilizar estruturas condicionais e de repetição. Isto é, precisamos tomar decisões ou repetir passos.
Exemplo de um Algoritmo para trocar uma lâmpada: