Skip to content
Fase 1A Base de Tudo

Lógica de Programação

Progresso da fase0%

A carregar…

A maior causa de desistência em quem aprende sozinho não é a sintaxe — é tentar aprender uma linguagem sem primeiro saber pensar em passos lógicos. Esta fase ensina-te a decompor problemas em algoritmos, sem te preocupares ainda com a forma exata de escrever código. É a fase que a maioria dos cursos salta, e é a que mais falta faz.

Prompt recomendado para esta fase

Estou na Fase 1 a aprender lógica de programação e pensamento algorítmico, ainda sem sintaxe de uma linguagem real. Quando eu te propuser um problema, não me dês código feito. Ajuda-me a escrevê-lo primeiro em pseudocódigo ou como uma lista de passos numerados, em português simples, e só depois discutimos como isso se traduziria numa linguagem de programação.

Conteúdos teóricos

5 temas

1. O que é um algoritmo?

Uma sequência finita e sem ambiguidade de passos que resolve um problema.

Um algoritmo é uma sequência de passos, bem definidos e numa ordem específica, que resolve um problema. Não precisa de código nenhum — uma receita de cozinha é um algoritmo, as instruções de montagem de uma estante são um algoritmo, e o caminho que decoraste para ires de casa ao trabalho também é um algoritmo.

O que torna um algoritmo bom (executável por um computador) é ter três propriedades:

  • Finito: tem um princípio e um fim claros — não pode correr para sempre por acidente.
  • Sem ambiguidade: cada passo só pode ser interpretado de uma forma. "Tempera a gosto" não é um passo válido para um computador; "adiciona 5g de sal" é.
  • Executável: cada passo tem de ser algo que quem (ou o que) o vai seguir consegue realmente fazer.

Porque começamos aqui, sem código

É tentador querer "ir direto ao JavaScript". Mas se ainda não consegues descrever em português, passo a passo, como decidirias se um número é par, vais lutar contra duas coisas ao mesmo tempo quando tentares escrever isso em código: a lógica e a sintaxe. Esta fase separa os dois problemas — aqui só treinas a lógica. A sintaxe começa a sério na Fase 2, e vai parecer muito mais fácil por já teres a cabeça treinada.

Um exemplo já em algoritmo

Problema: decidir se posso atravessar a rua.

  1. Olha para o semáforo de peões.
  2. Se estiver verde, atravessa.
  3. Se estiver vermelho, espera.
  4. Volta ao passo 1.

Repara: passo 2 e 3 são decisões, e o passo 4 é uma repetição que volta ao início. Já usaste, sem código nenhum, as duas estruturas mais importantes da programação.

2. Pseudocódigo: escrever lógica sem sintaxe

Uma forma de escrever algoritmos parecida com código, mas sem regras rígidas de nenhuma linguagem.

Pseudocódigo é uma forma de escrever a lógica de um algoritmo usando uma estrutura parecida com código (linhas, indentação, palavras como SE/ENTÃO/ENQUANTO), mas sem teres de respeitar a sintaxe exata de nenhuma linguagem. Serve para pensares na lógica sem seres travado por um ponto e vírgula esquecido.

Convenções que vamos usar nesta plataforma

  • INÍCIO / FIM — marcam o começo e o fim do algoritmo.
  • LER variável — pedir um valor de entrada (ex: ao utilizador).
  • ESCREVER valor — mostrar um resultado.
  • SE condição ENTÃO ... SENÃO ... — uma decisão.
  • ENQUANTO condição FAÇA ... — uma repetição que continua enquanto a condição for verdadeira.
  • variável ATRIBUI valor — atribuir um valor a uma variável (em código real isto vai virar =).

Exemplo: verificar se um número é par

  • INÍCIO
  • LER numero
  • resto ATRIBUI resto da divisão de numero por 2
  • SE resto = 0 ENTÃO
  • ESCREVER "É par"
  • SENÃO
  • ESCREVER "É ímpar"
  • FIM SE
  • FIM

Repara como isto já se parece com código, mas nenhuma linguagem real usa exatamente esta sintaxe — e não faz mal. O objetivo do pseudocódigo é comunicar a lógica, a ti mesmo ou a outra pessoa, sem te preocupares com detalhes de uma linguagem específica. Vais escrever pseudocódigo sempre que o problema for complexo o suficiente para valer a pena planear antes de codificar — é um hábito de programadores experientes, não só de iniciantes.

