</AULA 06>

Algoritmos e Lógica de Programação

Sub-rotinas: Procedimentos e Funções

Portugol
Linguagem C
Python

Sub-rotinas: O que são e para que servem?

Sub-rotinas são blocos de código isolados que realizam uma tarefa específica. Elas são a base da Modularização.

  • Reutilização: Escreva uma vez, use várias vezes.
  • Organização: Divide um problema grande em partes menores.
  • Manutenção: Facilita encontrar e corrigir erros.

Analogia

Imagine o controle remoto de uma TV. Cada botão (sub-rotina) executa uma função específica (mudar canal, volume) sem que você precise saber como o circuito interno funciona.

Função vs. Procedimento

Procedimento

Executa uma tarefa e não retorna nenhum valor para o chamador.

Em C: usa o tipo void.

Função

Executa uma tarefa e obrigatoriamente retorna um valor ao final.

Em C: usa tipos como int, float, etc.

Escopo de Variáveis: Entendendo as Diferenças

Característica Global Local
Onde nasce? Fora de todas funções. Dentro de uma função.
Onde vive? Em todo o programa. Apenas naquela função.
Quando morre? Ao fechar o programa. Ao fim da função.
Vantagem Dados compartilhados. Economiza memória.
Risco Difícil de rastrear. Nenhum (isolada).

Regra de Ouro:
O principal nunca vê o que está "dentro" (Local), mas a função vê o que está "fora" (Global).

PROGRAMA (GLOBAL) Var_Global FUNÇÃO (LOCAL) Var_Local Visível dentro Invisível fora

Procedimentos (Programas Completos)

Relembrando: Procedimentos realizam uma ação mas não devolvem valor ao programa chamador.

Portugol

Algoritmo exemplo_proc Procedimento saudar() Início Escreva("Olá, Aluno!") Fim_procedimento Início saudar() Fim

Linguagem C

#include <stdio.h> void saudar() { printf("Olá, Aluno!\n"); } int main() { saudar(); return 0; }

Python

def saudar(): """Procedimento""" print("Olá, Aluno!") # Chamada saudar()

Funções (Programas Completos)

Relembrando: Funções são sub-rotinas que processam dados e sempre retornam um resultado ao chamador.

Portugol

Algoritmo exemplo_func Função soma(a: inteiro, b: inteiro): inteiro Início Retorne a + b Fim_função Var res: inteiro Início res <- soma(5, 3) Escreva(res) Fim

Linguagem C

#include <stdio.h> // Definição int soma(int a, int b) { return a + b; } int main() { int res = soma(5, 3); printf("Soma: %d", res); return 0; }

Python

def soma(a, b): return a + b # Chamada res = soma(5, 3) print(f"Soma: {res}")

Passagem de Parâmetro por Valor

Conceito: A sub-rotina recebe uma cópia. Alterar o parâmetro não afeta a variável original.

Portugol

Algoritmo por_valor Procedimento teste(n: inteiro) Início n <- 10 Fim_procedimento Var x: inteiro Início x <- 5 teste(x) Escreva(x) // 5 Fim

Linguagem C

#include <stdio.h> void teste(int n) { n = 10; } int main() { int x = 5; teste(x); printf("%d", x); // 5 return 0; }

Python

def teste(n): n = 10 # Principal x = 5 teste(x) print(x) # 5

Passagem de Parâmetro por Referência

Conceito: A sub-rotina acessa o endereço real da variável. Alterações afetam o dado original.

Portugol

Algoritmo por_ref Procedimento teste(ref n: inteiro) Início n <- 10 Fim_procedimento Var x: inteiro Início x <- 5 teste(x) Escreva(x) // 10 Fim

Linguagem C

#include <stdio.h> // Uso de Ponteiros (*) void teste(int *n) { *n = 10; // Altera o conteúdo } int main() { int x = 5; teste(&x); // Envia endereço (&) printf("%d", x); // Imprime 10 return 0; }

Observação: Python

Em Python, não existem ponteiros manuais. A linguagem gerencia tudo como referências de objetos. Tipos simples (int, float) agem como "valor", enquanto listas e dicionários agem como "referência".

Nota para C

Em C, a passagem por referência usa Ponteiros (* e &). Este tema será o foco de uma aula dedicada exclusivamente em breve!

Referências de Estudo

O Programador Pragmático
Andrew Hunt & David Thomas. Um guia indispensável para ser um profissional completo, abordando ética, automação e refatoração de código.
Ver na Amazon
Código Limpo
Robert C. Martin. O clássico sobre escrever códigos legíveis, focando na importância de sub-rotinas pequenas e bem nomeadas.
Ver na Amazon
Arquitetura Limpa
Robert C. Martin. Explica como estruturar sistemas para que sejam fáceis de manter e escaláveis, aplicando os princípios fundamentais do SOLID.
Ver na Amazon
Fundamentos de Arquitetura
Mark Richards & Neal Ford (O'Reilly). Uma visão moderna sobre padrões de design e as decisões técnicas que definem softwares de sucesso.
Ver na Amazon