Capítulo 18: Funções com Retorno Tipado e Parâmetros (Modularização II)
🎯 Objetivo da Aula
Enquanto um Procedimento apenas executa uma tarefa sem devolver nada para quem o chamou (como imprimir um texto), uma Função é uma máquina matemática: ela recebe dados de entrada (parâmetros), processa a lógica internamente e devolve um resultado concreto (retorno) que pode ser guardado em uma variável ou utilizado dentro de uma expressão matemática.
Nesta aula, você aprenderá a:
- Compreender a diferença fundamental entre Procedimentos e Funções.
- Dominar a sintaxe:
funcao Nome(params) : tipo_retorno ... retorne valor ... fimfuncao. - Utilizar funções dentro de expressões de cálculo (
total <- CalcularFrete(p, k) * 1.10). - Compreender a diferença entre Passagem de Parâmetros por Valor e Passagem por Referência (
var).
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_18.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_18.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O departamento de engenharia tarifária da FastLog precisa padronizar os cálculos de frete de toda a empresa. A fórmula do frete é complexa: $$\text{FreteBase} = (\text{DistanciaKm} \times \text{R$,3.50}) + (\text{PesoKg} \times \text{R$,0.80})$$ $$\text{FreteFinal} = \text{FreteBase} + \text{Pedagios} + \text{Seguro}$$ Se cada programador escrever essa conta manualmente em diferentes partes do sistema, qualquer reajuste de tarifas causará divergências financeiras.
Missão: Você deve construir a Biblioteca Central de Funções Tarifárias, criando funções puras com retorno tipado que calculem o frete, o seguro e o ICMS de maneira centralizada.
🧠 Fundamentos: A Teoria das Funções na Computação
1. Procedimento vs Função (O Confronto Definitivo)
| Característica | Procedimento (procedimento) | Função (funcao) |
|---|---|---|
| Gera valor de retorno? | ❌ Não. Apenas executa ações na tela ou no sistema. | ✅ Sim. Devolve obrigatoriamente um valor tipado. |
| Comando de Saída | Não possui. | Exige o comando retorne valor. |
| Pode ser guardada em variável? | ❌ Não (x <- Imprimir() gera erro!). | ✅ Sim (x <- CalcularTotal(10, 20)). |
Pode ser usada dentro de um se? | ❌ Não. | ✅ Sim (se ValidarSenha(s) entao). |
graph LR
subgraph Chamada ["Programa Principal"]
Input["Argumentos: peso=500, km=200"] --> Func["Chama: CalcularFrete(500, 200)"]
end
subgraph CaixaPreta ["Função CalcularFrete() : real"]
Func --> Proc["Processa cálculo interno"]
Proc --> Ret["retorne 1100.00"]
end
Ret --> Output["Variável 'totalFrete' recebe: R$ 1100.00"]
style Input fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style Func fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style Ret fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
style Output fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. A Sintaxe de uma Função no VisuAlg
3. Passagem de Parâmetros: Por Valor vs Por Referência (var)
- Por Valor (Padrão): O computador envia apenas uma cópia do dado. Se a função alterar o valor do parâmetro lá dentro, a variável original de fora permanece intacta.
- Por Referência (Palavra
varno parâmetro): O computador envia o endereço real da memória. Qualquer modificação feita no parâmetro alterará diretamente a variável original fora da função!
📖 Exemplo Guiado: Motor Tarifário com Funções Puras
Código do Algoritmo:
✅ Exemplo de Execução no Console (F9):
Repare que AplicarDescontoFidelidade é um procedimento (não devolve valor com retorne), mas usa var no primeiro parâmetro: por isso ele consegue alterar diretamente o conteúdo de valorComSeguro sem precisar de uma atribuição de retorno como valorComSeguro <- AplicarDescontoFidelidade(...).
🛠️ Prática Obrigatória 1: Função de Validação Booleana de Placa
Passo 1: O Desafio
Crie uma função que receba uma string de placa e devolva um valor logico (VERDADEIRO se a placa for válida com exatamente 7 caracteres, ou FALSO se for inválida).
Sintaxe: funcao ValidarTamanhoPlaca(placa : caractere) : logico
(Dica: use a função nativa Compr(placa) = 7).
No programa principal, leia uma placa e use a sua função dentro de um se:
se (ValidarTamanhoPlaca(p)) entao escreval("Placa regular") senao ...
🛠️ Prática Obrigatória 2: Calculadora de Média Ponderada de Performance
Crie uma função CalcularScoreMotorista(notaPontualidade, notaSeguranca, notaEconomia : real) : real que calcule a média ponderada com os seguintes pesos:
- Pontualidade: Peso 4
- Segurança: Peso 4
- Economia de Combustível: Peso 2 $$\text{Score} = \frac{(P \times 4) + (S \times 4) + (E \times 2)}{10}$$
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_SeuNome_SeuSobrenome.alg. - Certifique-se de que todas as funções utilizam o comando
retornepara devolver o resultado. - No Microsoft Teams, envie na tarefa “VisuAlg Cap 18 - Funções com Retorno”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Funções Puras (Pure Functions). Em programação funcional e arquiteturas modernas de microsserviços (como AWS Lambda e Google Cloud Functions), as funções são desenhadas sem efeitos colaterais: recebem dados por parâmetro e retornam novos dados com total previsibilidade.
🔥 Desafio de Fixação: Função de Conversão de Moeda (Dólar para Real)
Crie uma função ConverterDolar(valorUSD : real, cotacaoAtual : real) : real e utilize-a para cotar fretes internacionais cobrados em dólares.
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Segundo a tabela comparativa dos Fundamentos, um Procedimento gera valor de retorno? E uma Função gera valor de retorno?
- Qual comando é obrigatório dentro de uma função para devolver o valor de retorno a quem a chamou?
- É possível guardar o retorno de um procedimento em uma variável (como em
x <- Imprimir())? E o retorno de uma função? - Escreva a estrutura geral da sintaxe de uma função no VisuAlg, indicando onde o tipo do valor de retorno é declarado no cabeçalho.
- Qual é a diferença entre a passagem de parâmetros por valor e a passagem por referência (uso da palavra
varno parâmetro)? - No Cenário Prático, quais são as duas fórmulas (FreteBase e FreteFinal) usadas para calcular o custo do frete da FastLog?
- No Exemplo Guiado (
Motor_Tarifario_FastLog), quais são as duas funções criadas, e o que cada uma calcula? - Na Prática Obrigatória 1, qual função nativa do VisuAlg é sugerida para verificar o comprimento da placa, e quantos caracteres uma placa válida deve ter?
- Na Prática Obrigatória 2, quais são os pesos atribuídos a Pontualidade, Segurança e Economia de Combustível no cálculo do Score do motorista?
- Segundo o Checkpoint de Lógica, a que conceito de programação as funções sem efeitos colaterais estão associadas, e quais dois serviços de nuvem são citados como exemplo?