Lógica de Programação

Caderno de Anotações
14 min readJul 11, 2019

--

1. FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO

Introdução

Lógica

A lógica é o uso do raciocínio na busca da melhor solução para um problema ou situação.

Lógica é uma área da Filosofia dedicada à reflexão sobre formas de raciocínio (que podem ser diferentes).

A lógica define o encadeamento de ações mais coerentes para chegar a um objetivo.

Exemplos:

  • a Matemática é baseada em princípios lógicos;
  • o computador é uma invenção lógica — sequência de instruções/comandos lógicos
  • programas de computador — utiliza a lógica como princípio mais importante em seu desenvolvimento — todo aplicativo deve ser desenvolvido de forma racional, com sequências lógicas, coerentes e eficazes de instruções.

Principal competência do profissional da área de Informática é a capacidade de raciocínio lógico.

Programação é baseada em raciocínio lógico.

A lógica de programação é uma teoria, que pode ser aplicada a qualquer linguagem de programação. A lógica é requisito básico para aprender programação e facilita aplicação.

Sequências Lógicas

Sequências lógicas: incluem as instruções (o que deve ser feito, uma instrução equivale a um comando) e a ordem em que as instruções devem ser realizadas (quando). O objetivo da sequência lógica é encontrar um resultado ou uma solução para um problema.

Sequências lógicas são etapas a serem realizadas para atingir um objetivo. São os passos executados para conseguir solucionar um problema.

Instruções: regras para situações específicas. São as ações da sequência lógica: informações, ordens ou comando que indicam o que deve ser feito. Cada ordem de uma sequência lógica é uma instrução (observe que uma ordem isolada não configura um processo completo).

Programa: sequência lógica de instruções, com um objetivo final a ser atingido. Um programa é uma sequência lógica de instruções organizadas para manipular informações inseridas pelo usuário.

Programas de computadores — sequências lógicas com instruções bem definidas, permitem interatividade (inserção de informações e realização de tarefas).

Lógica de Programação: cumpre o papel de desenvolver a habilidade de criar sequências lógicas de instruções, padronizadas e registradas. Permite comunicar a terceiros o raciocínio lógico empregado na resolução de problemas. Propicia pensamento estruturado.

Algoritmos

Criação de algoritmos necessita estruturação do raciocínio lógico. O algoritmo é a sequência ordenada de passos.

Sequências lógicas devem ser construídas e registradas de forma padronizada.

Uso de regras e padrões na construção de sequências lógicas.

Desenvolvedor de programas e aplicativos: soluções lógicas para problemas de clientes, por meio da elaboração de algoritmos, criados para resolução de um problema. Regras e padrões permitem que algoritmos sejam compreendidos por outras pessoas da área e de outras áreas. O algoritmo é a proposta estruturada de solução, e não a solução em sim; o programa ou aplicativo é a solução propriamente dita.

Algoritmos, além da área da informática, também estão presentes em situações cotidianas: manuais de instruções, receitas, tutoriais, bulas de remédios, passo-a-passo.

Em informática, algoritmos têm mesmos princípios que os utilizados em outros contextos:

  • linguagem clara e concisa;
  • encadeamento lógico de instruções;
  • objetivo claro.

Maior importância do algoritmo é facilitar o entendimento das soluções propostas por outras pessoas.

O algoritmo não é a solução de um problema, a solução do problema é dada pelo programa e o algoritmo é o projeto deste programa.

Algoritmo é a descrição detalhada das etapas que devem ser percorridas pelo programa para se chegar a uma solução. Tem início, meio e fim e um objetivo claro do que deve ser alcançado.

Algoritmo: conjunto de regras e procedimentos lógicos perfeitamente definidos que levam à solução de um problema por meio de um número finito de etapas.

Quando um programa não funciona corretamente, houve algum problema na estruturação do algoritmo.

Programas, Aplicativos ou Softwares

