EuraStudy
Resumos/Aplicações Informáticas B/Programação
Resumos · Aplicações Informáticas BPT · Secundário

Programação

Traduz-se a algoritmia em programas: distinguem-se as linguagens de programação (baixo/alto nível) e o papel de compiladores e interpretadores, e programa-se numa linguagem de alto nível — variáveis e entrada/saída, estruturas de controlo, estruturas de dados (arrays/listas), funções e procedimentos, e ainda o teste e a depuração. Segunda parte da unidade de Introdução à Programação de Aplicações Informáticas B (12.º ano), disciplina de opção sem Exame Nacional, avaliada internamente com forte componente prática.

5 secções·~16 min de leitura·5 competências·Nível Base 1 · Padrão 2 · Aprofundamento 2

T·0222 / 9
Perfil de exame
Distinguir níveis de linguagem e o papel de compilador e interpretadorTraduzir algoritmos para código correto (variáveis, E/S, controlo)Usar arrays/listas para armazenar e processar conjuntos de dadosDecompor um problema em funções e procedimentosTestar e depurar programas, identificando os tipos de erro
Operadores:distinguetraduzescreveaplicapercorredecompõetestadepura

nível básico

Traduzir algoritmos simples para uma linguagem de alto nível, com variáveis, entrada/saída e estruturas de controlo.

nível avançado

Usar arrays e funções para estruturar programas e validá-los com casos de teste bem escolhidos.

Profundidade

Profundidade de leitura: Aprofundado

Texto

Tamanho do texto: Padrão

Conteúdo · 5 secções▾
  1. Programação
    • 01Da algoritmia ao programa: linguagens, compiladores e interpretadores○
    • 02Variáveis, tipos e entrada/saída em código◐
    • 03Estruturas de controlo em código◐
    • 04Estruturas de dados: arrays e listas●
    • 05Funções, decomposição modular e depuração●
§ 01

Da algoritmia ao programa: linguagens, compiladores e interpretadores#

●○○BaseLPAE-aplicacoes-informaticas-b-12-programacao

Pontos-chave

Um programa é um algoritmo escrito numa linguagem de programação — um conjunto rigoroso de regras que o computador consegue interpretar. As linguagens dividem-se por nível de abstração. As de baixo nível (linguagem máquina, em binário, e assembly) estão próximas do processador, são rápidas mas difíceis para o humano. As de alto nível (Python, Java, C, JavaScript…) aproximam-se da linguagem natural e da matemática, são portáveis entre máquinas e muito mais legíveis. As Aprendizagens Essenciais não impõem uma linguagem concreta — usa-se uma linguagem de alto nível; os exemplos deste resumo mostram-se em pseudocódigo estruturado, muito próximo de linguagens como o Python.
O computador só executa diretamente linguagem máquina, pelo que o código de alto nível (o código-fonte) tem de ser traduzido. Há dois grandes modelos de tradução (Fig. 1). Um compilador traduz todo o programa de uma vez, gerando um ficheiro executável (código-objeto/máquina) que corre depois de forma autónoma e rápida (é o modelo do C). Um interpretador traduz e executa instrução a instrução, no momento (é o modelo típico do Python): é mais flexível e cómodo para desenvolver e testar, mas em geral mais lento. Alguns ambientes combinam os dois (compilação para um código intermédio interpretado por uma máquina virtual, como o Java).

Do código-fonte à execução

