| Os candidatos devem ser capazes de: | Notas e orientações |
|---|---|
| 1 Declarar e usar variáveis e constantes | |
| 2 Compreender e usar tipos de dados básicos | • Incluindo: – inteiro – real – char – string – Booleano |
| 3 Compreender e usar entrada e saída | |
| 4 (a) Compreender e usar o conceito de sequência | |
| (b) Compreender e usar o conceito de seleção | • Incluindo: – instruções IF – instruções CASE |
| (c) Compreender e usar o conceito de iteração | • Incluindo: – laços controlados por contagem – laços de pré-condição – laços de pós-condição |
| (d) Compreender e usar os conceitos de somatório e contagem | |
| (e) Compreender e usar o conceito de manipulação de strings | • Incluindo: – comprimento – substring – upper – lower • O primeiro caractere da string pode ser posição zero ou um |
| (f) Compreender e utilizar operadores aritméticos, relacionais e lógicos | • Aritméticos, limitados a: – + – – – / – * – ^ (elevado à potência) – MOD – DIV • Relacionais, limitados a: – = – < – <= – > – >= – <> (diferente de) • Lógicos, limitados a: – AND – OR – NOT |
| 5 Compreender e usar instruções aninhadas | • Incluindo seleção e iteração aninhadas • Os candidatos não serão exigidos a escrever mais de três níveis de instruções aninhadas |
| 6 (a) Compreender o significado de procedimentos, funções e parâmetros (b) Definir e usar procedimentos e funções, com ou sem parâmetros (c) Compreender e usar variáveis locais e globais | • Procedimentos e funções podem ter até três parâmetros |
| 7 Compreender e usar rotinas de biblioteca | • Incluindo: – MOD – DIV – ROUND – RANDOM |
| 8 Compreender como criar um programa mantensível | • Incluindo uso adequado de: – identificadores significativos – recurso de comentários fornecido pela linguagem de programação – procedimentos e funções – comentários relevantes e apropriados da sintaxe • Use identificadores significativos para: – variáveis – constantes – arrays – procedimentos e funções |
Programação
Ciência da Computação IGCSE · Tópico 8
13:11
Programação
Aqui está um programa curto. Ele lê cinco notas de teste e imprime o total. As cinco notas são oito, nove, sete, seis e dez, então o total deve ser quarenta. Observe…
Narração em inglês · legendas em inglês e 中文 que você pode alternar
8.1
Variables and constants
Programa
Fonte: Programa Cambridge International
Uma variável é um local nomeado que armazena um valor que pode mudar enquanto o programa executa. Uma constante é um local nomeado cujo valor é fixo e não muda.


Você deve declará-las (informar seu nome e tipo) antes de usá-las:
DECLARE Score : INTEGER
DECLARE Name : STRING
CONSTANT Pi ← 3.142

Use uma constante para um valor que nunca muda (como Pi), para que seja definido em um único lugar e fácil de ler.
Variáveis e atribuição
Passe pelas linhas e observe cada variável assumir o seu novo valor.
| English | Português |
|---|---|
| variable/ˈveərɪəbl/ | variável |
| constant/ˈkɒnstənt/ | constante |
| declare/dɪˈkleə/ | declarar |
| integer/ˈɪntɪdʒə/ | inteiro |
| string/strɪŋ/ | string |
8.1
Tipos de dados
Um tipo de dado indica qual tipo de valor uma variável armazena. Você precisa conhecer cinco tipos básicos.

| Type | Holds | Example |
|---|---|---|
| inteiro | um número inteiro | 42, -7 |
| real | um número com casa decimal | 3.14, -0.5 |
| char | um único caractere | 'A', '?' |
| string | uma sequência de caracteres | "Hello" |
| Booleano | um dos dois valores | TRUE ou FALSE |
| English | Português |
|---|---|
| data type/ˈdeɪtə taɪp/ | tipo de dado |
| real/rɪəl/ | real |
| char/tʃɑː/ | caractere |
| Boolean/ˈbuːlɪən/ | booleano |
8.1
Entrada e saída
Entrada lê um valor do usuário. Saída exibe um valor na tela.
OUTPUT "What is your name?"
INPUT Name
OUTPUT "Hello ", Name
| English | Português |
|---|---|
| input/ˈɪnpʊt/ | entrada |
| output/ˈaʊtpʊt/ | saída |
8.1
As três estruturas básicas
Todo programa é construído a partir de três estruturas de controle.