Programas, Aplicativos ou Softwares: programas são algoritmos codificados em determinada linguagem de programação. As linguagens de programação sofrem mudanças ao longo do tempo, mas a lógica por trás dos algoritmos, não!

Aplicativos são programas específicos que buscam resolver um problema a partir de dados informados pelo usuário. Cada aplicativo tem uma função específica. Exemplos: editor de textos, editor de tabelas, GPS, troca de mensagens, etc.

Programas só resolvem situações previamente definidas. Assim, programar é prever situações e tomar decisões para alcançar determinado objetivo.

Solução de um problema começa com a descrição clara e precisa do problema. Em seguida, deve-se estabelecer uma sequência de passos automática e repetitiva para a solução do problema; esta sequência é o algoritmo.

Objetivos de um programa: Softwares funcionais e estáveis têm sequência lógica perfeita. Cada algoritmo foi desenvolvido para obter a melhor solução possível. Lógica aplicada é clara e concisa, ou seja, possui menor tempo de processamento. Os resultados são corretos e entregues com rapidez e eficiência

Sucesso do programador: aperfeiçoamento da lógica, raciocínio lógico e crítico.

Quatro Etapas para o Desenvolvimento de um Programa (Software):

  1. Estudo do problema — análise do problema e do contexto, identificação da situação (características e soluções possíveis).
  2. Estruturação do algoritmo — estruturação da proposta de solução do problema, por meio de um projeto de programa (que é o próprio algoritmo).
  3. Desenvolvimento do código (programação) — escrita do algoritmo a partir de regras e padrões de uma linguagem de programação específica, exemplo de linguagens mais comuns: C, C++, C#, Java, PHP, VB, Python, Ruby. Codificação do algoritmo.
  4. Implantação da solução — implantação do programa para solução de problemas em situações reais.

Para desenvolver um programa é preciso saber, primeiro, o que precisa ser feito e, depois, como isso será feito. A lógica trata do planejamento (o que) e a linguagem trata da execução (como).

Três Formas de Representar Algoritmos:

Registro e construção dos algoritmos, em informática, podem ser feitos de várias maneiras:

  1. Descrição narrativa;
  2. Diagrama de blocos (fluxograma);
  3. Linguagem estruturada (pseudocódigo).

1. DESCRIÇÃO NARRATIVA

É a forma mais simples de criar algoritmos e a mais próxima da linguagem comum. Ex: receita culinária que descreve o que precisa ser feito de forma clara e na ordem correta, utilizando a linguagem cotidiana. Bastante utilizado em manuais de instruções, bulas de remédios, etc.

Regras para desenvolver algoritmos:

  1. Ser direto — frases curtas, simples e com apenas um verbo;
  2. Ser detalhista — descrever, com detalhes, todos os passos necessários;
  3. Ser lógico — encadear ações na ordem em que devem acontecer;
  4. Ser objetivo — menor número de passos até objetivo proposto (não pular passos importantes);
  5. Ser claro — evitar ambiguidades; expressões e palavras com duplo sentido;
  6. Ser compreensível — instruções devem ser compreendidas por profissionais de outras áreas;
  7. Ser crítico — leitura crítica do algoritmo, buscar melhorar escrita e encadeamento lógico.

2. DIAGRAMA DE BLOCOS OU FLUXOGRAMA

Técnica intermediária que emprega formas geométricas e frases curtas para descrever um processamento — método padronizado que esquematiza o algoritmo: define a entrada, o processamento e a saída de dados;

Método gráfico de representação de algoritmos. Passos lógicos são representados de forma padronizada — definição de uma sequência de símbolos, com significados bem definidos. Principal função do diagrama é a fácil visualização dos passos de um processamento.

Uso padronizados dos símbolos e das palavras. Ex: retângulo representa uma ação; losango expressa uma condição (uma dúvida ou pergunta).

Fluxogramas permitem representar soluções de processos complexos com pouca escrita, em que cada ação, instrução ou processamento é descrito resumidamente utilizando um símbolo geométrico. Representam o fluxo do processamento.

