Skip to content · ⁨Pular para o conteúdo⁩

Projeto de Algoritmos e Resolução de Problemas

Ciência da Computação do A-Level · Topic 9 · ⁨Tópico 9⁩

Train · ⁨Treinar⁩
Video lesson for this topic · ⁨Videoaula para este tópico⁩ Open the video page · ⁨Abrir a página do vídeo⁩
14:52

Pensamento Computacional

Aqui está uma tarefa: criar um sistema para gerenciar todo o estoque de uma loja — todos os produtos, todas as vendas, todas as entregas, todos os relatórios. Como um único problema gigante, ele é grande demais para…

English narration · English + 中文 subtitles burned in · ⁨Narração em inglês · Legendas em inglês + 中文 gravadas⁩

9.1

Computational thinking · ⁨Pensamento computacional⁩

Syllabus · ⁨Programa⁩
English
Candidates should be able to: Notes and guidance
Show an understanding of abstraction Need for and benefits of using abstraction Describe the purpose of abstraction Produce an abstract model of a system by only including essential details
Describe and use decomposition Break down problems into sub-problems leading to the concept of a program module (procedure / function)
Português
Os candidatos devem ser capazes de: Notas e orientações
Demonstre compreensão de abstração Necessidade e benefícios do uso de abstração Descreva o propósito de abstração Produza um modelo abstrato de um sistema incluíndo apenas detalhes essenciais
Descreva e utilize decomposição Dividir problemas em sub-problemas levando ao conceito de módulo de programa (procedimento / função)

Source: Cambridge International syllabus · ⁨Fonte: Programa Cambridge International⁩

English

Computational thinking 计算思维 is the set of mental tools for analysing a problem and designing a solution a computer can run. Two key ones are abstraction and decomposition.

Abstraction

Abstraction 抽象 means keeping the essential features of a problem and ignoring the irrelevant detail, giving a simpler model.

Examples:

  • a train-network map keeps the stations and lines but drops the geography.
  • a class in object-oriented programming keeps only the attributes and methods the system needs.
  • a function hides a piece of work behind a name.

A full model of any real problem would be too big to reason about, so abstraction is essential.

The examiner asks for the purpose of abstraction and for its benefits. Purpose: to produce a simpler model of a problem that contains only the details needed to solve it. Benefits: the problem is easier to understand and to program; the program is smaller and faster to write and test; the same model can be reused for similar problems. When you are asked to produce an abstract model of a system, list only the data and actions the task needs. For a school timetable that means the classes, rooms, teachers and periods; it does not mean the colour of the rooms or the age of the teachers.

Decomposition

Decomposition 分解 means breaking a large problem into smaller sub-problems, each easier to solve and tackled one at a time.

  1. find the main parts of the task.
  2. break each into smaller sub-tasks.
  3. continue until each is small enough to design directly.
  4. solve the small tasks and combine them.

For stock control: "manage stock" → "record sales", "record deliveries", "produce reports" → ("record sales") "look up product", "decrease stock count", "save the transaction". Decomposition makes big problems manageable, lets a team divide the work, and gives modular code — each module becomes a procedure 过程 or function.

"Explain why decomposition is used" is a three-mark question with a fixed shape. Give three separate benefits: each sub-problem 子问题 is small enough to design, code and test on its own; different programmers can work on different modules 模块 at the same time; a module that already exists (or a library routine) can be reused, and a fault is easier to find because it lies inside one module. A structure chart (topic 12) is the diagram of a decomposition: the program at the top, its modules beneath, and the data passed between them.

Português

Computational thinking 计算思维 é o conjunto de ferramentas mentais para analisar um problema e projetar uma solução que um computador possa executar. Duas principais são abstração e decomposição.

Um quebra-cabeça parcialmente terminado
Pensamento computacional divide um grande problema em partes menores e mais fáceis — como resolver um quebra-cabeça

Abstração

Abstraction 抽象 significa manter as características essenciais de um problema e ignorar detalhes irrelevantes, fornecendo um modelo mais simples.

Exemplos:

  • um mapa de rede de trens mantém as estações e linhas, mas ignora a geografia.
  • uma class em programação orientada a objetos mantém apenas os atributos e métodos que o sistema precisa.
  • uma function oculta uma parte do trabalho atrás de um nome.

Um modelo completo de qualquer problema real seria muito grande para raciocinar, então a abstração é essencial.

O avaliador pede o objetivo da abstração e seus benefícios. Objetivo: produzir um modelo mais simples de um problema que contenha apenas os detalhes necessários para resolvê-lo. Benefícios: o problema fica mais fácil de entender e programar; o programa é menor e mais rápido de escrever e testar; o mesmo modelo pode ser reutilizado para problemas semelhantes. Quando solicitado a produzir um modelo abstrato de um sistema, liste apenas os dados e ações que a tarefa exige. Para uma grade escolar, isso significa as aulas, salas, professores e períodos; não significa a cor das salas ou a idade dos professores.

A abstração transforma uma geografia real caótica (um trajeto sinuoso com prédios espalhados) em um mapa de metrô limpo — círculos de estações espaçados uniformemente em uma linha reta, mantendo as estações e linhas e descartando a geografia
A abstração mantém o essencial (estações e linhas) e descarta detalhes irrelevantes (a geografia)