Sequence
Sequência significa que as etapas são executadas uma após a outra, em ordem, de cima para baixo.
INPUT Length
INPUT Width
Area ← Length * Width
OUTPUT Area
Selection
Seleção escolhe quais etapas executar, baseado em uma condição. Use uma instrução IF, ou uma instrução CASE quando houver muitas opções.
IF Score >= 50
THEN
OUTPUT "Pass"
ELSE
OUTPUT "Fail"
ENDIF
CASE OF Grade
'A' : OUTPUT "Excellent"
'B' : OUTPUT "Good"
OTHERWISE OUTPUT "Keep trying"
ENDCASE
Iteration
Iteração (um laço) repete etapas. Existem três tipos.
Um laço controlado por contagem repete um número fixo de vezes:
FOR I ← 1 TO 5
OUTPUT "Hello"
NEXT I
Um laço de pré-condição verifica a condição antes de cada repetição, portanto pode não executar nenhuma vez:
WHILE Answer <> "stop" DO
INPUT Answer
ENDWHILE
Um laço de pós-condição verifica a condição depois de cada repetição, portanto sempre executa pelo menos uma vez:
REPEAT
INPUT Password
UNTIL Password = "secret"

Como uma escada IF … ELSE IF decide
As condições são testadas de cima para baixo; a PRIMEIRA que for verdadeira executa e as outras são puladas. Deslize a pontuação e observe qual ramificação acende.
Seleção
Altere o valor e observe qual ramo é executado — seleção em ação.
| English | Português |
|---|---|
| sequence/ˈsiːkwəns/ | sequência |
| selection/sɪˈlekʃn/ | seleção |
| iteration/ˌɪtəˈreɪʃn/ | iteração |
| loop/luːp/ | laço |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | laço controlado por contagem |
| pre-condition loop/priː kənˈdɪʃn luːp/ | laço de pré-condição |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | laço de pós-condição |
| length/leŋθ/ | comprimento |
8.1
Somatório e contagem
- soma acumulativa — continuar somando valores a um total acumulado:
Total ← Total + Value. - contagem — adicionar 1 a um contador a cada vez:
Count ← Count + 1.

*A trace table segue um loop de totalling e counting passo a passo
Total ← 0
FOR I ← 1 TO 10
INPUT Mark
Total ← Total + Mark
NEXT I
OUTPUT Total
Worked example. Um programa deve ler 5 notas, depois exibir o total e a média.
Total ← 0
FOR I ← 1 TO 5
INPUT Mark
Total ← Total + Mark
NEXT I
Average ← Total / 5
OUTPUT Total, Average
Duas linhas transportam as notas. Total ← 0 deve ficar antes do loop: coloque-o dentro e o total será reiniciado em cada passagem, então o programa exibirá apenas a última nota. E Average ← Total / 5 deve ficar depois do loop, porque o total não está completo até que todas as notas tenham sido somadas. Inicialize antes, calcule depois — essa ordem é o que a questão realmente testa.
| English | Português |
|---|---|
| totalling/ˈtəʊtəlɪŋ/ | soma acumulada |
| counting/ˈkaʊntɪŋ/ | contagem |
| remainder/rɪˈmeɪndə/ | resto |
| nested statement/ˈnestɪd ˈsteɪtmənt/ | instrução aninhada |
8.1
Operadores
Arithmetic operators
| Operator | Meaning |
|---|---|
+ - * / |
add, subtract, multiply, divide |
^ |
raised to the power of |
MOD |
o resto da divisão |
DIV |
the whole-number part of a division |
Por exemplo, 17 MOD 5 é 2, e 17 DIV 5 é 3.
Relational operators
Estes comparam dois valores e dão um resultado Booleano: =, <, <=, >, >=, e <> (not equal to).
Logical operators
Estes unem condições: AND (ambas devem ser verdadeiras), OR (pelo menos uma deve ser verdadeira), NOT (reverte verdadeiro/falso).