Padrão de utilização das principais formas geométricas:

  1. Terminal — indica ponto de início ou fim de uma sequência lógica;
  2. Verificação, condição ou decisão (losango) — indica ponto de teste (verdadeiro ou falso) ou ponto de tomada de decisão (sim ou não). Uma entrada e duas saídas — uma saída para cada situação ou resposta.
  3. Seta de fluxo — indica sentido do fluxo de informações e instruções. Conecta todos os símbolos do diagrama.
  4. Ação ou processamento (quadrado ou retângulo) — indica ação/processamento de qualquer tipo.
  5. Entrada e saída de dados — utiliza símbolos que indicam entrada (leitura/captura de dados) ou saída (gravação/apresentação da informação) de dados.
  6. Conector (círculo) — indica ponto a partir do qual o algoritmo ou processamento irá continuar em outro lugar, onde repetirá mesmo símbolo (com número ou letra comum). Dá continuidade entre duas partes de um mesmo processo descrito em locais separados.
Simbologia padrão do Fluxograma

Fluxograma representa passos a serem realizados por um software, por exemplo.

3. LINGUAGEM ESTRUTURADA (PSEUDOCÓDIGO)

É a forma mais detalhada e mais próxima dos códigos de programação. Deve-se escrever as sequências lógicas de instruções e processamentos. As estruturas lógicas aparecem na sequência em que devem ser executadas. Requer a utilização de mais comandos escritos. Usa termos encadeados e organizados, semelhantes às linguagens de programação, mas não exige conhecimento prévio de nenhuma linguagem. A elaboração do algoritmo pode ser mais demorada, mas facilita programação posterior em linguagem específica, simplificando o processo.

O pseudocódigo é uma técnica que organiza os algoritmos em blocos formados por comandos escritos. Permite tradução quase direta para qualquer linguagem de programação.

Não possui estrutura complexa e rígida e não exige ambiente especial de edição (as sintaxes em linguagem específica, sim). É útil para elaborar projetos de programas.

Comandos:

  • Leia — inserção ou captura de dados
  • Escreva — exibição de dados.

Declarações:

  • variáveis — variáveis são espaços em memória para guardar um tipo de dado ou informação; esses espaços devem receber nomes únicos, com referência exclusiva.
  • expressões aritméticas

Tipos de dados:

  • literais (caracteres): alfanumérico, string, literal, cadeia. Deve estar entre aspas (ex: “Jana”). Não é possível fazer cálculos com uma variável declarada como dado literal. Mesmo que a variável armazene números, será considerada alfanumérica, portanto, indisponível para cálculos.
  • numéricos: inteiros (positivos ou negativos) ou reais (inclui números fracionados — separador é o ponto e não a vírgula)
  • lógicos (dados booleanos): dois valores condicionais para tomada de decisão. Ex: V ou F; sim ou não; 0 ou 1.

Constantes e Variáveis:

  • Constantes: todo valor fixo que não se altera durante execução do programa. Podem ser numéricas, literais ou lógicas.
  • Variáveis: representam endereços da memória RAM que armazena temporariamente valores e informações. Esses endereços têm nome e conteúdo; o conteúdo é manipulado a cada vez que o nome da variável é mencionada. Armazenam qualquer tipo de dados. Necessário definir nome simbólico para identificação da variável, o tipo de dado a ser recebido e um valor inicial. A criação de variáveis ocorre no momento de codificação do programa — um nome simbólico é atribuído a um determinado endereço da memória RAM.
  • Regras de nomeação de variáveis: inicia com uma letra; não tem espaços em branco; não tem caracteres espaciais (exceção sublinhado). Devem ser declaradas no início dos algoritmos e programas.

Exemplo: o algoritmo deve começar com a definição do nome de identificação (primeira linha). Em seguida, deve-se declarar as variáveis (var é uma palavra reservada).