Compilador vs interpretadorGrafo, Código-fonte (alto nível) → Compilador, Compilador → Executável (máquina), Executável (máquina) → Execução, Código-fonte (alto nível) → Interpretador, Interpretador → ExecuçãoCódigo-fonte(alto nível)CompiladorExecutável(máquina)InterpretadorExecução
Fig. 1Fig. 1 — Dois modelos de tradução: o compilador gera um executável; o interpretador traduz e executa linha a linha.
Toda a linguagem tem uma sintaxe e uma semântica, e é essencial não as confundir. A sintaxe é o conjunto de regras de escrita (a «gramática»): que palavras-chave existem, onde vão os parênteses, como se termina uma instrução. A semântica é o significado — o que o programa faz. Um programa pode estar sintaticamente correto (o tradutor aceita-o) e mesmo assim ter a semântica errada (não faz o que se pretendia): é o erro de lógica, o mais difícil de encontrar.
O trabalho de programação faz-se num ambiente de desenvolvimento integrado (IDE), que reúne editor de código (com realce de sintaxe), tradutor (compilador/interpretador), consola de execução e ferramentas de depuração (debugger). O IDE ajuda a escrever, executar e corrigir os programas de forma produtiva. O ciclo habitual é: escrever/editar → traduzir e executar → observar o resultado → corrigir — repetido até o programa estar correto.
Exemplo resolvido

Compilado ou interpretado?

Classifica quanto ao modelo de tradução: (a) um programa em C que produz um ficheiro .exe; (b) um guião em Python executado com o comando «python programa.py».

  1. 01Caso (a)

    O C é compilado: todo o código-fonte é traduzido de uma vez para um executável em linguagem máquina, que corre depois sozinho.

  2. 02Caso (b)

    O Python é (tipicamente) interpretado: o interpretador lê, traduz e executa o guião instrução a instrução, sem gerar um executável autónomo.

  3. 03Consequência

    O executável de C tende a ser mais rápido; o Python é mais cómodo para desenvolver e testar rapidamente.

Resultado: (a) compilado; (b) interpretado — dois modelos de tradução do mesmo código-fonte de alto nível para algo executável.

Foco no Exame Nacional

  • Distinguir linguagens de baixo e de alto nível e explicar as vantagens do alto nível (legibilidade, portabilidade).
  • Comparar compilador e interpretador (tradução total vs instrução a instrução) e distinguir sintaxe de semântica.

Erros frequentes

  • Confundir compilador com interpretador: o compilador traduz o programa todo antes de correr; o interpretador traduz e executa linha a linha.
  • Achar que um programa que o tradutor aceita está necessariamente correto — a sintaxe correta não garante a semântica correta.

Revisão ativa

Explica, para um programa em Python e outro em C, como cada um passa do código-fonte à execução, indicando se é usado interpretador ou compilador. Dá uma vantagem de cada modelo.

Evocação ativa

Recorda os pontos-chave — depois revela.

Fontes: Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE) (Direção-Geral da Educação (DGE))

§ 02

Variáveis, tipos e entrada/saída em código#

●●○PadrãoLPAE-aplicacoes-informaticas-b-12-programacao

Pontos-chave

Num programa, cada variável guarda um valor de um dado tipo. Nalgumas linguagens é preciso declarar a variável indicando o tipo (por exemplo, em C, «int idade;»); noutras, como o Python, o tipo é inferido do valor atribuído (tipagem dinâmica: «idade ← 17» cria uma variável inteira). Os tipos básicos correspondem aos da algoritmia: inteiro, real (vírgula flutuante), booleano e cadeia de carateres (string). O nome da variável deve ser significativo e seguir as regras da linguagem (começar por letra, sem espaços).
A entrada de dados obtém valores do exterior (habitualmente do teclado): em pseudocódigo «ler(x)»; numa linguagem, funções como «input()» (Python). O que vem do teclado costuma chegar como texto, pelo que é frequente ser preciso converter o tipo — por exemplo, transformar a cadeia «"17"» no inteiro 17 antes de fazer contas. A saída apresenta resultados (no ecrã): «escrever(x)» / «print()». A conversão de tipos (cadeia ↔ número) é uma fonte comum de erros de principiante.
A atribuição «variável ← expressão» (escrita «=» em muitas linguagens) avalia a expressão à direita e guarda o resultado. É importante não confundir a atribuição «=» com a comparação de igualdade, que em muitas linguagens se escreve «==»: «x = 5» guarda 5 em x; «x == 5» pergunta se x vale 5 (produz Verdadeiro/Falso). Confundir «=» com «==» é um erro clássico e difícil de detetar.
Um primeiro programa completo combina entrada, processamento e saída. Por exemplo, ler dois números e escrever a sua soma (Fig. 2): «a ← ler()»; «b ← ler()»; «soma ← a + b»; «escrever(soma)». Este esqueleto entrada → cálculo → saída é a base de quase todos os programas simples; a partir dele acrescentam-se decisões e ciclos.

