Capitulo 5 - Operadores e Expressões

[1]Copyright © 2026 Alyce Suza.

Aritméticos, Relacionais e Lógicos

5.1 O que é uma Expressão?

Definição: Expressão Uma expressão é uma combinação exata de valores, variáveis, operadores e funções que produz um resultado prático ao ser avaliada pelo computador.

Em Portugol, as expressões podem ser puramente aritméticas para produzir números matemáticos, relacionais para produzir resultados de verdadeiro ou falso, ou totalmente lógicas para combinar e avaliar estados compostos. Eu vejo muitos estudantes ignorando essa base matemática, mas o domínio firme dessa estrutura evita erros invisíveis mais à frente.

5.2 Operadores Aritméticos: Calculando

Os operadores aritméticos formam o alicerce matemático da programação estruturada. Eles permitem que o computador processe dados numéricos executando as operações fundamentais que conhecemos da álgebra básica.

Operador Uso Exemplos
+ (adição) a + b 5 + 3 = 8 | 10.5 + 2 = 12.5
- (subtração) a - b 10 - 4 = 6 | 5.0 - 8.5 = -3.5
* (multiplicação) a * b 3 * 7 = 21 | 2.5 * 4 = 10.0
/ (divisão) a / b 15 / 4 = 3 (inteiro!) | 15.0 / 4 = 3.75
% (módulo ou resto) a % b 15 % 4 = 3 | 10 % 2 = 0 | 7 % 3 = 1
Divisão inteira vs real: A grande armadilha Se AMBOS os operandos forem do tipo inteiro, o cálculo 15 / 4 = 3 descarta totalmente a fração decimal sem arredondar. Se PELO MENOS UM dos operandos for do tipo real, o cálculo 15.0 / 4 = 3.75 preserva a precisão matemática original.

Isso afeta cálculos de média de forma drástica. Processar (7 + 8) / 2 resulta em 7, o que está errado. Enquanto isso, o processamento de (7.0 + 8.0) / 2 resulta em 7.5, que está absolutamente correto. Sempre declare as variáveis como real quando precisar de uma divisão precisa e exata.

O operador % retorna o RESTO da divisão inteira. É um dos recursos mais utilizados na rotina de programação para descobrir padrões matemáticos e criar ciclos lógicos de execução contínua.

Uso Prático Exemplo Aplicado
Verificar número par numero % 2 == 0 resulta que é par (resto 0)
Verificar ímpar numero % 2 != 0 resulta que é ímpar (resto 1)
Verificar divisibilidade n % 5 == 0 resulta que n é divisível por 5
Obter dígitos soltos 123 % 10 = 3 separa o último dígito numérico
Ciclos limitados horas % 24 converte o relógio para o formato 0 a 23
Distribuição em grupos indice % 3 gera as repetições estruturadas 0, 1, 2, 0, 1, 2
// Exemplos praticos do operador %
escreva(17 % 5)    // = 2  (17 = 3*5 + 2)
escreva(20 % 4)    // = 0  (divisivel por 4)
escreva(10 % 3)    // = 1  (10 = 3*3 + 1)
escreva(7 % 2)     // = 1  (7 e impar)
escreva(8 % 2)     // = 0  (8 e par)
escreva(365 % 7)   // = 1  (365 dias = 52 semanas + 1 dia)

5.3 Precedência de Operadores

Assim como nas regras estritas da matemática tradicional, há uma hierarquia formal de precedência no processamento computacional. Operadores de maior prioridade são invariavelmente avaliados primeiro pelo sistema do computador. Me impressiona como o esquecimento de um simples parêntese nesta fase pode desmoronar toda uma arquitetura de cálculos complexos.

Prioridade Lógica Operadores Avaliados
1a (maior) Parênteses ( )
2a Multiplicação *, Divisão /, Módulo %
3a (menor) Adição +, Subtração estrita
// Sem parenteses o sistema faz a multiplicacao primeiro
escreva(2 + 3 * 4)       // = 2 + 12 = 14

// Com parenteses a operacao de soma acontece primeiro
escreva((2 + 3) * 4)     // = 5 * 4 = 20

