---
sidebar_position: 4
title: "Procedural"
---
# Procedural - Algoritmos Organizados
**Procedural** é como organizar uma empresa: cada departamento (procedimento) tem sua função específica, mas todos trabalham juntos para atingir um objetivo maior!
**Esta é a essência dos ALGORITMOS** - sequências de passos organizados que resolvem problemas!
## **O que é Procedural?**
É organizar **algoritmos** (sequências de passos) em **procedimentos** que executam tarefas específicas, seguindo uma sequência lógica de **cima para baixo**.
### **Algoritmo = Receita Detalhada**
Um **algoritmo** é como uma receita muito específica:
- **Cada passo é claro** (sem ambiguidade)
- **Ordem importa** (passo 2 vem depois do passo 1)
- **Sempre termina** (tem um fim)
- **Resolve o problema** (chega no resultado esperado)
### **Analogia: Construindo uma Casa**
```
PROJETO: Construir Casa
PROCEDIMENTO PrepararTerreno():
- Limpar área
- Nivelar solo
- Marcar fundação
PROCEDIMENTO FazerFundação():
- Cavar buracos
- Colocar ferro
- Despejar concreto
PROCEDIMENTO ConstruirParedes():
- Assentar tijolos
- Fazer argamassa
- Levantar estrutura
PROGRAMA PRINCIPAL:
1. PrepararTerreno()
2. FazerFundação()
3. ConstruirParedes()
4. ColocarTelhado()
5. FazerAcabamento()
```
Cada **procedimento** faz uma parte, mas todos seguem uma **ordem lógica**!
## **Algoritmos - A Base de Tudo**
### **Exemplo de Algoritmo Simples**
```
ALGORITMO: Fazer Sanduíche
1. Pegue 2 fatias de pão
2. Passe manteiga numa fatia
3. Adicione presunto
4. Adicione queijo
5. Feche com a outra fatia
6. Corte na diagonal
RESULTADO: Sanduíche pronto!
```
### **Características de um Bom Algoritmo**
- ** Clareza**: Cada passo é compreensível
- ** Ordem lógica**: Sequência faz sentido
- ** Finitude**: Sempre termina
- ** Eficácia**: Resolve o problema
- ** Eficiência**: Usa poucos passos
## **Características do Paradigma Procedural**
### **1. Fluxo Top-Down (De Cima para Baixo)**
```mermaid
flowchart TD
A[Problema principal] --> B[Dividir em subproblemas]
B --> C[Transformar em procedimentos]
C --> D[Organizar ordem de execução]
D --> E[Executar programa principal]
```
- Começamos com o **problema principal**
- Dividimos em **subproblemas menores**
- Cada subproblema vira um **procedimento**
### **2. Modularidade**
- Código dividido em **módulos/procedimentos**
- Cada módulo tem **responsabilidade específica**
- Fácil de entender e manter
### **3. Reutilização**
- Procedimentos podem ser **chamados várias vezes**
- Evita repetição de código
- Economiza trabalho
### **4. Sequencialidade**
- Execução **passo a passo**
- Uma instrução por vez
- Ordem importa!
## **Atividades Desplugadas**
### **1. Festa de Aniversário**
**Material**: Lista de tarefas, cartões
**Como fazer**:
1. **Problema**: Organizar festa de aniversário
2. **Dividir em procedimentos**:
- `ComprarIngredientes()`
- `DecorarSala()`
- `PrepararComida()`
- `ChamarConvidados()`
3. **Executar na ordem**: Cada equipe fica responsável por um procedimento
### **2. Peça de Teatro**
**Material**: Roteiro simples
**Como fazer**:
1. **Problema**: Apresentar peça
2. **Procedimentos**:
- `PrepararCenário()`
- `AquecerVoz()`
- `AtuarCena1()`
- `AtuarCena2()`
- `Agradecer()`
3. **Executar sequencialmente**: Cada procedimento tem seus atores
### **3. Viagem Escolar**
**Material**: Mapa, lista de atividades
**Como fazer**:
1. **Problema**: Organizar viagem
2. **Procedimentos**:
- `PlanejarRota()`
- `FazerLanche()`
- `SubirOnibus()`
- `VisitarLocal()`
- `VoltarEscola()`
### **4. Encontrar Objeto Perdido (Algoritmo de Busca)**
**Material**: Objetos escondidos na sala
**Como fazer**:
1. **Algoritmo Linear**: Procure um por um, da esquerda para direita
2. **Algoritmo Inteligente**: Divida a sala em metades, elimine metade onde não está
3. **Compare eficiência**: Qual foi mais rápido?
### **5. Organizar Fila por Altura (Algoritmo de Ordenação)**
**Material**: Estudantes
**Como fazer**:
1. **Algoritmo Bolha**: Compare pares vizinhos, troque se necessário
2. **Algoritmo Seleção**: Encontre o menor, coloque no início
3. **Teste qual é mais eficiente** com turmas diferentes
## **Diferenças de Outros Paradigmas**
### **Procedural vs Orientado a Objetos**
```mermaid
flowchart TD
A[Paradigmas de Programação] --> B[Procedural]
A --> C[Orientado a Objetos]
B --> B1[Foco em ações e sequência]
B --> B2[Dados e procedimentos separados]
C --> C1[Foco em entidades e comportamento]
C --> C2[Dados e métodos agrupados]
```
** Procedural**:
- Foco nas **ações/procedimentos**
- "O que o programa **faz**?"
- Dados e procedimentos **separados**
** Orientado a Objetos**:
- Foco nos **objetos/entidades**
- "O que o programa **representa**?"
- Dados e métodos **juntos**
### **Exemplo Comparativo**
** Procedural - Controlar Carro**:
```
PROCEDIMENTO Ligar()
PROCEDIMENTO Acelerar()
PROCEDIMENTO Frear()
PROCEDIMENTO Desligar()
PROGRAMA:
Ligar()
Acelerar()
Frear()
Desligar()
```
** Orientado a Objetos - Carro**:
```
OBJETO Carro:
- propriedades: velocidade, combustível
- métodos: ligar(), acelerar(), frear()
PROGRAMA:
meuCarro = novo Carro()
meuCarro.ligar()
meuCarro.acelerar()
```
## **Na Programação Visual (Decoda)**
### **Estrutura Procedural**
No Decoda, seguimos naturalmente o paradigma procedural:
```
PROCEDIMENTO IniciarJogo():
- Criar personagem
- Definir cenário
- Tocar música
PROCEDIMENTO ProcessarJogada():
- Ler entrada do jogador
- Mover personagem
- Verificar colisões
PROCEDIMENTO FinalizarJogo():
- Mostrar pontuação
- Salvar recorde
- Perguntar se quer jogar novamente
PROGRAMA PRINCIPAL:
IniciarJogo()
ENQUANTO jogo não acabou:
ProcessarJogada()
FinalizarJogo()
```
### **Exemplo: Jogo do Semáforo**
```
PROCEDIMENTO ConfigurarSemáforo():
- Desenhar semáforo na tela
- Definir posição inicial
- Preparar sons
PROCEDIMENTO MudarCor(nova_cor):
- Apagar cor anterior
- Acender nova cor
- Tocar som correspondente
PROCEDIMENTO VerificarEntrada():
- SE botão pressionado
- ENTÃO próxima cor
PROGRAMA PRINCIPAL:
ConfigurarSemáforo()
REPETIR para sempre:
VerificarEntrada()
ESPERAR 1 segundo
```
## **Vantagens da Programação Procedural**
### **1. Fácil de Aprender**
- **Intuitivo**: Pense no problema, divida em partes
- **Natural**: Como resolvemos problemas no dia a dia
- **Sequencial**: Uma coisa por vez
### **2. Fácil de Debugar**
- **Isolamento**: Erro em um procedimento não afeta outros
- **Rastreabilidade**: Fácil encontrar onde está o problema
- **Testing**: Teste cada procedimento separadamente
### **3. Trabalho em Equipe**
- **Divisão de tarefas**: Cada pessoa pode fazer um procedimento
- **Integração**: Juntar depois é mais fácil
- **Paralelismo**: Várias pessoas trabalhando simultaneamente
### **4. Legibilidade**
- **Código limpo**: Cada procedimento tem propósito claro
- **Manutenção**: Fácil entender e modificar
- **Documentação**: Nome do procedimento explica o que faz
## **Limitações e Cuidados**
### **1. Dependências Entre Procedimentos**
- **Problema**: Um procedimento depende de outro
- **Solução**: Planejar bem a ordem de execução
### **2. Compartilhamento de Dados**
- **Problema**: Vários procedimentos precisam dos mesmos dados
- **Solução**: Usar parâmetros ou variáveis globais com cuidado
### **3. Crescimento do Projeto**
- **Problema**: Projetos muito grandes ficam complexos
- **Solução**: Dividir em módulos menores e independentes
## **Ensinando Programação Procedural**
### **Estratégias Pedagógicas**
1. ** Comece com exemplos reais**: Rotina diária, receitas
2. ** Divida problemas grandes**: Mostre como quebrar
3. ** Use atividades físicas**: Representem procedimentos
4. ** Construa gradualmente**: Simples → Complexo
### **Observações nos Estudantes**
** Sinais de Compreensão**:
- Dividem problemas em partes menores naturalmente
- Criam nomes descritivos para procedimentos
- Entendem a importância da ordem de execução
- Reutilizam procedimentos quando apropriado
** Dificuldades Comuns**:
- Criar procedimentos muito grandes
- Não conseguir dividir o problema
- Confundir ordem de execução
- Repetir código em vez de criar procedimentos
## **Procedural no Cotidiano**
### **Cozinha**
```
PROCEDIMENTO PrepararIngredientes()
PROCEDIMENTO CozinharPrato()
PROCEDIMENTO EmpratarComida()
PROCEDIMENTO LimparCozinha()
```
### **Aula**
```
PROCEDIMENTO PrepararMaterial()
PROCEDIMENTO ExplicarConteúdo()
PROCEDIMENTO FazerAtividade()
PROCEDIMENTO CorrigirExercícios()
```
### **Dirigir**
```
PROCEDIMENTO VerificarCarroSeguro()
PROCEDIMENTO LigarCarro()
PROCEDIMENTO ColocarCinto()
PROCEDIMENTO DirigirDestino()
```
## **Pensamento Computacional**
### **Decomposição**
- **Fundamental**: Quebrar problemas em subproblemas
- **Cada subproblema** → vira um procedimento
- **Hierarquia**: Procedimentos podem chamar outros procedimentos
### **Abstração**
- **Esconder complexidade**: Usuário não precisa saber como funciona internamente
- **Interface clara**: Nome e parâmetros explicam o que faz
- **Reutilização**: Mesmo procedimento, diferentes contextos
### **Algoritmos**
- **Cada procedimento é um algoritmo**: Sequência de passos específica
- **Algoritmo principal**: Chama outros algoritmos na ordem certa
- **Otimização**: Melhorar um procedimento melhora todo o programa
## **Objetivos de Aprendizagem**
Ao final desta seção, estudantes devem conseguir:
- **** Dividir problemas complexos em procedimentos menores
- **** Criar procedimentos com nomes descritivos e responsabilidades claras
- **** Organizar procedimentos em sequência lógica
- **** Reutilizar procedimentos quando apropriado
- **** Identificar quando usar programação procedural vs outros paradigmas
## **Atividades de Fixação**
### **1. Decomposição**
Divida estes problemas em procedimentos:
- Organizar festa na escola
- Fazer uma apresentação
- Limpar a casa
### **2. Pseudocódigo Procedural**
Escreva pseudocódigo para:
- Sistema de biblioteca escolar
- Jogo de adivinhação
- Calculadora simples
### **3. Otimização**
- Identifique código repetitivo neste programa
- Crie procedimentos para eliminar repetição
- Organize em estrutura procedural
## **Referências e Recursos**
### **Sites Educativos**
- [Structured Programming](https://www.tutorialspoint.com/structured-programming) - Conceitos básicos
- [Khan Academy - Functions](https://www.khanacademy.org/computing/computer-programming/programming/functions/a/intro-to-functions) - Funções e procedimentos
- [CS50 - Functions](https://cs50.harvard.edu/x/2024/weeks/1/) - Harvard CS50
### **Vídeos Explicativos**
- [Procedural Programming Explained](https://www.youtube.com/watch?v=xLVCqJdSO60) - Conceitos fundamentais
- [Top-Down Design](https://www.youtube.com/watch?v=q86G4Gf_CVE) - Design de cima para baixo
- [Modular Programming](https://www.youtube.com/watch?v=b2pO3ip0S3A) - Programação modular
### **Literatura Clássica**
- Dijkstra, E. (1972). _Structured Programming_. Academic Press
- Wirth, N. (1976). _Algorithms + Data Structures = Programs_. Prentice Hall
- Yourdon, E. (1979). _Structured Design_. Prentice Hall
### **Ferramentas de Ensino**
- [Pseudocode Generator](https://www.pseudocode.io/) - Gerar pseudocódigo
- [Flowchart Maker](https://app.diagrams.net/) - Criar fluxogramas
- [Alice](http://www.alice.org/) - Programação 3D procedural
### **Exemplos Práticos**
- [Scratch](https://scratch.mit.edu/) - Programação visual procedural
- [Logo](http://www.calormen.com/jslogo/) - Linguagem procedural clássica
- [Processing](https://processing.org/) - Arte generativa procedural
---
** Parabéns!** Você completou os **4 Fundamentos da Programação**:
1. ** Condicionais** - Decisões inteligentes
2. ** Loops** - Repetição eficiente
3. ** Funções** - Organização e reutilização
4. ** Procedural** - Algoritmos estruturados
Agora está pronto para aplicar esses conceitos em projetos reais com **Decoda**!