Decomposição

Decomposição 分解 significa dividir um grande problema em subproblemas menores, cada um mais fácil de resolver e tratado individualmente.

  1. encontre as partes principais da tarefa.
  2. divida cada uma em subtarefas menores.
  3. continue até que cada uma seja pequena o suficiente para ser projetada diretamente.
  4. resolva as tarefas pequenas e combine-as.

Para controle de estoque: "gerenciar estoque" → "registrar vendas", "registrar entregas", "produzir relatórios" → ("registrar vendas") "consultar produto", "diminuir contagem de estoque", "salvar a transação". A decomposição torna grandes problemas gerenciáveis, permite que uma equipe divida o trabalho e gera código modular — cada módulo se torna uma procedura 过程 ou função.

"Explique por que a decomposição é usada" é uma questão de três pontos com formato fixo. Dê três benefícios separados: cada subproblema 子问题 é pequeno o suficiente para ser projetado, codificado e testado independentemente; diferentes programadores podem trabalhar em diferentes módulos 模块 ao mesmo tempo; um módulo já existente (ou uma rotina de biblioteca) pode ser reutilizado, e um erro é mais fácil de encontrar porque está contido em um único módulo. Um diagrama estrutural (tópico 12) é o diagrama de uma decomposição: o programa no topo, seus módulos abaixo, e os dados passados entre eles.

Uma árvore com "Gerenciar estoque" no topo ramificando nos módulos "Registrar vendas", "Registrar entregas" e "Produzir relatórios", e "Registrar vendas" dividindo nas subtarefas "Consultar produto", "Diminuir contagem de estoque" e "Salvar transação"
Decompondo um programa em módulos e submódulos
Explore · ⁨Explorar⁩

Resolver um problema à maneira computacional

Passe pelos quatro pilares na ordem em que você os usaria — decomponha o problema, identifique repetições, reduza aos essenciais, depois escreva os passos.

Vocabulary · ⁨Vocabulário⁩ Train · ⁨Treinar⁩
English · ⁨Inglês⁩ Chinese · ⁨Chinês⁩ Pinyin
computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ 计算思维 jì suàn sī wéi
abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
decomposition/ˌdiːkɒmpəˈzɪʃn/ 分解 fēn jiě
sub-problem/sʌb ˈprɒbləm/ 子问题 zi wèn tí
procedure/prəˈsiːdʒə/ 过程 guò chéng
modules/ˈmɒdjuːlz/ 模块 mó kuài
algorithm/ˈælɡərɪθəm/ 算法 suàn fǎ
sequence/ˈsiːkwəns/ 顺序 shùn xù
unambiguous/ʌnæmˈbɪɡjuːəs/ 无歧义 wú qí yì
deterministic/dɪˌtɜːmɪˈnɪstɪk/ 确定性 què dìng xìng
9.2

Algorithms · ⁨Algoritmos⁩

Syllabus · ⁨Programa⁩
English
Candidates should be able to: Notes and guidance
Show understanding that an algorithm is a solution to a problem expressed as a sequence of defined steps
Use suitable identifier names for the representation of data used by a problem and represent these using an identifier table
Write pseudocode that contains input, process and output
Write pseudocode using the three basic constructs of sequence, selection and iteration (repetition)
Document a simple algorithm using a structured English description, a flowchart or pseudocode
Write pseudocode from: • a structured English description • a flowchart
Draw a flowchart from: • a structured English description • pseudocode
Describe and use the process of stepwise refinement to express an algorithm to a level of detail from which the task may be programmed
Use logic statements to define parts of an algorithm solution
Português
Os candidatos devem ser capazes de: Notas e orientações
Demonstre compreensão de que um algoritmo é uma solução para um problema expressa como uma sequência de passos definidos
Utilize nomes de identificador adequados para a representação de dados usados por um problema e represente-os usando uma tabela de identificadores
Escreva pseudocódigo que contenha entrada, processamento e saída
Escreva pseudocódigo usando as três construções básicas de sequência, seleção e iteração (repetição)
Documente um simples algoritmo usando uma descrição em inglês estruturado, um diagrama de fluxo ou pseudocódigo
Escreva pseudocódigo a partir de: • uma descrição em inglês estruturado • um diagrama de fluxo
Desenhe um diagrama de fluxo a partir de: • uma descrição em inglês estruturado • pseudocódigo
Descreva e utilize o processo de refinamento progressivo para expressar um algoritmo a um nível de detalhe a partir do qual a tarefa pode ser programada
Use declarações lógicas para definir partes de uma solução algorítmica

Source: Cambridge International syllabus · ⁨Fonte: Programa Cambridge International⁩

English
Bubble sort, pass by pass

An algorithm 算法 is a solution expressed as a sequence of defined steps. Each step is unambiguous 无歧义 (one meaning), deterministic 确定性 (same input → same output), finite (the steps end), and effective (each can be done). An algorithm says what to do, independent of the programming language used to implement it.

Português
Ordenação bolha, passo a passo