// Media ERRADA que divide nota2 por 2 e depois soma a nota1
real media = 7 + 9 / 2   // = 7 + 4.5 = 11.5  (ERRADO!)

// Media CORRETA que soma primeiro e depois divide pelo total
real media = (7 + 9) / 2 // = 16 / 2 = 8.0  (CORRETO!)

// Expressao complexa executando a leitura da esquerda para a direita no mesmo nivel
escreva(10 - 3 - 2)      // = (10 - 3) - 2 = 5  (nao 10 - (3-2) = 9)

// Parenteses aninhados com o processamento fluindo de dentro para fora
escreva(((2 + 3) * (4 - 1)) / 3)  // = (5 * 3) / 3 = 15 / 3 = 5

5.4 Operadores Relacionais: Comparando Valores

Os operadores relacionais têm a função exclusiva de comparar dois valores e retornar um estado de verdadeiro ou falso. Eles formam o alicerce absoluto de toda a tomada de decisão em programação de software, baseados integralmente na álgebra booleana formalizada por George Boole em 1854.

Operador Sintaxe Exemplos de Avaliação
== (igual a) a == b 5==5 resulta V | 5==3 resulta F | "a"=="a" resulta V
!= (diferente de) a != b 5!=3 resulta V | 5!=5 resulta F
> (maior que) a > b 7>3 resulta V | 2>5 resulta F | 5>5 resulta F
< (menor que) a < b 2<5 resulta V | 7<3 resulta F
>= (maior ou igual) a >= b 5>=5 resulta V | 3>=5 resulta F
<= (menor ou igual) a <= b 3<=5 resulta V | 7<=5 resulta F
A diferença entre == e = O símbolo = (um sinal de igual) representa estritamente ATRIBUIÇÃO, onde x = 5 coloca fisicamente o número 5 dentro da variável x. O símbolo == (dois sinais de igual) representa estritamente COMPARAÇÃO, onde x == 5 verifica se x vale 5 e retorna um valor lógico puro.

Escrever se (x = 5) quando a intenção mecânica era se (x == 5) é um erro clássico e perigoso. É evidente para quem sente na pele a depuração de sistemas complexos que essa pequena confusão gera bugs silenciosos dificílimos de rastrear.

inteiro idade = 17
real nota = 7.5
real saldo = -50.0

// Resultados de comparacoes armazenados em variaveis do tipo logico
logico ehMaior = (idade >= 18)        // = falso
logico ehAprovado = (nota >= 6.0)     // = verdadeiro
logico ehDevedor = (saldo < 0)        // = verdadeiro

// Comparando dados com resultado direto de operacao matematica
logico mediaCima = ((nota + 8.0) / 2 >= 7.0)  // = falso

// Usando o resultado relacional diretamente no comando de escreva
escreva("Maior de idade? ", ehMaior, "\n")
escreva("Aprovado? ", ehAprovado)

5.5 Operadores Lógicos: Combinando Condições

Operadores lógicos permitem combinar expressões booleanas singulares em estruturas de decisão muito mais abrangentes e complexas. Todo esse mecanismo se apoia na Álgebra Booleana, provando que formulações teóricas criam aplicações diretas na construção do pensamento da máquina.

Operador e (AND): A regra da obrigatoriedade total

A regra deste operador é engessada e estrita, ditando que o resultado final só é classificado como VERDADEIRO quando AMBOS os operandos envolvidos são verdadeiros. Basta que apenas um deles seja falso para que toda a expressão desmorone e se torne falsa. Como analogia prática de cofre de banco, para abrir a porta você precisa da chave física e da senha digital ao mesmo tempo. A ausência de qualquer uma das duas impede o acesso integralmente.

Expressão Avaliada Resultado Lógico
V e V = VERDADEIRO
V e F = FALSO
F e V = FALSO
F e F = FALSO
inteiro idade = 20
real renda = 3000.0

// Aprovado para credito garantindo obrigatoriamente ser maior de 18 E com renda acima de 2000
logico aprovado = (idade >= 18) e (renda > 2000.0)
// = verdadeiro e verdadeiro = VERDADEIRO

