Introdução à Lógica de Programação

A lógica de programação é o alicerce de toda a programação de computadores. Trata-se da disciplina que nos ensina a analisar problemas, pensar de forma estruturada e criar soluções eficientes através de uma sequência lógica de instruções.

Com ela, aprendemos a desenvolver o raciocínio computacional, ou seja, a habilidade de decompor um problema em partes menores e mais simples, organizando os passos que uma máquina deverá seguir para atingir um determinado objetivo de forma automatizada, precisa e previsível.

Esse processo lógico é colocado em prática através dos algoritmos, que são conjuntos ordenados de ações para resolver tarefas específicas. Uma falha na lógica pode comprometer todo o funcionamento de um sistema, por isso sua compreensão é essencial.

O estudo da lógica é independente da linguagem de programação usada: você pode praticar com pseudocódigo, fluxogramas ou ambientes gráficos antes de aprender uma linguagem como Python, PHP ou JavaScript. Aprender lógica é o primeiro passo para se tornar um programador eficiente e criativo.

Ao começar a estudar programação, é essencial desenvolver a habilidade de pensar logicamente, decompondo problemas em etapas simples, chamadas de algoritmos. Um algoritmo nada mais é do que uma sequência ordenada de ações necessárias para atingir um objetivo.

Narração Descritiva

Antes de transformar um problema em código, uma das técnicas fundamentais é a narração descritiva. Ela consiste em descrever com palavras simples o passo a passo necessário para resolver um desafio. É uma forma de "pensar em voz alta", organizando ideias de forma lógica.

Por exemplo, para saber se um número é par ou ímpar, poderíamos descrever assim:

“Pedir ao usuário que digite um número. Verificar se o número é divisível por 2. Se for, informar que é par. Caso contrário, informar que é ímpar.”

Diagramas e Fluxogramas

Além da narração descritiva, outra ferramenta poderosa na lógica de programação é o fluxograma. Ele é um diagrama que representa visualmente o fluxo de um algoritmo, utilizando símbolos gráficos padronizados para mostrar ações, decisões e caminhos possíveis.

Veja abaixo um exemplo de algoritmo representado em texto e como ele seria em um fluxograma:

Algoritmo em Pseudocódigo

O pseudocódigo é uma forma intermediária de escrever algoritmos utilizando uma linguagem próxima da linguagem humana, mas estruturada de forma lógica e sequencial.

Ele não precisa seguir uma linguagem de programação específica, pois seu objetivo é representar a lógica de maneira clara e compreensível.

Veja o exemplo abaixo:

início
    leia número
    se número % 2 == 0 então
        escreva "Número Par"
    senao
        escreva "Número Ímpar"
fim
            

Neste exemplo, o programa lê um número e verifica se ele é divisível por 2. Se for, escreve “Número Par”, senão, escreve “Número Ímpar”. Simples, direto e lógico.

Representação em Fluxograma
Fluxograma Par ou Ímpar

Exemplo de fluxo de decisão: par ou ímpar

Por que usar Fluxogramas?

Fluxogramas são ferramentas visuais que representam o fluxo lógico de um processo ou algoritmo por meio de símbolos gráficos padronizados. Eles são especialmente úteis no início do desenvolvimento de um programa, pois facilitam o entendimento e o planejamento da solução antes mesmo da escrita de código.

  • Visualizar o caminho da lógica: ajuda a enxergar o trajeto que o algoritmo percorre do início ao fim.
  • Identificar decisões, repetições e ramificações: torna claro onde o algoritmo toma decisões, repete ações ou muda de direção.
  • Evitar erros antes de codificar: permite detectar falhas na lógica antes de escrever o código, economizando tempo.
  • Comunicar ideias com clareza: ideal para explicar o algoritmo a outras pessoas, mesmo que não sejam programadoras.
  • Planejar de forma estruturada: serve como um “mapa” que orienta a construção do código de forma lógica e sequencial.

Conclusão: Usar fluxogramas desenvolve o pensamento estruturado, facilita a organização de ideias e proporciona uma base sólida para a criação de algoritmos eficientes, compreensíveis e bem planejados.

Neste curso, utilizaremos narração descritiva para compreender problemas, pseudocódigo para estruturar soluções, e diagramas para representar visualmente o raciocínio. Esses elementos são fundamentais para que você desenvolva pensamento computacional e comece a programar com confiança.

Vamos seguir juntos passo a passo, desde os conceitos mais simples até a criação de algoritmos funcionais. Com dedicação e prática, você aprenderá a pensar como um programador!

Tipos de Dados

Tipos de dados definem o tipo de informação que uma variável pode armazenar. Em lógica de programação, os principais tipos são essenciais para definir como os dados serão tratados pelo programa. Veja abaixo os principais tipos:

Tipos de Dados

Variáveis e Constantes