IF Age >= 13 AND Age <= 19
THEN
OUTPUT "Teenager"
ENDIF
SUBSTRING: pegar parte de uma string
O primeiro caractere está na posição 1. SUBSTRING(Palavra, Início, Comprimento) pega Caracteres Length começando em Início — arraste as duas alças e leia a chamada que ela constrói.
8.1
Manipulação de strings
Uma string é feita de caracteres. Operações úteis:

- comprimento — o número de caracteres na string;
- substring — parte menor extraída da string;
- maiúsculas — alterar letras para maiúsculas;
- minúsculas — alterar letras para minúsculas.
name ← "Computer"
OUTPUT LENGTH(name) // 8
OUTPUT SUBSTRING(name, 1, 4) // "Comp"
OUTPUT UCASE(name) // "COMPUTER"
OUTPUT LCASE(name) // "computer"
(O primeiro caractere pode ser contado como posição 0 ou posição 1, dependendo da linguagem.)
Em pseudocódigo de exame, o primeiro caractere está na posição 1, e SUBSTRING(name, start, length) extrai length caracteres começando em start.
Exemplo resolvido. Extraia o sobrenome de um nome completo como "Ada Lovelace".
FullName ← "Ada Lovelace"
Position ← 0
FOR I ← 1 TO LENGTH(FullName)
IF SUBSTRING(FullName, I, 1) = " "
THEN
Position ← I
ENDIF
NEXT I
OUTPUT SUBSTRING(FullName, Position + 1, LENGTH(FullName) - Position)
- O espaço
LENGTH(FullName)está na posição 12 (o espaço conta como um caractere). - O laço verifica um caractere por vez; o espaço está na posição 4, então
Positioné 4. - O sobrenome começa na posição 5 e tem $12 - 4 = 8$ caracteres:
SUBSTRING(FullName, 5, 8)é"Lovelace".
SUBSTRING: pegar parte de uma string
O primeiro caractere está na posição 1. SUBSTRING(Palavra, Início, Comprimento) pega Caracteres Length começando em Início — arraste as duas alças e leia a chamada que ela constrói.
| English | Português |
|---|---|
| substring/ˈsʌbstrɪŋ/ | subcadena |
| upper case/ˈʌpə keɪs/ | maiúsculas |
| lower case/ˈləʊə keɪs/ | minúsculas |
8.1
Declarações aninhadas
Uma instrução aninhada é uma estrutura de controle colocada dentro de outra. Você pode aninhar seleção e iteração.
FOR I ← 1 TO 3
IF MOD(I, 2) = 0
THEN
OUTPUT I, " is even"
ELSE
OUTPUT I, " is odd"
ENDIF
NEXT I
Você não precisará escrever mais de três níveis de aninhamento.
8.1
Procedimentos e funções
Para evitar repetir código, você pode dividir um programa em blocos nomeados.
- Um procedimento é um bloco de código nomeado que executa uma tarefa. Você o executa com
CALL. - Uma função é como um procedimento, mas ela retorna um valor para onde foi chamada.
Um parâmetro é uma entrada nomeada em um procedimento ou função; a chamada fornece seu valor. Questões de exame usam até três parâmetros.
PROCEDURE Greet(PersonName : STRING)
OUTPUT "Hello ", PersonName
ENDPROCEDURE
CALL Greet("Sam")
FUNCTION Square(N : INTEGER) RETURNS INTEGER
RETURN N * N
ENDFUNCTION
Answer ← Square(5) // answer is 25
Exemplo resolvido. Escreva uma função que retorne o maior de dois números e use-a.
FUNCTION Larger(A : INTEGER, B : INTEGER) RETURNS INTEGER
DECLARE Result : INTEGER
IF A > B
THEN
Result ← A
ELSE
Result ← B
ENDIF
RETURN Result
ENDFUNCTION
Biggest ← Larger(12, 30)
OUTPUT Larger(Biggest, 25)
Larger(12, 30) retorna 30, que é armazenado em Biggest; Larger(30, 25) retorna 30, que é saída. A, B e Result são locais: existem apenas enquanto a função executa. O resultado de uma função deve ser usado, em atribuição ou saída; um procedimento é executado em linha própria com CALL e não devolve nada.