Programa «ler dois números e escrever a soma»

Soma de dois númerosGrafo, Início → Ler A, Ler A → Ler B, Ler B → soma ← A + B, soma ← A + B → Escrever soma, Escrever soma → FimInícioLer ALer Bsoma ← A + BEscrever somaFim
Fig. 2Fig. 2 — Esqueleto entrada → processamento → saída de um programa simples.
Exemplo resolvido

Ler dois números e escrever a soma

Escreve o programa que lê dois inteiros e escreve a sua soma, tratando a conversão de tipos, e simula-o para A = 8 e B = 5.

  1. 01Leitura e conversão

    a ← inteiro(ler()); b ← inteiro(ler()) — converte o texto do teclado em inteiro.

  2. 02Processamento

    soma ← a + b.

  3. 03Saída e simulação

    escrever(soma). Para a = 8 e b = 5: soma = 8 + 5 = 13.

Resultado: O programa escreve 13. Sem a conversão para inteiro, «"8" + "5"» daria a concatenação «"85"» — o erro típico de esquecer os tipos.

Foco no Exame Nacional

  • Escrever um programa que leia dados, os processe e escreva o resultado, com os tipos corretos.
  • Distinguir a atribuição («=») da comparação de igualdade («==») e reconhecer a necessidade de conversão de tipos.

Erros frequentes

  • Somar dados lidos do teclado sem os converter de texto para número, obtendo uma concatenação ou um erro em vez da soma.
  • Escrever «=» (atribuição) onde é preciso «==» (comparação), numa condição de seleção ou de ciclo.

Revisão ativa

Escreve um programa (em pseudocódigo) que leia a base e a altura de um retângulo e escreva a sua área. Indica os tipos das variáveis usadas.

Evocação ativa

Recorda os pontos-chave — depois revela.

Fontes: Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE) (Direção-Geral da Educação (DGE))

§ 03

Estruturas de controlo em código#

●●○PadrãoLPAE-aplicacoes-informaticas-b-12-programacao

Pontos-chave

As três estruturas de controlo da algoritmia (sequência, seleção e repetição) traduzem-se diretamente em código. A seleção usa «se … senão»: em pseudocódigo «Se condição Então … Senão …»; em Python «if condição: … else: …», com «elif» para os casos intermédios. A condição é uma expressão booleana (com operadores relacionais e lógicos). A indentação (o avanço das linhas) delimita o bloco que pertence a cada ramo — em Python a indentação é obrigatória e faz parte da sintaxe.
A repetição por condição usa o ciclo «enquanto» («while condição: …»): repete o corpo enquanto a condição for verdadeira, testando-a antes de cada passagem. É a escolha quando não se sabe à partida quantas repetições serão precisas (por exemplo, ler valores até aparecer um zero). Tal como na algoritmia, é imperativo que algo no corpo faça a condição acabar por ficar falsa, sob pena de ciclo infinito.
A repetição por contador usa o ciclo «para» («for»): repete um número de vezes conhecido, percorrendo uma gama de valores («para i de 1 até N») ou os elementos de uma coleção («para cada elemento da lista»). A variável de controlo é atualizada automaticamente. Usa-se o «para» quando o número de iterações é conhecido; o «enquanto» quando depende de uma condição sobre os dados. A Fig. 3 mostra um ciclo «para» com uma seleção lá dentro, para somar apenas os números pares.

Ciclo «para» com seleção: somar os pares de 1 a N