3. Fluxogramas: desenhar a decisão

Uma representação visual do algoritmo, com formas diferentes para cada tipo de passo.

Um fluxograma é a versão desenhada de um algoritmo. Usa formas geométricas diferentes consoante o tipo de passo, ligadas por setas que mostram a ordem de execução:

  • Oval: início ou fim do algoritmo.
  • Retângulo: uma ação ou instrução simples (ex: "somar 1 ao contador").
  • Losango (diamante): uma decisão — tem sempre pelo menos duas setas a sair, uma para "sim" e outra para "não".
  • Paralelogramo: entrada ou saída de dados (ler um valor, mostrar um resultado).
  • Seta: a ordem em que os passos acontecem.

Porque vale a pena, mesmo sem desenhares fisicamente

Nesta plataforma vais descrever fluxogramas por escrito, listando cada forma e o que ela representa — mas o exercício mental é o mesmo que desenhá-lo numa folha. A vantagem de pensar em fluxograma é que obriga-te a ver todos os caminhos possíveis. Se um losango só tiver uma seta a sair, esqueceste-te de tratar um dos casos — e é exatamente esse tipo de esquecimento que mais tarde causa bugs.

Exemplo descrito: "É par ou ímpar?"

  1. Oval — Início.
  2. Paralelogramo — Ler o número.
  3. Losango — "O resto da divisão por 2 é igual a 0?"
    • Seta Sim leva a um Retângulo "Escrever: é par", que leva ao Oval Fim.
    • Seta Não leva a um Retângulo "Escrever: é ímpar", que leva ao Oval Fim.

Este é o mesmo algoritmo do tema anterior, agora pensado como um mapa de decisões em vez de uma lista de linhas. As duas formas — pseudocódigo e fluxograma — descrevem a mesma lógica; usa a que fizer mais sentido para ti em cada problema.

4. Os três blocos de construção: sequência, decisão, repetição

Qualquer programa, por mais complexo, é feito só destas três estruturas combinadas.

Existe um resultado clássico em ciência da computação chamado teorema da programação estruturada: qualquer algoritmo, por mais complexo, pode ser construído usando apenas três estruturas.

1. Sequência

Passos que acontecem um a seguir ao outro, na ordem em que foram escritos. É o comportamento padrão — a não ser que digas ao computador para decidir ou repetir, ele só segue em frente, linha a linha.

2. Decisão (seleção)

Escolher entre dois ou mais caminhos, consoante uma condição seja verdadeira ou falsa. É o SE / SENÃO que já viste. Uma aplicação real está cheia de decisões: "se o carrinho estiver vazio, mostra uma mensagem; senão, mostra os produtos".

3. Repetição (iteração)

Repetir um bloco de passos várias vezes, sem os reescreveres. É o ENQUANTO. Sem repetição, processar uma lista de 1000 produtos exigiria escrever 1000 vezes o mesmo passo à mão.

Porque isto importa mais do que parece

Quando começares a ver código real na Fase 2 e na Fase 3, vais reconhecer estas três estruturas debaixo de nomes diferentes (if/else, for, while, switch). Não são conceitos novos — são só a mesma ideia com sintaxe de JavaScript. Se conseguires olhar para qualquer problema e responder "isto é sequência, decisão ou repetição — ou uma combinação das três?", já pensas como programador, independentemente da linguagem.

Exercício mental rápido

Pensa num multibanco a levantar dinheiro. Onde estão a sequência, a decisão e a repetição?

  • Sequência: inserir cartão, depois inserir PIN, depois escolher valor, depois receber dinheiro.
  • Decisão: "o PIN está correto?", "há saldo suficiente?".
  • Repetição: "o PIN está errado — tenta outra vez" (até 3 tentativas, outra decisão a controlar a repetição).

5. Do pseudocódigo ao código real

Como cada peça do pseudocódigo vai aparecer em JavaScript já na próxima fase.

Antes de avançares, vale a pena veres rapidamente a ponte entre o que aprendeste aqui e o que vem a seguir. Não precisas de decorar nada disto agora — a Fase 2 vai ensinar cada peça com calma.