Variáveis locais e globais
- Uma variável local é declarada dentro de um procedimento ou função. Ela só pode ser usada lá.
- Uma variável global é declarada no programa principal. Ela pode ser usada em qualquer lugar.
Variáveis locais são mais seguras, pois não podem ser alteradas por engano a partir de outra parte do programa.
| English | Português |
|---|---|
| procedure/prəˈsiːdʒə/ | procedimento |
| function/ˈfʌŋkʃn/ | função |
| parameter/pəˈræmɪtə/ | parâmetro |
| local variable/ˈləʊkl ˈveərɪəbl/ | variável local |
| global variable/ˈɡləʊbl ˈveərɪəbl/ | variável global |
| library routine/ˈlaɪbrəri ruːˈtiːn/ | rotina de biblioteca |
| maintainable/meɪnˈteɪnəbl/ | mantenível |
| meaningful identifiers/ˈmiːnɪŋfl aɪˈdentɪfaɪəz/ | identificadores significativos |
| comments/ˈkɒments/ | comentários |
8.1
Rotinas da biblioteca
Uma rotina de biblioteca é um trecho de código pronto que você pode usar. Você deve conhecer estes:
| Routine | O que faz |
|---|---|
MOD |
dá o resto de uma divisão |
DIV |
dá a parte inteira de uma divisão |
ROUND |
arredonda um número real para um número de casas decimais |
RANDOM |
dá um número aleatório |
| Chamada | Resultado |
|---|---|
MOD(17, 5) |
2 |
DIV(17, 5) |
3 |
ROUND(3.14159, 2) |
3.14 |
ROUND(7.46, 1) |
7.5 |
RANDOM() |
um número real aleatório de 0 a 1 |
MOD(Number, 2) = 0 verifica se um número é par; DIV(Seconds, 60) e MOD(Seconds, 60) dividem 135 segundos em 2 minutos e 15 segundos.
8.1
Escrevendo um programa mantensável
Um programa mantenível é fácil de ler e alterar por outras pessoas mais tarde. Para torná-lo assim:
- use identificadores significativos — nomes claros para variáveis, constantes, arrays, procedimentos e funções (
totalScore, nãox); - adicione comentários para explicar o que cada parte do código faz;
- use procedures e functions para dividir o trabalho em pequenos blocos.
| English | Português |
|---|---|
| array/əˈreɪ/ | array |
| index/ˈɪndeks/ | índice |
| one-dimensional (1D) array/wʌn daɪˈmenʃənl əˈreɪ/ | array unidimensional (1D) |
| two-dimensional (2D) array/tuː daɪˈmenʃənl əˈreɪ/ | array bidimensional (2D) |
8.2
Matrizes
Programa
| Os candidatos devem ser capazes de: | Notas e orientações |
|---|---|
| 1 Declarar e usar arrays unidimensionais (1D) e bidimensionais (2D) | |
| 2 Compreender o uso de arrays | • Incluindo o uso de variáveis como índices em arrays |
| 3 Escrever valores em e ler valores de um array usando iteração | • O primeiro índice pode ser zero ou um • Incluindo iteração aninhada |
Fonte: Programa Cambridge International
Um array é uma única variável que armazena muitos valores do mesmo tipo, acessados por um índice (um número de posição).
Arrays unidimensionais
Um array unidimensional (1D) é como uma lista única.
DECLARE Scores : ARRAY[1:5] OF INTEGER
Scores[1] ← 90
Scores[2] ← 75
OUTPUT Scores[1]