Somar os paresGrafo, soma ← 0; i ← 1 → i ≤ N ?, i ≤ N ? → i mod 2 = 0 ?, i mod 2 = 0 ? → soma ← soma + i, i mod 2 = 0 ? → i ← i + 1, soma ← soma + i → i ← i + 1, i ← i + 1 → i ≤ N ?, i ≤ N ? → Escrever somasoma ← 0; i ← 1i ≤ N ?i mod 2 = 0 ?soma ← soma + ii ← i + 1Escrever somaVparímparF
Fig. 3Fig. 3 — Um ciclo «para» que percorre 1..N e, com uma seleção interior, soma só os números pares.
As estruturas podem aninhar-se: uma seleção dentro de um ciclo, um ciclo dentro de outro (ciclos encaixados, por exemplo para percorrer uma tabela de duas dimensões). O aninhamento dá poder expressivo, mas exige cuidado com a indentação e com as condições. Escrever primeiro o fluxograma ou o pseudocódigo ajuda a acertar a lógica antes de a codificar.
Exemplo resolvido

Somar os números pares de 1 a 10

Simula o algoritmo da Fig. 3 para N = 10 e indica a soma dos números pares.

  1. 01Pares no intervalo

    Entre 1 e 10, «i mod 2 = 0» é verdadeiro para 2, 4, 6, 8 e 10.

  2. 02Acumulação

    soma passa por: 2, depois 6, depois 12, depois 20, depois 30.

  3. 03Verificação

    2 + 4 + 6 + 8 + 10 = 30 — confere com o valor acumulado.

Resultado: soma = 30. A seleção «i mod 2 = 0» dentro do ciclo filtra corretamente os pares.

Foco no Exame Nacional

  • Traduzir seleções e ciclos para código, escolhendo «para» (contador) ou «enquanto» (condição) conforme o problema.
  • Aninhar corretamente uma seleção dentro de um ciclo e prever o seu resultado.

Erros frequentes

  • Errar a indentação/delimitação do bloco, fazendo com que uma instrução fique dentro (ou fora) do ciclo ou do «se» por engano.
  • Usar um ciclo «enquanto» sem atualizar a variável da condição — ciclo infinito — ou trocar «=» por «==» na condição.

Revisão ativa

Escreve um programa que percorra os inteiros de 1 a 20 e escreva apenas os múltiplos de 3. Que estrutura de repetição usas e porquê?

Evocação ativa

Recorda os pontos-chave — depois revela.

Fontes: Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE) (Direção-Geral da Educação (DGE))

§ 04

Estruturas de dados: arrays e listas#

●●●AprofundamentoLPAE-aplicacoes-informaticas-b-12-programacao

Pontos-chave

Uma variável simples guarda um só valor; para tratar conjuntos de valores usa-se um array (vetor) ou lista — uma estrutura que guarda vários valores do mesmo género sob um único nome, acedidos por um índice (posição). Por exemplo, «notas» pode guardar as classificações de uma turma; «notas[2]» é a nota na posição 2. Na maioria das linguagens (Python, C, Java) a indexação começa em zero: o primeiro elemento é o índice 0, o segundo o índice 1, e assim por diante (Fig. 4).

Um array e os seus índices

Array de 4 elementosTabela com 5 colunas e 1 linhas, Dados: Índice (posição) · 0 · 1 · 2 · 3; Valor · 10 · 20 · 30 · 40ÍNDICE (POSIÇÃO)0123Valor10203040
Fig. 4Fig. 4 — A lista [10, 20, 30, 40] tem 4 elementos e índices válidos de 0 a 3; «lista[4]» está fora dos limites.
Se um array tem N elementos, os índices válidos vão de 0 a N−1. Aceder a «lista[N]» (ou a um índice negativo indevido) é um índice fora dos limites (out of bounds), um erro de execução muito comum: numa lista de 4 elementos, os índices válidos são 0, 1, 2 e 3 — o índice 4 não existe. Convém obter o comprimento com a operação apropriada da linguagem (por exemplo «comprimento(lista)») em vez de o fixar «à mão».
A operação fundamental sobre um array é o percurso (travessia): visitar todos os elementos com um ciclo «para» — «para i de 0 até comprimento−1» ou «para cada x na lista». Sobre o percurso constroem-se os algoritmos clássicos: somar/contar elementos, calcular a média, procurar um valor (pesquisa), encontrar o máximo ou o mínimo, contar quantos satisfazem uma condição. Estes padrões repetem-se em inúmeros problemas.
Outras operações típicas incluem acrescentar e remover elementos (nas listas dinâmicas, como as do Python), e a ordenação (pôr os elementos por ordem crescente/decrescente). Arrays de duas dimensões (matrizes) modelam tabelas e imagens. Dominar o percurso de um array com um ciclo, mantendo variáveis acumuladoras (soma, contador, máximo), é uma das competências mais transferíveis da programação.
ıˊndices vaˊlidos:  0, 1, …, N−1\text{índices válidos}: \; 0,\, 1,\, \ldots,\, N-1ıˊndices vaˊlidos:0,1,…,N−1