Um algoritmo 算法 é uma solução expressa como uma sequência de passos definidos. Cada passo é unívoco 无歧义 (um único significado), determinístico 确定性 (mesma entrada → mesma saída), finito (os passos terminam) e efetivo (cada um pode ser executado). Um algoritmo diz o que fazer, independente da linguagem de programação usada para implementá-lo.

Explore · ⁨Explorar⁩

Seleção: siga os ramos DO / SE NÃO

Arraste a pontuação e observe qual ramo é executado. A seleção testa cada condição por sua vez e toma a PRIMEIRA que for verdadeira — é assim que funciona O SE ... SENÃO SE ... SENÃO.

Watch lesson · ⁨Assistir aula⁩
9.2

Identifier table · ⁨Tabela de identificadores⁩

English

When you start an algorithm, list every piece of data in an identifier table 标识符表 — its identifier 标识符 (the variable 变量 name), data type 数据类型, and description. The exam's table has exactly these three columns:

Identifier Data type Description
Category STRING the product category
SaleDate DATE when the item was sold
ItemCost REAL cost of the item
InStock BOOLEAN TRUE if in stock
Sales ARRAY[1:30] OF REAL the last 30 daily sales totals

Use descriptive names (ItemCost, not x): an identifier starts with a letter, contains no spaces, and is written the same way every time it appears. Common types are INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, plus arrays. The table forces you to name every piece of data before writing code, and a "complete the identifier table" question gives one mark for each correct data type or description, so write the type exactly as the pseudocode guide does.

Português

Ao iniciar um algoritmo, liste todas as peças de dados em uma tabela de identificadores 标识符表 — seu identificador 标识符 (o nome da variável 变量), tipo de dado 数据类型 e descrição. A tabela do exame tem exatamente estas três colunas:

Identificador Tipo de dado Descrição
Category STRING categoria do produto
SaleDate DATE quando o item foi vendido
ItemCost REAL custo do item
InStock BOOLEAN TRUE se estiver em estoque
Sales ARRAY[1:30] OF REAL os totais diários de vendas dos últimos 30 dias

Use nomes descritivos (ItemCost, não x): um identificador começa com uma letra, não contém espaços e é escrito da mesma forma toda vez que aparece. Tipos comuns são INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, além de arrays. A tabela força você a nomear todas as peças de dados antes de escrever o código, e uma questão "complete a tabela de identificadores" dá um ponto por cada tipo de dado ou descrição correta, então escreva o tipo exatamente como o guia de pseudocódigo faz.

Uma tabela de identificadores listando cada variável com seu nome, tipo de dado e descrição, por exemplo ItemCost como um REAL para o custo do item
Uma tabela de identificadores nomeia todas as peças de dados antes de escrever o código
Vocabulary · ⁨Vocabulário⁩ Train · ⁨Treinar⁩
English · ⁨Inglês⁩ Chinese · ⁨Chinês⁩ Pinyin
identifier table/aɪˈdentɪfaɪə ˈteɪbl/ 标识符表 biāo shí fú biǎo
identifier/aɪˈdentɪfaɪə/ 标识符 biāo shí fú
9.2

Pseudocode — the three basic constructs · ⁨Pseudocódigo — as três construções básicas⁩

English

Pseudocode 伪代码 is a structured, language-neutral way to describe algorithms.

1. Sequence

Steps run one after another (sequence 顺序):

2. Selection

A choice of which steps run, based on a condition (selection 选择):

For more options, use CASE OF ... ENDCASE.

3. Iteration

Repeating a block (iteration 迭代, a loop 循环):

A WHILE loop tests the condition before each pass (may run zero times); a REPEAT...UNTIL loop tests after each pass (always runs at least once).

Choosing the loop is itself a mark: FOR when you know how many times (a count-controlled loop 计数循环); WHILE when the loop might not run at all (a pre-condition loop 前测循环); REPEAT ... UNTIL when it must run at least once, as in validating an input (a post-condition loop 后测循环). A "describe the iteration construct" answer names the construct, says where the condition is tested, and gives the consequence (zero times or at least once).

Common operations

  • assignment 赋值: x ← 5 (an arrow; = is for comparison).
  • input/output: INPUT variable, OUTPUT expression.
  • comparisons =, <>, <, >, <=, >=; logic AND, OR, NOT.
  • arithmetic + - * /, plus DIV (integer division) and MOD (remainder).
  • strings: LENGTH, LEFT, RIGHT, MID, and & for concatenation 拼接 (joining).

The pseudocode the exam expects

Every pseudocode answer is marked against Cambridge's published pseudocode guide. Write these forms exactly:

Construct Pseudocode
Variable DECLARE Total : INTEGER
Array DECLARE Marks : ARRAY[1:30] OF REAL
Constant CONSTANT MaxTries = 3
Assignment Total ← Total + Value
Input / output INPUT Name
OUTPUT "Hello ", Name
Selection CASE OF Choice
1 : OUTPUT "Add"
OTHERWISE OUTPUT "Error"
ENDCASE
FOR loop FOR i ← 1 TO 10 STEP 2 ... NEXT i
WHILE loop WHILE Total < 100 DO ... ENDWHILE
REPEAT loop REPEAT ... UNTIL Mark >= 0
Integer arithmetic 17 DIV 5 = 3
17 MOD 5 = 2
Strings LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
MID(S, 2, 4), UCASE(S), LCASE(S)
Conversions INT(3.7) = 3, NUM_TO_STR(12)
STR_TO_NUM("4.5"), ASC('A') = 65, CHR(66) = 'B'
Random RAND(100)
INT(RAND(100)) + 1