Você pode usar um loop para preencher ou ler um array:
FOR I ← 1 TO 5
INPUT Scores[I]
NEXT I
Exemplo resolvido. Encontre a pontuação mais alta em Scores e sua posição. Scores contém 90, 75, 98, 61, 98.
DECLARE Scores : ARRAY[1:5] OF INTEGER
Scores[1] ← 90
Scores[2] ← 75
Scores[3] ← 98
Scores[4] ← 61
Scores[5] ← 98
Highest ← Scores[1]
Place ← 1
FOR I ← 2 TO 5
IF Scores[I] > Highest
THEN
Highest ← Scores[I]
Place ← I
ENDIF
NEXT I
OUTPUT "Highest ", Highest, " at position ", Place
I |
Scores[I] |
> Highest? |
Highest |
Place |
|---|---|---|---|---|
| início | 90 | 1 | ||
| 2 | 75 | não | 90 | 1 |
| 3 | 98 | sim | 98 | 3 |
| 4 | 61 | não | 98 | 3 |
| 5 | 98 | não | 98 | 3 |
A saída é Highest 98 at position 3. Iniciar Highest no primeiro elemento, em vez de 0, também funciona para valores negativos; com >= em vez de >, o último 98 seria encontrado (posição 5).
Arrays bidimensionais
Um array bidimensional (2D) é como uma tabela com linhas e colunas. Ele usa dois índices.
DECLARE Grid : ARRAY[1:3, 1:3] OF INTEGER
Grid[1, 1] ← 5
Grid[2, 3] ← 8