Indexação base 0

Num array de N elementos, o primeiro está no índice 0 e o último no índice N−1; aceder ao índice N está fora dos limites.

Exemplo resolvido

Máximo de uma lista com um ciclo

Escreve o algoritmo que determina o maior valor da lista [3, 9, 2, 7] percorrendo-a com um ciclo, e simula-o.

  1. 01Inicialização

    maior ← lista[0] (= 3). Percorrer os índices de 1 a 3.

  2. 02Percurso

    i=1: lista[1]=9 > 3 → maior ← 9; i=2: lista[2]=2 > 9? não; i=3: lista[3]=7 > 9? não.

  3. 03Limites

    O ciclo vai só até ao índice 3 (comprimento−1 = 3); aceder a lista[4] seria um erro de índice fora dos limites.

Resultado: maior = 9. O padrão «inicializar com o primeiro elemento e comparar com os restantes» resolve o máximo/mínimo de qualquer lista.

Foco no Exame Nacional

  • Aceder a elementos de um array pelo índice (base 0) e percorrer o array com um ciclo.
  • Aplicar padrões de percurso (soma, contagem, máximo/mínimo, pesquisa) e evitar o índice fora dos limites.

Erros frequentes

  • Assumir que o primeiro elemento tem índice 1: na maioria das linguagens é o índice 0, e o último é o comprimento menos 1.
  • Percorrer «de 0 até comprimento» (inclusive) em vez de «até comprimento−1», acedendo a um índice inexistente (erro de execução).

Revisão ativa

Dada a lista «temperaturas» com 7 valores, escreve o algoritmo que calcula e escreve a temperatura média. Indica os índices válidos e como obténs o comprimento.

Evocação ativa

Recorda os pontos-chave — depois revela.

Fontes: Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE) (Direção-Geral da Educação (DGE))

§ 05

Funções, decomposição modular e depuração#

●●●AprofundamentoLPAE-aplicacoes-informaticas-b-12-programacao

Pontos-chave

Um programa grande escreve-se dividindo o problema em partes menores, cada uma resolvida por um subprograma. Uma função recebe dados (parâmetros/argumentos), efetua um cálculo e devolve um resultado (por exemplo, uma função «área(base, altura)» que devolve o produto). Um procedimento executa uma tarefa sem devolver valor (por exemplo, escrever um cabeçalho). Chamar (invocar) o subprograma pelo nome, passando os argumentos, executa-o e — no caso da função — usa-se o valor devolvido (Fig. 5).

Chamada de uma função