Algoritmo <nome_do_algoritmo> 
// <explicação resumida do que a rotina irá fazer>
Var
<declaração das variáveis e do tipo de informação que elas receberão>
Início
<instruções e processamentos encadeados de forma lógica>
Fim

Exemplo:

ALGORITMO Livro {definição do nome do programa}
VAR
CodigoDoLivro: inteiro {Nome da Variável: Tipo da variável}
Titulo, Autor, Editora: literal {declaração de variáveis, todas como literal}
CodigoDoLivro = 0
INICIO
Escreva "Este é um programa em pseudocódigo que exibe na tela os dados de um livro"
Escreva "Digite o código do livro"
Leia CodigoDoLivro
Escreva "Digite o título do livro"
Leia Titulo
Escreva "Digite o autor do livro"
Leia Autor
Escreva "Digite a editora do livro"
Leia Editora
Escreva "O código do livro é", CodigoDoLivro
Escreva "O título do livro é", Titulo
Escreva "O autor do livro é", Autor
Escreva "A Editora do livro é", Editora
FIM

Lembrando que leia refere-se à inserção ou captura de dados e escreva refere-se à exibição de dados.

Teste de Mesa

Rotina elaborada em um algoritmo deve ser verificada para saber se o encadeamento lógico está correto. Simula-se o funcionamento e eficiência do código para resolução do problema, geralmente por meio de uma tabela de teste.. Teste é realizado com objetivo de verificar se instruções e processamentos estão corretos e são eficientes.

Realizado manualmente, com leitura e realização de cada instrução

Regras de padronização dos Pseudocódigos

  1. Todo algoritmo inicia-se com Algoritmo: NomedoAlgoritmo
  2. Início e fim do programa limitados pelos marcador Início e Fim.
  3. Variáveis declaradas no início do algoritmo, linha abaixo do marcador Var. Formato NomeVariável: tipo da variável
  4. Nomes das variáveis não podem iniciar com número, não podem ter espaço em branco, nem caracteres especiais. Diferenciam maiúsculas e minúsculas.
  5. Palavras reservadas: Início, Fim, Var, Se, Senão.
  6. Leia recebe dados do usuário (captura) — é a entrada de dados.
  7. Escreva exibe dados ao usuário — é a saída de dados.
  8. Textos são colocados entre aspas — é a representação universal de valor literal ou string.
  9. Comentários devem ser inseridos entre chaves {} ou iniciados com duas barras // (mais comum, pois não confunde com agrupamentos)

Operadores

Operadores aritméticos:

  • soma +
  • subtração -
  • multiplicação *
  • divisão /
  • exponenciação ** ou ^

Operadores relacionais:

  • > maior que
  • < menor que
  • >= maior ou igual
  • <= menor ou igual
  • = igual a (obs: é um sinal de atribuição, para associar valores. Não é um sinal de igualdade)
  • <> ou # ou != diferente de

Operadores lógicos (ou booleanos): obrigatoriamente, tem-se um situação de decisão condicional do tipo SE, então; SENÃO.

  • E — conjunção
  • OU — disjunção não exclusiva
  • XOU — disjunção exclusiva (lê-se “ou exclusivo”)
  • NÃO — negação

Resumo: a instrução indica o modo que a máquina (computador) deve operar. O algoritmo é a sequência lógica das etapas a serem realizadas para alcançar um objetivo final; é uma descrição detalhada destas etapas que devem ser percorridas para chegar a uma solução. A padronização permite que diferentes profissionais possam compreender o algoritmo ou a codificação. A codificação do programa é a escrita do algoritmo a partir de regras e padrões de uma linguagem de programação específica.

Não é aconselhável codificar o programa antes de desenvolver o algoritmo. O roteiro para desenvolvimento de um programa segue os seguintes passos:

problema → solução → algoritmo → codificação → programa → resultado final

2. ESTRUTURAS DE CONTROLE DE FLUXO

Controle de fluxo de um programa — direcionamento do fluxo de processamento dos dados.