RAND(100) gives a real number from 0 up to (but not including) 100. INT(RAND(100)) + 1 gives an integer from 1 to 100.

Two habits earn marks on every question: declare every variable you use, with the type from your identifier table, and initialise 初始化 every counter 计数器 and total (Count ← 0, Total ← 0) before the loop that changes it.

Input → Process → Output

Every program follows this shape:

Listing the inputs and outputs first makes the algorithm cleaner.

Worked example. Write pseudocode that inputs 100 integers and outputs how many of them, and the total of those, that lie between 10 and 20 inclusive.

Identifier table: Count : INTEGER (loop counter), Value : INTEGER (the integer just input), InRange : INTEGER (how many were in range), Total : INTEGER (their sum).

If the question then asks you to "identify two constructs and state how each is used", answer in the same shape: iteration, the FOR loop, repeats the input 100 times; selection, the IF statement, adds a value only when it is in range.

Worked example. A program picks a secret integer from 1 to 100. The user guesses until they are right; after each wrong guess the program says "Too low" or "Too high", and at the end it outputs how many guesses were made.

Identifier table: Secret : INTEGER (the number to guess), Guess : INTEGER (the user's input), Tries : INTEGER (how many guesses so far).

A REPEAT ... UNTIL loop is the right choice because the user must guess at least once. The marks are for: the random number in the right range, a loop that ends on a correct guess, the counter that starts at zero and increases inside the loop, the two messages under the right conditions, and the final output.

Worked example. Output two different random integers, each between $-10$ and $10$ inclusive.

There are 21 possible values, so INT(RAND(21)) gives 0 to 20 and subtracting 10 shifts it to the range $-10$ to $10$. The second number must be generated again until it differs from the first:

Português

Pseudocódigo 伪代码 é uma maneira estruturada e independente de linguagem para descrever algoritmos.

As três construções básicas como mini-flowcharts: sequência executa passo A então B então C; seleção testa uma condição e faz X ou Y; iteração repete um corpo enquanto uma condição é verdadeira, retornando ao início
Os três blocos construtivos de qualquer algoritmo: sequência, seleção e iteração

1. Sequência

Passos são executados um após o outro (sequência 顺序):

INPUT Name
INPUT Age
OUTPUT "Hello", Name

2. Seleção

Uma escolha de quais passos executar, baseada em uma condição (seleção 选择):

IF Age >= 18 THEN
    OUTPUT "Adult"
ELSE
    OUTPUT "Minor"
ENDIF

Para mais opções, use CASE OF ... ENDCASE.

3. Iteração

Repetir um bloco (iteração 迭代, um loop 循环):

FOR i ← 1 TO 10
    OUTPUT i
NEXT i

Um loop WHILE testa a condição antes de cada passagem (pode rodar zero vezes); um loop REPEAT...UNTIL testa depois de cada passagem (sempre roda pelo menos uma vez).

WHILE Total < 100 DO
    INPUT Value
    Total ← Total + Value
ENDWHILE

REPEAT
    INPUT Mark
UNTIL Mark >= 0 AND Mark <= 100
Dois flowcharts lado a lado. WHILE testa a condição primeiro, então o corpo pode nunca executar: o losango fica acima do corpo e a ramificação Não sai do loop. REPEAT UNTIL executa o corpo primeiro e testa depois dele, então o corpo sempre executa pelo menos uma vez: o corpo fica acima do losango e a ramificação Não retorna a ele
Um loop WHILE testa antes do corpo rodar; um loop REPEAT ... UNTIL testa depois, então seu corpo sempre roda pelo menos uma vez

Escolher o loop vale um ponto: FOR quando você sabe quantas vezes (um loop controlado por contador 计数循环); WHILE quando o loop pode não rodar de todo (um loop pré-condição 前测循环); REPEAT ... UNTIL quando deve rodar pelo menos uma vez, como na validação de entrada (um loop pós-condição 后测循环). Uma resposta "descreva a construção de iteração" nomeia a construção, diz onde a condição é testada e dá a consequência (zero vezes ou pelo menos uma vez).

Operações comuns

  • atribuição 赋值: x ← 5 (uma seta; = é para comparação).
  • entrada/saída: INPUT variable, OUTPUT expression.
  • comparações =, <>, <, >, <=, >=; lógica AND, OR, NOT.
  • aritmética + - * /, mais DIV (divisão inteira) e MOD (resto).
  • strings: LENGTH, LEFT, RIGHT, MID, e & para concatenação 拼接 (juntar).

O pseudocódigo que o exame espera

Toda resposta de pseudocódigo é avaliada contra o guia de pseudocódigo publicado pela Cambridge. Escreva estas formas exatamente:

Construção Pseudocódigo
Variável DECLARE Total : INTEGER
Array DECLARE Marks : ARRAY[1:30] OF REAL
Constante CONSTANT MaxTries = 3
Atribuição Total ← Total + Value
Entrada / Saída INPUT Name
OUTPUT "Hello ", Name
Seleção CASE OF Choice
1 : OUTPUT "Add"
OTHERWISE OUTPUT "Error"
ENDCASE
Loop FOR FOR i ← 1 TO 10 STEP 2 ... NEXT i
Loop WHILE WHILE Total < 100 DO ... ENDWHILE
Loop REPEAT REPEAT ... UNTIL Mark >= 0
Aritmética inteira 17 DIV 5 = 3
17 MOD 5 = 2
Strings LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
MID(S, 2, 4), UCASE(S), LCASE(S)
Conversões INT(3.7) = 3, NUM_TO_STR(12)
STR_TO_NUM("4.5"), ASC('A') = 65, CHR(66) = 'B'
Aleatório RAND(100)
INT(RAND(100)) + 1

RAND(100) gera um número real de 0 até (mas não incluindo) 100. INT(RAND(100)) + 1 gera um inteiro de 1 a 100.

Dois hábitos valem pontos em todas as questões: declare toda variável que usar, com o tipo da sua tabela de identificadores, e inicialize 初始化 todo contador 计数器 e total (Count ← 0, Total ← 0) antes do loop que o altera.

Entrada → Processamento → Saída

Todo programa segue este formato:

INPUT Length
INPUT Width
Area ← Length * Width
OUTPUT "Area = ", Area

Listar entradas e saídas primeiro deixa o algoritmo mais limpo.

Exemplo resolvido. Escreva pseudocódigo que insere 100 inteiros e outputa quantos deles, e a soma desses, estão entre 10 e 20 inclusos.

Tabela de identificadores: Count : INTEGER (contador de loop), Value : INTEGER (o inteiro inserido), InRange : INTEGER (quantos estavam no intervalo), Total : INTEGER (soma deles).

DECLARE Count, Value, InRange, Total : INTEGER
InRange ← 0
Total ← 0
FOR Count ← 1 TO 100
    INPUT Value
    IF Value >= 10 AND Value <= 20 THEN
        InRange ← InRange + 1
        Total ← Total + Value
    ENDIF
NEXT Count
OUTPUT InRange, Total

Se a questão pedir para "identificar duas construções e dizer como cada uma é usada", responda no mesmo formato: iteração, o loop FOR, repete a entrada 100 vezes; seleção, a instrução IF, adiciona um valor apenas quando está no intervalo.

Exemplo resolvido. Um programa escolhe um número secreto inteiro de 1 a 100. O usuário chuta até acertar; após cada chute errado, o programa diz "Muito baixo" ou "Muito alto", e no final ele outputa quantos palpites foram feitos.

Tabela de identificadores: Secret : INTEGER (o número a ser adivinhado), Guess : INTEGER (a entrada do usuário), Tries : INTEGER (quantos palpites até agora).

DECLARE Secret, Guess, Tries : INTEGER
Secret ← INT(RAND(100)) + 1
Tries ← 0
REPEAT
    INPUT Guess
    Tries ← Tries + 1
    IF Guess < Secret THEN
        OUTPUT "Too low"
    ELSE
        IF Guess > Secret THEN
            OUTPUT "Too high"
        ENDIF
    ENDIF
UNTIL Guess = Secret
OUTPUT "You took ", Tries, " guesses"

Um loop REPEAT ... UNTIL é a escolha certa porque o usuário deve chutar pelo menos uma vez. Os pontos são para: o número aleatório no intervalo correto, um loop que termina em um chute correto, o contador que começa em zero e aumenta dentro do loop, as duas mensagens sob as condições certas, e a saída final.

Fluxograma do jogo de adivinhação: Início, depois defina Segredo como um inteiro aleatório de 1 a 100 e Tentativas como 0, depois insira um palpite, adicione um às Tentativas, teste se o palpite é igual ao segredo (Sim leva à saída Tentativas e Parada), caso contrário teste se o palpite é menor (Sim sai Muito baixo, Não sai Muito alto), e ambas as saídas retornam ao input
O mesmo jogo de adivinhação como flowchart: os dois losangos de decisão são as duas instruções IF, e a seta de retorno é o loop REPEAT ... UNTIL

Exemplo resolvido. Outputar dois números inteiros aleatórios diferentes, cada um entre $-10$ e $10$ inclusos.

Há 21 valores possíveis, então INT(RAND(21)) gera de 0 a 20 e subtraindo 10 desloca para o intervalo $-10$ a $10$. O segundo número deve ser gerado novamente até diferir do primeiro:

DECLARE First, Second : INTEGER
First ← INT(RAND(21)) - 10
REPEAT
    Second ← INT(RAND(21)) - 10
UNTIL Second <> First
OUTPUT First, Second
Todo programa segue a forma entrada, então processamento, então saída, mostrado com o exemplo de área: entrar o comprimento e a largura, processar multiplicando, sair a área
Todo programa segue o formato Entrada, Processamento, Saída
Explore · ⁨Explorar⁩

IF … ELSE seleção

Altere o valor e observe qual ramo é executado — como um programa toma decisões.

Vocabulary · ⁨Vocabulário⁩ Train · ⁨Treinar⁩
English · ⁨Inglês⁩ Chinese · ⁨Chinês⁩ Pinyin
variable/ˈveərɪəbl/ 变量 biàn liàng
data type/ˈdeɪtə taɪp/ 数据类型 shù jù lèi xíng
pseudocode/ˈsuːdəʊkəʊd/ 伪代码 wěi dài mǎ
loop/luːp/ 循环 xún huán
count-controlled loop/kaʊnt kənˈtrəʊld luːp/ 计数循环 jì shù xún huán
pre-condition loop/priː kənˈdɪʃn luːp/ 前测循环 qián cè xún huán
post-condition loop/pəʊst kənˈdɪʃn luːp/ 后测循环 hòu cè xún huán
assignment/əˈsaɪnmənt/ 赋值 fù zhí
concatenation/kənˌkætəˈneɪʃn/ 拼接 pīn jiē
initialise/ɪˈnɪʃəlaɪz/ 初始化 chū shǐ huà
counter/ˈkaʊntə/ 计数器 jì shù qì
structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ 结构化英语 jié gòu huà yīng yǔ
stepwise refinement/ˈstepwaɪz rɪˈfaɪnmənt/ 逐步求精 zhú bù qiú jīng
logic statement/ˈlɒdʒɪk ˈsteɪtmənt/ 逻辑语句 luó jí yǔ jù
precedence/ˈpresɪdəns/ 优先级 yōu xiān jí
De Morgan's law/də ˈmɔːɡənz lɔː/ 德摩根定律 dé mó gēn dìng lǜ
9.2

Three notations · ⁨Três notações⁩

English

The same algorithm can be written three ways.

  • structured English 结构化英语 — natural language with indentation and fixed keywords; good for a high-level description.
  • flowchart 流程图 — a diagram with standard shapes:
Shape Meaning
Rounded rectangle Start / Stop
Parallelogram Input / Output
Rectangle Process
Diamond Decision
Arrow Flow of control
  • pseudocode — the keyword notation above; closest to code.

You should be able to convert between any pair: each IF is a decision diamond, each loop is a back-arrow, and a sequence is stacked rectangles.

IF ... THEN ... ELSE ... ENDIF

Português

O mesmo algoritmo pode ser escrito de três formas.

  • inglês estruturado 结构化英语 — linguagem natural com indentação e palavras-chave fixas; bom para uma descrição de alto nível.
  • flowchart 流程图 — um diagrama com formas padrão:
Forma Significado
Retângulo arredondado Início / Parada
Paralelogramo Entrada / Saída
Retângulo Processamento
Losango Decisão
Seta Fluxo de controle
  • pseudocódigo — a notação de palavras-chave acima; mais próximo do código.

Você deve ser capaz de converter entre qualquer par: cada IF é um losango de decisão, cada laço é uma seta de retorno, e uma sequência são retângulos empilhados.

SE ... ENTÃO ... SENÃO ... FIM_SE

Um fluxograma para calcular a média de números: terminadores redondos Início e Fim, paralelogramas de entrada/saída, retângulos de processamento e um losango de decisão "count < n?" cuja ramificação Sim retorna ao laço para ler o próximo valor
Um fluxograma para calcular a média de uma lista de números, usando as formas padrão
Vocabulary · ⁨Vocabulário⁩ Train · ⁨Treinar⁩
English · ⁨Inglês⁩ Chinese · ⁨Chinês⁩ Pinyin
flowchart/ˈfləʊtʃɑːt/ 流程图 liú chéng tú
selection/sɪˈlekʃn/ 选择 xuǎn zé
iteration/ˌɪtəˈreɪʃn/ 迭代 dié dài
9.2

Stepwise refinement · ⁨Refinamento passo a passo⁩

English

Stepwise refinement 逐步求精 starts with a high-level outline and expands each step until it is small enough to code. For an average of $n$ numbers:

Level 1:

Level 2:

Each refinement keeps the previous structure and adds detail.

A six-mark "apply stepwise refinement" question gives you a high-level outline and wants each step expanded into the concrete statements a programmer could code. Keep the steps in the same order, name the data each step reads or produces, and stop when every line is a single input, assignment, output, loop or condition. For example, "validate the password" becomes: input the password; check its length is at least 8; check it contains at least one digit; output "accepted" if both checks pass, otherwise output "rejected".

Português

Refinamento passo a passo 逐步求精 começa com um esboço de alto nível e expande cada etapa até que seja pequena o suficiente para ser codificada. Para uma média de $n$ números:

Nível 1:

Read in the numbers
Compute the average
Output the average

Nível 2:

INPUT n
total ← 0
FOR i ← 1 TO n
    INPUT value
    total ← total + value
NEXT i
average ← total / n
OUTPUT average

C refinamento mantém a estrutura anterior e adiciona detalhes.

Uma questão de seis pontos sobre "aplicar refinamento passo a passo" fornece um esboço de alto nível e pede que cada etapa seja expandida em instruções concretas que um programador poderia codificar. Mantenha as etapas na mesma ordem, nomeie os dados que cada etapa lê ou produz, e pare quando cada linha for uma única entrada, atribuição, saída, laço ou condição. Por exemplo, "validar a senha" torna-se: digite a senha; verifique se seu comprimento é pelo menos 8; verifique se contém pelo menos um dígito; saia "aceita" se ambas as verificações forem bem-sucedidas, caso contrário saia "rejeitada".

Refinamento passo a passo: um esboço de Nível 1 (ler os números, calcular a média, sair a média) é expandido em pseudocódigo detalhado de Nível 2 com o loop de entrada e a divisão
Refinamento passo a passo: expanda cada etapa de alto nível em pseudocódigo detalhado
Explore · ⁨Explorar⁩

Refinamento passo a passo: esboço para código

Desça pelos níveis. Você começa com a tarefa inteira em uma linha e continua expandindo cada passo em partes menores — até que todos os passos sejam simples o suficiente para serem codificados diretamente.

9.2

Logic statements · ⁨Declarações lógicas⁩

English

A logic statement 逻辑语句 is a Boolean 布尔 condition that controls branching, built from comparisons (x > 10), connectives (AND, OR, NOT) and brackets. Use it as the condition of IF, WHILE or REPEAT...UNTIL:

Precedence 优先级 (highest to lowest): NOT, then AND, then OR. Use brackets when unsure. Common mistakes:

  • a = 1 OR 2 is wrong — write a = 1 OR a = 2.
  • NOT a > 5 means NOT (a > 5), i.e. a <= 5.
  • NOT (A AND B) is the same as (NOT A) OR (NOT B) (De Morgan's law 德摩根定律) — handy for simplifying conditions.

Turning a sentence into a logic statement is a skill the papers test directly. "A ticket is free for anyone under 5 or over 65" becomes Age < 5 OR Age > 65. "A mark is valid if it is a whole number from 0 to 100" becomes Mark >= 0 AND Mark <= 100. "The loop stops when the file is finished or ten records have been read" becomes UNTIL EOF(File) OR Count = 10. Write each comparison in full: Age > 65 and Age < 5, never Age > 65 OR < 5.

Worked example. Write an identifier table and pseudocode to read 10 numbers and output the largest. The identifier table names each variable with its data type and purpose: Count : INTEGER (loop counter), Num : REAL (the number just read), Max : REAL (largest so far).

The design decision carrying the marks is initialising Max: it must start lower than any possible input - or, safer still, be set to the first number read. Initialise it to 0 and the algorithm wrongly returns 0 for a list of negative numbers, a bug your trace only exposes if the test data include a negative.

Português

Uma declaração lógica 逻辑语句 é uma condição Booleana 布尔 controlada por ramificações, construída a partir de comparações (x > 10), conectivos (AND, OR, NOT) e colchetes. Use-a como condição de IF, WHILE ou REPEAT...UNTIL:

WHILE attempts < 3 AND NOT loggedIn DO
    INPUT password
    IF password = correctPassword THEN
        loggedIn ← TRUE
    ELSE
        attempts ← attempts + 1
    ENDIF
ENDWHILE

Precedência 优先级 (maior para menor): NOT, depois AND, depois OR. Use colchetes quando tiver dúvidas. Erros comuns:

  • a = 1 OR 2 está errado — escreva a = 1 OR a = 2.
  • NOT a > 5 significa NOT (a > 5), ou seja, a <= 5.
  • NOT (A AND B) é o mesmo que (NOT A) OR (NOT B) (Lei de De Morgan 德摩根定律) — útil para simplificar condições.

Transformar uma frase em uma declaração lógica é uma habilidade testada diretamente nos exames. "Um ingresso é gratuito para qualquer pessoa com menos de 5 ou mais de 65 anos" torna-se Age < 5 OR Age > 65. "Uma nota é válida se for um número inteiro de 0 a 100" torna-se Mark >= 0 AND Mark <= 100. "O laço para quando o arquivo termina ou dez registros foram lidos" torna-se UNTIL EOF(File) OR Count = 10. Escreva cada comparação por extenso: Age > 65 e Age < 5, nunca Age > 65 OR < 5.

Uma árvore de análise para "attempts < 3 AND NOT loggedIn": NOT aplica-se primeiro a loggedIn, então AND une isso com attempts < 3
Precedência: NOT vincula-se a loggedIn primeiro, então AND combina os dois lados

Exemplo resolvido. Escreva uma tabela de identificadores e pseudocódigo para ler 10 números e exibir o maior. A tabela de identificadores nomeia cada variável com seu tipo de dado e propósito: Count : INTEGER (contador de laço), Num : REAL (o número acabado de ser lido), Max : REAL (maior até agora).

Max ← -999999
FOR Count ← 1 TO 10
    INPUT Num
    IF Num > Max THEN
        Max ← Num
    ENDIF
NEXT Count
OUTPUT Max

A decisão de design que carrega os pontos é inicializar Max: ela deve começar abaixo de qualquer entrada possível - ou, ainda mais seguro, ser definida como o primeiro número lido. Inicializá-la como 0 faz o algoritmo retornar incorretamente 0 para uma lista de números negativos, um bug que sua traçagem só expõe se os dados de teste incluírem um negativo.

Vocabulary · ⁨Vocabulário⁩ Train · ⁨Treinar⁩
English · ⁨Inglês⁩ Chinese · ⁨Chinês⁩ Pinyin
Boolean/ˈbuːlɪən/ 布尔 bù ěr
9.2

Definitions the examiner accepts · ⁨Definições aceitas pelo examinador⁩

English

A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

Term Definition
abstraction keeping the essential details of a problem and leaving out the details that are not needed
decomposition breaking a problem down into smaller sub-problems, each of which can be solved separately
algorithm a solution to a problem expressed as a sequence of defined steps
identifier table a table listing each identifier used in an algorithm with its data type and a description of its purpose
pseudocode a structured, language-independent way of writing the steps of an algorithm
flowchart a diagram that shows the steps and decisions of an algorithm using standard symbols joined by arrows
sequence statements executed one after another in the order written
selection choosing which statements to execute according to a condition
iteration repeating a group of statements while, or until, a condition holds
stepwise refinement breaking each step of an outline into smaller steps, repeatedly, until each step can be coded directly
logic statement a condition built from comparisons and the operators AND, OR and NOT that evaluates to TRUE or FALSE
Português

Uma questão de definição é avaliada contra wording fixo. Aprenda estas exatamente, e dê apenas uma resposta.

Termo Definição
abstração manter os detalhes essenciais de um problema e omitir os detalhes que não são necessários
decomposição dividir um problema em subproblemas menores, cada um dos quais pode ser resolvido separadamente
algoritmo uma solução para um problema expressa como uma sequência de passos definidos
tabela de identificadores uma tabela listando cada identificador usado em um algoritmo com seu tipo de dado e uma descrição de seu propósito
pseudocódigo uma forma estruturada e independente de linguagem de escrever os passos de um algoritmo
fluxograma um diagrama que mostra os passos e decisões de um algoritmo usando símbolos padrão unidos por setas
sequência instruções executadas uma após a outra na ordem escrita
seleção escolher quais instruções executar de acordo com uma condição
iteração repetir um grupo de instruções enquanto, ou até, uma condição ser satisfeita
refinamento passo a passo dividir cada etapa de um esboço em etapas menores, repetidamente, até que cada etapa possa ser codificada diretamente
declaração lógica uma condição construída a partir de comparações e dos operadores AND, OR e NOT que avalia como VERDADEIRO ou FALSO
9.2

Exam tips · ⁨Dicas de prova⁩

English
  • Define an algorithm as an unambiguous, finite, deterministic sequence of steps, independent of language.
  • Use the three constructs correctly — sequence, selection, iteration — and keep an identifier table with data types.
  • Break a problem down by decomposition and abstraction, then stepwise refinement.
  • Write pseudocode that would actually run: declare variables and follow the exam's pseudocode style.

Common mistakes

  • Using = to assign a value. Assignment is ←; = is a comparison.
  • Forgetting ENDIF, ENDWHILE, ENDCASE or NEXT. Every construct closes, and the closing word is where the mark for the construct is checked.
  • Not initialising a total or counter before the loop, so the algorithm adds to a value that never existed.
  • Using a FOR loop when the number of repetitions is unknown. Reading until a sentinel value or a correct guess needs WHILE or REPEAT ... UNTIL.
  • Writing Age > 65 OR < 5. Each side of OR and AND must be a complete comparison.
  • Answering "explain why decomposition is used" with one benefit written three ways. Three marks need three different benefits.
Português
  • Defina um algoritmo como uma sequência inequívoca, finita e determinística de passos, independente da linguagem.
  • Use as três construções corretamente — sequência, seleção, iteração — e mantenha uma tabela de identificadores com tipos de dados.
  • Divida um problema por decomposição e abstração, depois refinamento passo a passo.
  • Escreva pseudocódigo que realmente funcionaria: declare variáveis e siga o estilo de pseudocódigo do exame.

Erros comuns

  • Usar = para atribuir um valor. Atribuição é ←; = é uma comparação.
  • Esquecer ENDIF, ENDWHILE, ENDCASE ou NEXT. Toda construção fecha, e a palavra de fechamento é onde o ponto da construção é verificado.
  • Não inicializar um total ou contador antes do laço, de modo que o algoritmo soma a um valor que nunca existiu.
  • Usar um laço FOR quando o número de repetições é desconhecido. Ler até um valor sentinela ou um palpite correto precisa de WHILE ou REPEAT ... UNTIL.
  • Escrever Age > 65 OR < 5. Cada lado de OR e AND deve ser uma comparação completa.
  • Responder "explique por que a decomposição é usada" com um benefício escrito de três maneiras. Três pontos precisam de três benefícios diferentes.

Interactive lessons on this topic · ⁨Aulas interativas sobre este tópico⁩

Work through it step by step, with instant-check exercises. · ⁨Passe por ele passo a passo, com exercícios de verificação instantânea.⁩

Past Papers · ⁨Provas Anteriores⁩

More topics in Ciência da Computação do A-Level · ⁨Mais tópicos em Ciência da Computação do A-Level⁩

Log in or create account · ⁨Entrar ou criar conta⁩

IGCSE, A-Level & AP