Chamada e retornoGrafo, Programa principal → função fatorial(n), função fatorial(n) → Programa principalProgramaprincipalfunçãofatorial(n)chama (n = 5)devolve 120
Fig. 5Fig. 5 — O programa principal chama a função (passando argumentos) e recebe o valor devolvido.
Os subprogramas materializam a decomposição modular (top-down): o programa principal fica curto e legível, delegando cada tarefa numa função. As vantagens são grandes: reutilização (a mesma função serve em vários pontos e programas), legibilidade (um nome descreve a intenção), e facilidade de teste E manutenção (testa-se e corrige-se cada função isoladamente). Uma boa função faz uma coisa só e bem definida.
As variáveis têm um âmbito (scope). As variáveis locais existem apenas dentro do subprograma onde são criadas e desaparecem quando ele termina; as globais são visíveis em todo o programa. Preferem-se variáveis locais e a comunicação por parâmetros e valor de retorno, porque reduzem efeitos colaterais e tornam as funções independentes e reutilizáveis. Passar informação pelos parâmetros, em vez de por variáveis globais, é uma boa prática.
Concluído o código, testa-se e depura-se. Recordam-se os três tipos de erro: sintaxe (violam a gramática — o tradutor recusa o programa), execução/run-time (surgem a correr — divisão por zero, índice fora dos limites), e lógica (o programa corre mas dá resultado errado). Estratégias de depuração: reproduzir o erro com um caso concreto, usar o depurador (debugger) para executar passo a passo e inspecionar variáveis, e escrever valores intermédios no ecrã para localizar onde a execução se desvia do esperado. Testar cada função com casos normais, limite e inválidos é a melhor defesa contra os erros de lógica.
n!=n×(n−1)×⋯×2×1n! = n \times (n-1) \times \cdots \times 2 \times 1n!=n×(n−1)×⋯×2×1

Fatorial (função recursiva/iterativa clássica)

Exemplo típico de função: recebe n e devolve o produto de todos os inteiros de 1 a n; por convenção 0! = 1.

Exemplo resolvido

Função fatorial e traçado

Escreve uma função iterativa «fatorial(n)» e simula «fatorial(5)», mostrando o valor do acumulador em cada passo.

  1. 01Definição

    função fatorial(n): f ← 1; para i de 1 até n: f ← f × i; devolver f.

  2. 02Traçado de fatorial(5)

    f começa em 1; i=1: f=1; i=2: f=2; i=3: f=6; i=4: f=24; i=5: f=120.

  3. 03Verificação

    5! = 5×4×3×2×1 = 120.

    5!=5×4×3×2×1=1205! = 5\times 4\times 3\times 2\times 1 = 1205!=5×4×3×2×1=120

Resultado: fatorial(5) devolve 120. A função encapsula o cálculo e pode ser reutilizada e testada isoladamente (casos limite: fatorial(0) = 1, fatorial(1) = 1).

Foco no Exame Nacional

  • Definir e invocar uma função com parâmetros e valor de retorno, e decompor um problema em funções.
  • Distinguir variáveis locais de globais e aplicar estratégias de depuração aos três tipos de erro.

Erros frequentes

  • Esquecer de devolver («return») o resultado de uma função, ou não usar o valor devolvido na chamada.
  • Depender de variáveis globais em vez de passar dados por parâmetros, criando efeitos colaterais difíceis de depurar.

Revisão ativa

Escreve uma função «ehPrimo(n)» que devolva Verdadeiro se n for primo e Falso caso contrário, e mostra como a chamarias para testar o número 7. Que casos limite testarias?

Evocação ativa

Recorda os pontos-chave — depois revela.

Fontes: Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE) (Direção-Geral da Educação (DGE))

Conteúdo

Secção -- / 05

    • 01Da algoritmia ao programa: linguagens, compiladores e interpretadores○
    • 02Variáveis, tipos e entrada/saída em código◐
    • 03Estruturas de controlo em código◐
    • 04Estruturas de dados: arrays e listas●
    • 05Funções, decomposição modular e depuração●

0/5 Lidos

Dos resumos à prática

Programação

Consolida este tema com perguntas do banco de perguntas.

~16
min
5
Competências
Praticar

Referências e fontes

Fontes

Direção-Geral da Educação (DGE)

  • Aprendizagens Essenciais de Aplicações Informáticas B — 12.º ano (DGE)

Tópico anterior

Algoritmia

Tópico seguinte

Conceitos de multimédia

EuraStudy·Resumos T·02·MMXXVI

Continua com o tópico seguinte: o teu percurso é mantido.