// Outra verificacao restrita exigindo ser menor de 60 E simultaneamente maior de 18
logico adultoJovem = (idade >= 18) e (idade < 60)
// = verdadeiro e verdadeiro = VERDADEIRO

Operador ou (OR): A regra da permissividade condicional

A regra deste operador é amplamente mais permissiva e flexível. O resultado final é classificado como VERDADEIRO sempre que PELO MENOS UM dos operandos listados for verdadeiro. A expressão inteira só se torna falsa na situação extrema em que todos os operandos são simultaneamente falsos. Trazendo para a vida real de forma bem direta, para entrar em uma festa exclusiva você precisa de um convite nominal ou estar na lista de convidados VIP. Possuir apenas um dos dois requisitos já é plenamente suficiente para liberar sua entrada no evento.

Expressão Avaliada Resultado Lógico
V ou V = VERDADEIRO
V ou F = VERDADEIRO
F ou V = VERDADEIRO
F ou F = FALSO
inteiro nota = 5
inteiro faltas = 20

// O aluno e reprovado no sistema se a nota for < 6 OU se as faltas passarem do limite de 15
logico reprovado = (nota < 6) ou (faltas > 15)
// = verdadeiro ou verdadeiro = VERDADEIRO

// O cliente tem acesso liberado imediato se ele for socio do clube OU se ele pagou o ingresso avulso
logico temAcesso = (ehSocio) ou (pagouIngresso)

Operador nao (NOT): A regra da inversão de estado

A diretriz funcional deste operador é simples e cirúrgica, atuando apenas para inverter o valor lógico original de uma variável. O que era um estado verdadeiro vira instantaneamente falso e o que era falso converte para verdadeiro. Diferente dos operadores conectivos anteriores, o inversor necessita de apenas um operando solitário para executar sua função de espelhamento estrutural no código.

Expressão Avaliada Resultado Lógico
nao verdadeiro = FALSO
nao falso = VERDADEIRO
logico ligado = verdadeiro
logico desligado = nao ligado    // = nao verdadeiro = FALSO

// Verificar ativamente se um numero especifico NAO e par para confirmar que e impar
inteiro n = 7
logico ehImpar = nao (n % 2 == 0)    // inverte o resultado de falso convertendo para verdadeiro

Precedência dos Operadores Lógicos

Prioridade Executiva Operador Ativo
1a (maior) nao
2a e
3a (menor) ou
// Sem os parenteses organizacionais o sistema segue a ordem de prioridade nativa as cegas
logico r1 = nao falso e verdadeiro ou falso
// = (nao falso) e verdadeiro ou falso
// = verdadeiro e verdadeiro ou falso
// = verdadeiro ou falso = VERDADEIRO

// Recomendacao profissional inegociavel para garantir a clareza visual impecavel da sua logica
logico r2 = (nao falso) e (verdadeiro ou falso)

5.6 Expressões Mistas: Combinando Tipos de Operadores

Nos sistemas reais de larga escala, as expressões sempre combinam de forma entrelaçada os operadores aritméticos, relacionais e lógicos. A ordem rigorosa de avaliação matemática segue uma diretriz inquebrável estipulando que os processamentos aritméticos rodam primeiro, seguidos obrigatoriamente pelas avaliações relacionais, e finalizando o fluxo algorítmico com os lógicos.

inteiro a = 5, b = 3, c = 8

// Avaliacao de expressoes mistas respeitando a ordem cronologica exigida pelo compilador
logico r1 = (a + b > c)        // (8 > 8) = falso
logico r2 = (a * 2 >= b + 5)   // (10 >= 8) = verdadeiro
logico r3 = (a > b) e (c > a)  // (verdadeiro) e (verdadeiro) = verdadeiro

// Exemplo pratico e real validando um sistema logico de analise estrita de faixas de IMC
real peso = 70, altura = 1.75
real imc = peso / (altura * altura)
logico saudavel = (imc >= 18.5) e (imc < 25.0)

escreva("O paciente possui atualmente um IMC considerado saudavel? ", saudavel)

5.7 Exercícios do Capítulo 5

Instrução Fundamental sobre os Exercícios Tente resolver escrevendo a lógica ANTES de consultar o gabarito de respostas.

O gabarito consolidado e comentado está posicionado no final deste documento.