Você lê um array 2D com um loop dentro de outro loop (iteração aninhada).
Exemplo resolvido. Marks[1:3, 1:2] contém duas notas de teste para cada um de três alunos (linhas). Exiba o total de cada aluno.
| Coluna 1 | Coluna 2 | |
|---|---|---|
| Linha 1 | 12 | 15 |
| Linha 2 | 9 | 11 |
| Linha 3 | 14 | 18 |
DECLARE Marks : ARRAY[1:3, 1:2] OF INTEGER
Marks[1, 1] ← 12
Marks[1, 2] ← 15
Marks[2, 1] ← 9
Marks[2, 2] ← 11
Marks[3, 1] ← 14
Marks[3, 2] ← 18
FOR Row ← 1 TO 3
Total ← 0
FOR Col ← 1 TO 2
Total ← Total + Marks[Row, Col]
NEXT Col
OUTPUT "Student ", Row, ": ", Total
NEXT Row
O laço externo seleciona um aluno; o laço interno soma as duas notas desse aluno. A saída é 27, 20 e 32. Total ← 0 deve estar dentro do laço externo: se colocado antes dele, os totais continuariam para 27, 47 e 79.
Um programa completo para uma situação-problema
A última questão da Prova 2 pede que você escreva um programa completo para uma situação-problema, usando vetores. São atribuídos pontos para cada parte exigida, portanto planeje as partes antes de escrever.
Exemplo resolvido. Uma estação meteorológica registra a temperatura ao meio-dia em cada um dos 7 dias de uma semana. Escreva um programa que:
- receba as 7 temperaturas em um vetor, aceitando apenas valores de −20 a 50;
- apresente a temperatura média da semana;
- apresente quantos dias tiveram temperatura acima dessa média e qual foi o dia mais quente.
Plano. (1) declarar o vetor e as variáveis; (2) um laço de 7 entradas, cada uma com um laço de validação; (3) um total acumulado e depois a média; (4) um segundo laço para contar os dias acima da média e encontrar a maior temperatura; (5) saídas com mensagens.
DECLARE Temps : ARRAY[1:7] OF REAL
DECLARE Day, AboveCount, HotDay : INTEGER
DECLARE Total, Average : REAL
Total ← 0
FOR Day ← 1 TO 7
OUTPUT "Enter the temperature for day ", Day
INPUT Temps[Day]
WHILE Temps[Day] < -20 OR Temps[Day] > 50 DO
OUTPUT "Invalid: enter a value from -20 to 50"
INPUT Temps[Day]
ENDWHILE
Total ← Total + Temps[Day]
NEXT Day
Average ← Total / 7
OUTPUT "Average temperature: ", ROUND(Average, 1)
AboveCount ← 0
HotDay ← 1
FOR Day ← 1 TO 7
IF Temps[Day] > Average
THEN
AboveCount ← AboveCount + 1
ENDIF
IF Temps[Day] > Temps[HotDay]
THEN
HotDay ← Day
ENDIF
NEXT Day
OUTPUT "Days above average: ", AboveCount
OUTPUT "Hottest day: ", HotDay, " at ", Temps[HotDay]
Por que recebe pontos. Cada parte exigida está presente e é fácil de encontrar: o laço de validação solicita novamente até que o valor esteja no intervalo (um IF verificaria apenas uma vez); o valor é adicionado ao total depois de ser validado; a média é calculada depois do laço, não dentro dele; a contagem começa em 0 e o dia mais quente começa no dia 1, de modo que sempre corresponde a uma leitura real. Os dias acima da média exigem um segundo laço, pois a média só é conhecida depois que todos os valores são inseridos.
Erros comuns. Dividir por 7 dentro do primeiro laço; comparar com a média antes de calculá-la; iniciar a maior temperatura em 0 (incorreto se todas as temperaturas forem negativas); e apresentar saídas sem uma mensagem que explique o que cada número representa.
Matrizes
Escolha uma linha e uma coluna para ler uma célula. Os arrays da Cambridge contam a partir de 1, e um elemento 2D é escrito com UM par de parênteses — Grid[2, 3].
| English | Português |
|---|---|
| file/faɪl/ | arquivo |
8.3
Manipulação de arquivos
Programa
| Os candidatos devem ser capazes de: | Notas e orientações |
|---|---|
| 1 Compreender o propósito de armazenar dados em um arquivo para uso por um programa | |
| 2 Abrir, fechar e usar um arquivo para leitura e escrita | • Incluindo: – ler e escrever itens únicos de dados – ler e escrever uma linha de texto |
Fonte: Programa Cambridge International
Um programa pode armazenar dados em um arquivo para que ele seja mantido após o programa parar. Você deve abrir o arquivo, usá-lo e depois fechá-lo.
OPENFILE "data.txt" FOR WRITE
WRITEFILE "data.txt", "Hello"
CLOSEFILE "data.txt"
OPENFILE "data.txt" FOR READ
READFILE "data.txt", Line
CLOSEFILE "data.txt"
Você pode ler e escrever itens individuais de dados ou uma linha inteira de texto. Sempre feche um arquivo quando terminar de usá-lo.
Exemplo resolvido. Salve os cinco valores de Scores em um arquivo, um por linha, depois leia o primeiro de volta.
DECLARE Scores : ARRAY[1:5] OF INTEGER
Scores[1] ← 90
Scores[2] ← 75
Scores[3] ← 98
Scores[4] ← 61
Scores[5] ← 98
OPENFILE "scores.txt" FOR WRITE
FOR I ← 1 TO 5
WRITEFILE "scores.txt", Scores[I]
NEXT I
CLOSEFILE "scores.txt"
OPENFILE "scores.txt" FOR READ
READFILE "scores.txt", FirstScore
CLOSEFILE "scores.txt"
OUTPUT FirstScore
Cada WRITEFILE adiciona uma linha, então o arquivo contém cinco linhas; a leitura começa do topo, logo FirstScore é a primeira nota. Abrir um arquivo FOR WRITE o inicia vazio: qualquer conteúdo prévio é perdido.
8.3
Dicas de prova
- Para a questão longa sobre uma situação-problema, liste primeiro as partes exigidas e depois verifique se cada uma aparece no seu código, com comentários ou mensagens que mostrem onde estão.
- Uma variable (variável) pode mudar enquanto o programa roda; uma constant (constante) é fixa. Aprenda os cinco tipos de dados: integer, real, char, string, Boolean.
- Todo programa é construído a partir de três estruturas: sequence (sequência), selection (seleção - IF / CASE) e iteration (iteração - loops).
- Um loop WHILE testa antes do corpo, então pode rodar zero vezes; um loop REPEAT … UNTIL testa depois, então sempre roda pelo menos uma vez.
MODdá o resto eDIVa parte inteira de uma divisão:17 MOD 5é 2,17 DIV 5é 3.- Uma function retorna um valor; uma procedure não. Uma variável local funciona apenas dentro do seu bloco; uma global funciona em qualquer lugar.
Aulas interativas sobre este tópico
Passe por ele passo a passo, com exercícios de verificação instantânea.