Variáveis são espaços na memória usados para armazenar valores que podem mudar durante a execução de um programa. Já as constantes armazenam valores fixos.

Variáveis e Constantes

inteiro idade = 18

Variáveis são utilizadas para guardar valores que podem mudar durante a execução de um programa. Cada variável possui um nome e um tipo associado. Por outro lado, constantes são identificadores que armazenam valores fixos e imutáveis.

Exemplo de declaração de variável:

inteiro idade = 18

Nesse exemplo, a variável idade é do tipo inteiro e armazena o valor 18.

Operadores

Operadores são símbolos especiais utilizados para executar operações em variáveis e valores. São classificados em:

Operadores

Estruturas Condicionais

Estruturas condicionais permitem que o programa escolha entre dois ou mais caminhos com base em condições. A estrutura mais comum é:

se (condição) {
    // instruções se verdadeiro
} senao {
    // instruções se falso
}

Exemplo: Verificar se um número é positivo.

se (numero > 0) {
    escreva("Número positivo")
} senao {
    escreva("Número negativo ou zero")
}

Estruturas Condicionais

se (idade >= 18) {
    escreva("Maior de idade")
} senao {
    escreva("Menor de idade")
}

Estruturas de Repetição

As estruturas de repetição são utilizadas para executar um bloco de código várias vezes. São úteis para automatizar tarefas repetitivas.

Estruturas de Repetição

para (i = 0; i < 10; i++) {
    escreva(i)
}

Exemplos Práticos

Exemplo: verificar se um número é par ou ímpar.

inteiro numero
escreva("Digite um número: ")
leia(numero)

se (numero % 2 == 0) {
    escreva("Número par")
} senao {
    escreva("Número ímpar")
}
        

Exercícios de Lógica Computacional

Resolva os exercícios abaixo e teste seus conhecimentos!

Ir para Exercícios Práticos
3. Em um vetor de 10 posições, qual é o índice do primeiro elemento?

Contexto: Em linguagens como C, Python e JavaScript, vetores são indexados a partir de um número base.




4. Qual estrutura de dados segue o princípio FIFO?

Contexto: Em um sistema de atendimento, os primeiros a chegarem são os primeiros a serem atendidos.





5. Qual o valor da expressão lógica (true OR false)?

Contexto: A operação OR (OU) retorna verdadeiro se pelo menos uma das condições for verdadeira.




6. Em uma pilha, qual operação adiciona um elemento ao topo?

Contexto: Uma pilha funciona como uma pilha de pratos: adiciona no topo, remove do topo.




7. Qual o valor da negação de verdadeiro (!true)?

Contexto: A operação NOT inverte o valor lógico de uma variável.




8. Em um vetor de inteiros, como acessamos o último elemento?

Contexto: Suponha que o vetor tenha 5 posições.




9. Qual operador lógico retorna verdadeiro somente se ambos forem verdadeiros?

Contexto: Em uma condição composta, todas devem ser satisfeitas.




10. O que representa a operação “enqueue”?

Contexto: Em filas, essa operação adiciona elementos.





11. Qual alternativa representa a operação XOR?

Contexto: O resultado é verdadeiro se os valores forem diferentes.




12. Se um vetor tem 6 posições, qual é o índice do último elemento?

Contexto: Vetores normalmente são indexados a partir de zero.




Exercícios Práticos

Vetor: Soma Condicional

Leia 10 números e armazene em um vetor. Exiba a soma apenas dos números pares.

Pilha: Reverso de Palavra

Inverta a ordem das letras de uma palavra usando uma pilha.

Vetor: Soma Condicional

Leia 10 números e armazene em um vetor. Exiba a soma apenas dos números pares armazenados.

Pilha: Reverso de Palavras

Implemente uma pilha para inverter a ordem das letras de uma palavra digitada pelo usuário.

Fila: Atendimento

Crie uma fila de atendimento com 5 pessoas. Simule a chamada sequencial de cada uma delas.

Tabela Verdade: E lógico (AND)

Construa a tabela verdade da operação AND para duas variáveis booleanas (A e B).

Vetor: Buscar Nome

Preencha um vetor com 5 nomes. Permita ao usuário digitar um nome e informe se ele está no vetor.

Pilha: Verificação de Palíndromo

Verifique se uma palavra digitada é um palíndromo usando uma pilha para comparar as letras.

Fila: Ordem de Chegada

Receba o nome de 5 alunos em ordem de chegada. Mostre a ordem de apresentação de seus trabalhos.

Tabela Verdade: OU lógico (OR)

Construa a tabela verdade da operação OR para duas variáveis booleanas (A e B).

Vetor: Subtração de Vetores

Receba dois vetores com 5 elementos cada. Calcule e exiba um novo vetor com a subtração elemento a elemento.

Tabela Verdade: Composta

Monte a tabela verdade para a expressão lógica: (A OR B) AND (NOT A).