Anote suas tentativas falhas exaustivamente. Comparar seu raciocínio natural de erro com a solução técnica estruturada é o que solidifica de verdade o aprendizado da programação.

Exercício 5.1: Operações aritméticas completas Leia ativamente dois números reais fornecidos por um usuário externo.

Calcule e exiba as seguintes respostas rigorosas: soma, diferença direta, produto gerado, divisão e o resto exato da divisão através do processamento de módulo.

Para extrair o módulo computacional de forma coerente, converta os valores capturados para o formato inteiro antes da operação central, pois o operador específico de % no Portugol exige exclusivamente números de formato inteiro. A divisão também precisa ser devidamente blindada na lógica, determinando que se o segundo número enviado for zero absoluto, o sistema deve exibir uma mensagem descritiva de erro na tela em vez de tentar realizar a divisão e colapsar a aplicação.

Dica: A declaração paralela de variáveis inteiras extraindo a parte inteira dos números reais realiza a conversão estrutural descartando as casas decimais flutuantes. Isso limpa perfeitamente os dados para o uso do % de forma estável.

Exercício 5.2: Verificar faixa de valores restrita Leia um número inteiro simples inserido pelo console do sistema.

Usando especificamente as engrenagens conjuntas dos operadores lógicos combinados, verifique os dados e exiba na saída final:

  • Se o número exato está posicionado na faixa entre 1 e 100 de forma totalmente inclusiva.

  • Se o número possui a característica técnica de ser par E positivo ao mesmo tempo.

  • Se o número é um múltiplo matemático comprovado de 3 OU um múltiplo exato de 5.

  • Se o número testado rigorosamente NÃO é enquadrado como divisível por 7 na tabuada.

Dica: O uso massivo e organizado do operador relacional % é o caminho perfeito para atestar a divisibilidade exata sem permitir sobras matemáticas.

Exercício 5.3: Calculadora de média ponderada academicamente Leia um total de três notas distintas pelo terminal e vincule seus respectivos pesos analíticos no código, onde a primeira avaliação tem o peso estrito de 2, a segunda avaliação tem o peso de 3, e a terceira prova carrega o peso de 5.

Calcule rigorosamente a média ponderada acionando a fórmula padronizada multiplicando cada nota por seu respectivo peso somando todas as fatias, e logo após dividindo esse bloco pela soma exata dos três pesos.

Exiba o valor numérico puro da média calculada e informe de forma clara e estruturada com respostas lógicas do tipo Verdadeiro ou Falso se o desempenho atinge concretamente os conceitos de classificação Excelente para nota maior ou igual a 9, Bom para nota maior ou igual a 7, Regular para nota maior ou igual a 5, ou Insuficiente para qualquer registro infeliz abaixo da margem de 5.

Dica: Para o funcionamento prático da fórmula não falhar no compilador, a soma integral dos pesos obrigatoriamente precisa ser usada de forma matemática como o divisor constante geral.

Gabarito do Capítulo 5

Gabarito do Exercício 5.1 A recomendação central na modelagem de variáveis é usar o tipo real na base primária para proteger a equação e garantir uma divisão exata que não sofra truncamento acidental no caminho. O operador % só é lido pelo processador do Portugol com o tipo inteiro, portanto a estratégia de conversão de dados prévia se torna estritamente inegociável.

programa
{
    funcao inicio()
    {
        real a, b
        escreva("Variavel A: ") leia(a)
        escreva("Variavel B: ") leia(b)
        
        escreva("Resultado da Soma estruturada: ", a+b, "\n")
        escreva("Resultado da Diferenca absoluta: ", a-b, "\n")
        escreva("Resultado do Produto gerado: ", a*b, "\n")
        
        se (b != 0) { escreva("Resultado da Divisao calculada: ", a/b, "\n") }
        senao { escreva("Aviso critico de sistema: Divisao logicamente impossivel por b=0\n") }
        
        inteiro ia = a, ib = b
        se (ib != 0) { escreva("Calculo exato do Resto modular: ", ia % ib, "\n") }
    }
}

A linha de comando extraindo os dados para uma nova declaração inteira realiza a operação essencial de converter a essência de forma limpa pelo truncamento da parte decimal com extrema segurança operacional, impedindo o programa de estourar.