Tabela de equivalência

  • variável ATRIBUI valor no pseudocódigo torna-se let variável = valor; ou const variável = valor; em JavaScript.
  • SE condição ENTÃO ... SENÃO ... torna-se if (condição) { ... } else { ... }.
  • ENQUANTO condição FAÇA ... torna-se while (condição) { ... } (ou for, uma variante mais compacta para repetições contadas).
  • ESCREVER valor torna-se console.log(valor);.
  • LER variável depende do contexto — nos primeiros exercícios da Fase 2 vamos simplesmente atribuir o valor diretamente no código, sem pedir input ao utilizador.

Porque isto não é "decorar traduções"

Não estás a decorar uma tabela de conversão — estás a perceber que a lógica não muda, só a forma de a escrever muda. Um programador experiente que aprende uma linguagem nova (de JavaScript para Python, por exemplo) passa por exatamente este processo: a lógica já a sabe, só tem de aprender a nova sintaxe. É essa competência transferível que esta fase te está a dar.

A partir da próxima fase, vais escrever o pseudocódigo do problema mentalmente (ou no papel, se for complexo) antes de abrires o VS Code. É o hábito mais valioso que podes levar desta plataforma.

Exercícios práticos

4 exercícios
Fácil

Exercício Fácil — Escrever um Algoritmo do Dia a Dia

Descreve, em passos numerados e sem ambiguidade, como fazer um chá — sem código nenhum.

FerramentasVS Code

O objetivo é treinares a decompor uma tarefa simples em passos completamente explícitos, sem assumires nada que "toda a gente sabe".

Passos a realizar

  1. Cria um ficheiro algoritmo-cha.md (ou .txt) na pasta fase1.
  2. Escreve o algoritmo para "fazer um chá", numerado, do INÍCIO ao FIM.
  3. Cada passo tem de ser uma ação única e sem ambiguidade — nada de "prepara os ingredientes" como um único passo.
  4. Inclui pelo menos uma decisão (ex: "SE gostas de açúcar ENTÃO adiciona uma colher").
  5. Troca este algoritmo com alguém (ou lê-o em voz alta como se fosses um robô muito literal) e verifica se falta algum passo óbvio — é normal faltarem 2 ou 3 à primeira tentativa.

Dicas úteis

  • Se um passo puder ser interpretado de mais do que uma forma, ainda não está pronto — divide-o em passos mais pequenos.
  • Não te esqueças dos passos "óbvios": ligar o fervedor, esperar a água ferver. Um computador não sabe nada que não lhe digas.

Erros comuns

  • Saltar passos por parecerem óbvios demais para escrever — é precisamente aí que os algoritmos falham.
  • Escrever o algoritmo como um parágrafo de texto corrido em vez de passos numerados e separados.

As minhas dúvidas

Médio

Exercício Médio — Descrever um Fluxograma de Decisão

Descreve por escrito, forma a forma, o fluxograma que decide se um número é positivo, negativo ou zero.

FerramentasVS Code

Desta vez o problema já tem três caminhos possíveis em vez de dois — vais praticar decisões encadeadas (uma decisão dentro de outra).

Passos a realizar

  1. Cria fluxograma-numero.md na pasta fase1.
  2. Lista as formas do fluxograma na ordem correta: Oval (início), Paralelogramo (ler número), Losango, e por aí fora até ao Oval (fim).
  3. O primeiro losango pergunta "o número é maior que 0?". Se não for, precisas de um segundo losango dentro do caminho "não", para distinguir negativo de zero.
  4. Para cada losango, escreve explicitamente as duas setas de saída (sim/não) e para onde apontam.
  5. Depois de escrito, testa mentalmente com três números: 5, -3, 0 — percorre o teu próprio fluxograma passo a passo com cada um e confirma que chegas à resposta certa.

Fluxo de funcionamento

  1. 1Início
  2. 2Ler número
  3. 3Número > 0?
  4. 4Positivo / Negativo / Zero

Dicas úteis

  • Uma decisão encadeada (losango dentro de um caminho de outro losango) é normal — é assim que se lida com mais de duas opções.
  • Testar "à mão" com valores concretos (5, -3, 0) é a melhor forma de apanhar um erro de lógica antes de escreveres código.