Escolha da estrutura de controle de fluxo deve ser a mais simples possível — com menor tamanho de código. Sempre deverá realizar o teste de mesa.

Estrutura Sequencial

Sequência de instruções — linhas de comando sucessivas com um único fluxo possível de processamento — limitado pelos marcadores INÍCIO e FIM. Representadas por fluxogramas ou pseudocódigos.

Estrutura sequencial — Fluxograma

Estrutura de Seleção

Estruturas de seleção ou estruturas de decisão — são estabelecidos caminhos diferentes de instruções — sequências de ações podem ser executadas ou não, dependendo de uma ou mais condições.

Dependendo do contexto de utilização, podem ser aplicadas três tipos de estruturas de seleção: simples, composta ou múltipla

Simples

  • Marcadores: SE, ENTÃO e FIM SE
  • if — decisão condicional simples — testa uma condição antes de executar instruções
  • Para situações em que se testa uma única condição ou variável — se verdadeira, executa um comando; se resultado é falso, não há ação a ser executada.
  • Há um teste e um grupo de ações que ocorrem apenas se a resposta for verdadeira.
  • Apenas um caminho de encadeamento lógico
SE CONDIÇÃO = V --> AÇÃO
SE CONDIÇÃO = F --> NÃO HÁ AÇÃO

Estrutura de seleção simples com marcadores:

SE <CONDIÇÃO> ENTÃO
comandos executados se condição for verdadeira
FIM SE

Composta

  • Marcadores: SE, ENTÃO, SENÃO e FIM SE
  • if-else — decisão condicional composta
  • Para situações em que se testa uma única condição ou variável — se verdadeira, executa um comando; se falsa, executa outro comando.
  • Há um teste e dois grupos de ações — um grupo ocorre a condição é verdadeira; outro se a condição é falsa. Há dois caminhos diferentes pré determinados.
  • Apenas dois caminhos de encadeamento lógico
SE CONDIÇÃO = V --> AÇÃO 1
SE CONDIÇÃO = F --> AÇÃO 2

Estrutura de seleção composta com marcadores:

SE <CONDIÇÃO> ENTÃO
comandos executados se condição for verdadeira
SENÃO
comandos executados se condição for falsa
FIM SE

Múltipla

  • Para situações em que se testa várias vezes uma condição ou variável. Situações mais complexas. Também para situações em que o teste de uma variável depende do teste de outra variável.
  • Resultado de cada teste define conjunto de comandos.
  • Mais de dois caminhos de encadeamento lógico

Estrutura de seleção múltipla composta encadeada:

  • Marcadores: SE, ENTÃO, SENÃO e FIM SE.
  • Na prática, usa-se várias vezes o recurso “SE”, um dentro do outro. Também chamado “Se” aninhado ou “Se” encadeado.
SE <CONDIÇÃO> ENTÃO
comandos executados se PRIMEIRA condição é verdadeira
SENÃO
SE <CONDIÇÃO> ENTÃO
comandos executados se SEGUNDA condição é verdadeira
SENÃO
comandos executados se SEGUNDA condição é falsa
FIM SE
FIM SE

Estrutura de seleção múltipla FAÇA CASO:

  • Marcadores: FAÇA CASO, CASO, OUTRO CASO, FIM CASO
  • Esta solução, em geral, exige menos linhas de comando — algoritmo mais claro que o “se encadeado”
FACA CASO
CASO <CONDIÇÃO>:
comandos executados se condição é verdadeira
CASO <CONDIÇÃO>:
comandos executados se condição é verdadeira
CASO <CONDIÇÃO>:
comandos executados se condição é verdadeira
OUTRO CASO:
comandos executados se todos os casos mapeados retornam "falso"
FIM CASO

3. ESTRUTURAS DE REPETIÇÃO

Necessárias às rotinas (repetitivas) de programação — permitem otimizar códigos quando uma ou mais ações devem ser realizadas várias vezes.