Gabarito do Exercício 5.2 A estrutura lógica desse código exige a habilidade apurada de combinar de forma sábia os parâmetros relacionais junto aos operadores lógicos diretos para construir baterias complexas de testes corretos e sem vazamentos condicionais na execução.

programa
{
    funcao inicio()
    {
        inteiro n
        escreva("Insira o Numero focado no teste de validacao: ") leia(n)
        
        escreva("Status de intervalo restrito entre 1 e 100: ", (n >= 1) e (n <= 100), "\n")
        escreva("Status de numero classificado Par e simultaneamente Positivo: ", (n % 2 == 0) e (n > 0), "\n")
        escreva("Status de equivalencia matematica a Multiplo de 3 ou 5: ", (n % 3 == 0) ou (n % 5 == 0), "\n")
        escreva("Status exclusivo e logico de NAO ser divisivel por 7: ", nao (n % 7 == 0), "\n")
    }
}

Realizando um teste de mesa rápido e mental com o valor prático de entrada igual a 15, verificamos o acerto matemático constatando que a localização entre 1 e 100 emite um valor Verdadeiro. A ausência de paridade emite um valor Falso cravado, e a filiação exata à classe de múltiplos de 3 e 5 emite mais uma vez o Verdadeiro com absoluto sucesso.

Gabarito do Exercício 5.3 O mecanismo lógico e bruto para construir a média ponderada é plenamente executado ao envolver a soma massiva e ponderada que depois é submetida e dividida com precisão impecável pela soma absoluta de todos os pesos listados previamente no seu corpo de código, resultando em uma divisão primária por 10.

programa
{
    funcao inicio()
    {
        real n1, n2, n3, mp
        escreva("Insira a Nota N1 (sujeita ao peso fixo de 2): ") leia(n1)
        escreva("Insira a Nota N2 (sujeita ao peso fixo de 3): ") leia(n2)
        escreva("Insira a Nota N3 (sujeita ao peso fixo de 5): ") leia(n3)
        
        mp = (n1*2 + n2*3 + n3*5) / 10
        
        escreva("O processamento bruto da Media ponderada finaliza em: ", mp, "\n")
        
        se (mp >= 9) { escreva("Resultado conceitual de classe academica Excelente\n") }
        senao se (mp >= 7) { escreva("Resultado conceitual de classe academica Bom\n") }
        senao se (mp >= 5) { escreva("Resultado conceitual de classe academica Regular\n") }
        senao { escreva("Resultado conceitual de classe Insuficiente apresentando risco de reprovacao\n") }
    }
}

Um rápido cenário de teste validando o fluxo de dados com a inserção rotineira das notas 8, 7 e 9 engatilha imediatamente o cálculo bruto somando 16, 21 e 45, antes de fatiar isso por 10. Isso acaba gerando a fração calculada cravada no decimal exato 8.2, que classifica com folga estatística o desempenho global do aluno na categoria de classe Bom sem nenhuma distorção interpretativa.


  1. Copyright © 2026 Alyce Suza. Todos os direitos reservados nos termos da Lei 9.610/98. O conteúdo publicado no site https://wiki.suzacybersecurity.com/ é protegido pelas diretrizes brasileiras de propriedade intelectual e a sua autoria é reconhecida desde o momento da criação técnica. O compartilhamento, a reprodução e a distribuição deste material são permitidos e incentivados apenas para finalidades educacionais, acadêmicas ou de consulta técnica, sendo estritamente vedado qualquer tipo de uso comercial. Para que a replicação seja validada e legal, você deve obrigatoriamente atribuir os devidos créditos a Alyce Suza e fornecer um link direto e acessível para a publicação original. A utilização deste material para obter lucro, monetização, venda de materiais ou qualquer vantagem financeira constitui violação de direitos autorais e está sujeita às sanções legais cabíveis, assim como alterações que modifiquem o sentido original das explicações sobre segurança da informação. Para eventuais dúvidas sobre permissões de uso, parcerias ou para reportar replicações indevidas, envie um e-mail para alycesuza@gmail.com. ↩︎