Erros comuns

  • Esquecer o caso "zero" e só tratar positivo/negativo, deixando o zero cair no caminho errado.
  • Um losango com só uma seta de saída — todo losango tem de ter exatamente duas (sim e não).

As minhas dúvidas

Médio

Exercício Médio — Pseudocódigo com Repetição e Tabela de Teste

Escreve em pseudocódigo um algoritmo que soma os números de 1 até N, e verifica-o com uma tabela de teste manual.

FerramentasVS Code

Este é o primeiro exercício com uma repetição de verdade — vais também aprender a técnica de tabela de teste, que os programadores usam para verificar lógica à mão antes de a correr.

Passos a realizar

  1. Cria pseudocodigo-soma.md na pasta fase1.
  2. Escreve em pseudocódigo um algoritmo que lê um número N, soma todos os números inteiros de 1 até N (ex: se N=4, soma 1+2+3+4), e escreve o resultado final.
  3. Usa ENQUANTO para a repetição, e uma variável total que começa em 0 e vai acumulando.
  4. Constrói uma tabela de teste: uma tabela simples em texto com colunas contador, total e condição ainda verdadeira?, e preenche-a linha a linha simulando N=3 à mão, do início ao fim.
  5. Confirma que o valor final de total na tua tabela é 6 (1+2+3).

Fluxo de funcionamento

  1. 1total=0, contador=1
  2. 2contador <= N ?
  3. 3total += contador; contador += 1
  4. 4Escrever total

Dicas úteis

  • A tabela de teste é a mesma técnica que vais usar para caçar bugs de lógica em código real — vale a pena habituares-te já.
  • Não esqueças de incrementar o contador dentro do ENQUANTO — sem isso, a condição nunca deixa de ser verdadeira e o algoritmo repetiria para sempre.

Erros comuns

  • Inicializar o total dentro do próprio ENQUANTO, o que o reinicia a cada volta em vez de acumular.
  • Esquecer de atualizar o contador, criando um algoritmo que nunca terminaria se fosse executado de verdade.

As minhas dúvidas

Difícil

Exercício Difícil — Da Lógica ao Primeiro JavaScript Real

Traduz o teu pseudocódigo da soma de 1 até N para JavaScript real, usando a tabela de equivalência do tema 5.

FerramentasVS CodeTerminalNode.js

Este exercício fecha a fase construindo a ponte: vais pegar no pseudocódigo que já validaste com a tabela de teste e traduzi-lo, linha a linha, para JavaScript — a tua primeira repetição em código real.

Passos a realizar

  1. Cria soma.js na pasta fase1.
  2. Usando a tabela de equivalência do tema 5, traduz o teu pseudocódigo: o total ATRIBUI 0 vira let total = 0;, o ENQUANTO vira while (...), etc.
  3. Fixa o valor de N diretamente no código por agora (ex: const N = 5;) — pedir valores ao utilizador é tema da Fase 2.
  4. No fim, usa console.log(total) para mostrar o resultado.
  5. Corre com node soma.js e confirma que o resultado bate certo com a tua tabela de teste (para N=5, o resultado deve ser 15).
  6. Muda o valor de N para 10 e confirma mentalmente (ou numa nova tabela de teste) que o resultado (55) também está certo, antes de correr.

Código de exemplo

soma.js
const N = 5;
let total = 0;
let contador = 1;

while (contador <= N) {
  // completa aqui, usando a tua tabela de equivalência
}

console.log("Soma de 1 até", N, "=", total);
Ponto de partida — completa a lógica que já validaste em pseudocódigo

Dicas úteis

  • Se o resultado não bater certo com a tua tabela de teste, o erro está quase sempre na condição do while ou no sítio onde incrementas o contador — os dois erros mais comuns em repetições.
  • Este exercício não introduz nada de novo em termos de lógica — é só a lógica que já validaste, agora com sintaxe real. Se sentires que "é muita coisa nova", volta ao pseudocódigo primeiro.

Erros comuns

  • Confundir atribuição com comparação dentro da condição do while — vais ver isto em detalhe já na Fase 2.
  • Esquecer as chavetas à volta do bloco do while, o que faz o JavaScript só repetir a primeira linha seguinte.

As minhas dúvidas