Cria blocos de repetição até que uma condição se torne verdadeira ou por um número predeterminado de vezes.

Repetição automática: por número predeterminado de vezes, até que o usuário encerre o processo ou até que a condição seja alcançada.

Estruturas de repetição

Também chamados laços de repetição. Permitem programar o loop de blocos de instrução — parâmetros são estabelecidos previamente no algoritmo.

Controle do número de vezes que a estrutura será repetida:

  • Contador fixo — cria uma variável para contar número de vezes que a sequência será repetida. Repetição é encerrada quando contador atinge valor preestabelecido.
contador = contador + 1
  • Flag de resposta (sinalização do usuário) — pergunta ao usuário se rotina deverá ser executada novamente — resposta é armazenada em um flag de resposta (variável). O loop é interrompido pelo usuário.
resp = "Deseja continuar <s/n>?"
  • Flag predeterminado (sinalização predeterminada) — usuário encerra o loop quando quiser, a partir de uma palavra predeterminada; ou quando uma condição específica é satisfeita.
"Digite nome ou FIM para sair"
//controle do loop é o nome; processamento continuar até que "FIM" seja digitado.

Dois recursos para construção das estruturas de repetição:

  • ENQUANTO…FAÇA (WHILE) — funciona com contador fixo e sinalizações (usuário ou predeterminada). Indica início do loop e tem uma condição como parâmetro (condição de parada) — o loop apenas se encerra quando a condição retorna um valor lógico FALSO (se a verificação inicial retorna valor F, o loop nem é iniciado).

Outros marcadores: FAÇA…ENQUANTO (DO…WHILE) ou REPITA…ATÉ QUE

A estrutura de repetição só é executada enquanto a condição é verdadeira — se a condição é falsa, a rotina de repetição é encerrada.

ENQUANTO <condição> FAÇA
comando a serem repetidos
FIM ENQUANTO
Estrutura de repetição — ENQUANTO…FAÇA

OBS.: Se a condição inicial da estrutura é falsa, a rotina de repetição não é executada. Se a variável não muda de valor, a rotina de repetição entra em loop infinito, pois os valores não são atualizados.

  • PARA PRÓXIMO (FOR NEXT) — funciona apenas com contador fixo. Atribuição do valor inicial no início da estrutura faz com que a rotina se repita até encontrar a palavra PRÓXIMO, o comando é executado até que o o valor final atenda à condição determinada.
PARA <VAR=valor_inicial ATÉ <valor_final> [PASSO <N>]
comandos a serem repetidos
PRÓXIMO

4. SUBALGORITMOS

São blocos (pequenos) de códigos dentro do algoritmo principal. Facilitam entendimento do código, detecção de erros e manutenção do sistema. O algoritmo principal deve convocar o subalgoritmo, caso contrário, ele é ignorado.

Na prática, maioria dos algoritmos é formada por inúmeros subalgoritmos (funções e procedimentos).

Dois tipos de subalgoritmos:

  • funções: executam tarefas e sempre retornam um resultado (resposta);
  • procedimentos: executam tarefas mas não retornam resultados.

Diferença entre funções e procedimento está no “RETORNO”:

FUNÇÃO <nome> (parâmetros)
INÍCIO
//declara variáveis locais
//bloco de código
//RETORNO
FIMFUNÇÃO

Procedimento não tem retorno:

PROCEDIMENTO <nome> (parâmetros)
INÍCIO
//declara variáveis locais
//bloco de código
FIMPROCEDIMENTO

Variáveis locais e globais:

Algoritmo tem uma área reservada para declaração de variáveis.

  • variáveis locais: usadas apenas no subalgoritmo; usada apenas em função ou procedimento específico.
  • variáveis globais: usadas em qualquer parte do algoritmo ou subalgoritmos.

Para aprender mais:

--

--

Caderno de Anotações
Caderno de Anotações

Written by Caderno de Anotações

Aprendendo sempre uma coisa nova e esquecendo duas antigas

No responses yet