Exemplos de pseudocódigo
15 exemplos resolvidos em pseudocódigo Cambridge IGCSE e A-Level, do primeiro OUTPUT até o bubble sort. Cada um mostra a sua saída, e você pode executá-lo no editor abaixo.
Como ler estes exemplos
O pseudocódigo descreve os passos de um programa em um inglês estruturado, sem as regras rígidas de uma linguagem de programação real. Todos os exemplos abaixo usam o padrão Cambridge das provas IGCSE e A-Level: DECLARE para variáveis, ← para atribuição, OUTPUT para mostrar resultados e blocos fechados com ENDIF, NEXT ou ENDWHILE.
Cada exemplo apresenta um problema, dá o pseudocódigo, mostra a saída que ele produz e explica como funciona. Clique em Executar no editor para carregar qualquer exemplo no editor do topo da página, onde você pode percorrê-lo linha por linha e ver as variáveis mudarem. Primeira vez com essa sintaxe? O editor de pseudocódigo tem uma biblioteca clicável com todas as construções.
1. Hello, World
Mostre uma mensagem na tela.
OUTPUT "Hello, World!"Hello, World!OUTPUT mostra o que vem depois dele, e o texto vai entre aspas duplas. Esta única linha já é um programa completo: pseudocódigo não precisa de função principal nem de imports.
2. Somar dois números
Guarde dois números inteiros, some os dois e mostre o total.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42Cada variável é declarada com um nome e um tipo antes de ser usada. A seta ← guarda um valor, então leia total ← a + b como "total recebe a mais b". Uma vírgula no OUTPUT junta o texto e o valor na mesma linha.
3. Par ou ímpar
Descubra se um número é par ou ímpar.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddMOD dá o resto de uma divisão. Um número par não deixa resto quando dividido por 2, então o teste é n MOD 2 = 0. O IF escolhe um de dois caminhos e o ENDIF fecha o bloco. Em pseudocódigo, um único = compara dois valores; ele nunca atribui.
4. Dar conceito a uma nota de prova
Transforme uma nota de 0 a 100 em um conceito: A para 80 ou mais, B de 60 a 79 e C abaixo de 60.
DECLARE score : INTEGER
DECLARE grade : CHAR
score ← 74
IF score >= 80 THEN
grade ← 'A'
ELSE
IF score >= 60 THEN
grade ← 'B'
ELSE
grade ← 'C'
ENDIF
ENDIF
OUTPUT "Score ", score, " gets grade ", gradeScore 74 gets grade BAs verificações vão do limite mais alto para o mais baixo, então uma nota 74 falha no primeiro teste e passa no segundo. Colocar um IF dentro do ELSE de outro é como o pseudocódigo Cambridge escreve uma cadeia de else-if. Um CHAR guarda um único caractere entre aspas simples.
5. Somar os números de 1 a 10
Some todos os números inteiros de 1 a 10.
DECLARE total : INTEGER
DECLARE i : INTEGER
total ← 0
FOR i ← 1 TO 10
total ← total + i
NEXT i
OUTPUT "Sum of 1 to 10 is ", totalSum of 1 to 10 is 55Um laço FOR roda um número fixo de vezes: i assume os valores 1, 2, 3 e assim por diante até 10, e NEXT i marca o fim do corpo do laço. A soma acumulada começa em 0 e cresce a cada volta. A resposta, 55, bate com a fórmula n(n + 1) / 2.
6. Mostrar uma tabuada
Mostre as cinco primeiras linhas da tabuada do 7.
DECLARE i : INTEGER
FOR i ← 1 TO 5
OUTPUT "7 x ", i, " = ", 7 * i
NEXT i7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35O contador do laço i é usado dentro do cálculo, então cada volta mostra uma linha diferente. O OUTPUT pode juntar vários textos e vários valores com vírgulas.
7. Contagem regressiva com um laço WHILE
Conte de 5 até 1 e depois mostre uma mensagem final.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!Um laço WHILE testa a condição antes de cada volta e para assim que ela fica falsa. Aqui a condição é count > 0, e o corpo diminui count em um a cada vez. Tire a linha que diminui o valor e o laço nunca termina. Use WHILE quando você não sabe de antemão quantas voltas serão necessárias.
8. Encontrar o maior número de um vetor
Encontre o maior valor em uma lista de seis números.
DECLARE nums : ARRAY[1:6] OF INTEGER
DECLARE i : INTEGER
DECLARE largest : INTEGER
nums[1] ← 14
nums[2] ← 3
nums[3] ← 27
nums[4] ← 9
nums[5] ← 21
nums[6] ← 6
largest ← nums[1]
FOR i ← 2 TO 6
IF nums[i] > largest THEN
largest ← nums[i]
ENDIF
NEXT i
OUTPUT "The largest number is ", largestThe largest number is 27ARRAY[1:6] declara seis posições numeradas de 1 a 6, porque os vetores no padrão Cambridge costumam começar em 1. O programa supõe que o primeiro elemento é o maior, compara cada um dos outros com ele e fica com o que for maior. Depois de uma passada pelo vetor, largest guarda a resposta.
9. Calcular uma média
Calcule a média de quatro notas de prova.
DECLARE marks : ARRAY[1:4] OF INTEGER
DECLARE i : INTEGER
DECLARE total : INTEGER
marks[1] ← 70
marks[2] ← 85
marks[3] ← 64
marks[4] ← 91
total ← 0
FOR i ← 1 TO 4
total ← total + marks[i]
NEXT i
OUTPUT "Average mark: ", total / 4Average mark: 77.5O laço soma cada elemento do vetor em total, e depois o programa divide pela quantidade de notas. O operador / dá um resultado decimal, e é por isso que a saída é 77.5. Use DIV quando quiser uma divisão inteira.
10. Busca linear
Encontre a posição do nome Dara em uma lista de nomes.
DECLARE names : ARRAY[1:5] OF STRING
DECLARE i : INTEGER
DECLARE found : BOOLEAN
names[1] ← "Ana"
names[2] ← "Ben"
names[3] ← "Chen"
names[4] ← "Dara"
names[5] ← "Eli"
found ← FALSE
i ← 1
WHILE i <= 5 AND found = FALSE DO
IF names[i] = "Dara" THEN
found ← TRUE
ELSE
i ← i + 1
ENDIF
ENDWHILE
IF found = TRUE THEN
OUTPUT "Dara is at position ", i
ELSE
OUTPUT "Not found"
ENDIFDara is at position 4A busca linear verifica os elementos um por um desde o começo. A condição do WHILE para o laço quando o nome é encontrado ou quando todos os elementos já foram verificados, e a flag found registra qual das duas coisas aconteceu. Funciona com dados fora de ordem, mas em uma lista longa pode exigir uma comparação por elemento.
11. Bubble sort
Coloque cinco números em ordem crescente.
DECLARE nums : ARRAY[1:5] OF INTEGER
DECLARE i : INTEGER
DECLARE j : INTEGER
DECLARE temp : INTEGER
nums[1] ← 5
nums[2] ← 1
nums[3] ← 4
nums[4] ← 2
nums[5] ← 8
FOR i ← 1 TO 4
FOR j ← 1 TO 5 - i
IF nums[j] > nums[j + 1] THEN
temp ← nums[j]
nums[j] ← nums[j + 1]
nums[j + 1] ← temp
ENDIF
NEXT j
NEXT i
FOR i ← 1 TO 5
OUTPUT nums[i]
NEXT i1
2
4
5
8O bubble sort compara cada par de vizinhos e troca os dois de lugar quando estão na ordem errada. Depois de cada volta do laço externo, o maior valor que restava foi parar no fim, então o laço interno pode parar um elemento antes a cada vez. A troca precisa de uma terceira variável, temp, para guardar um valor enquanto o outro é copiado.
12. Fatorial com uma função
Escreva uma função que retorne o fatorial de n (n!) e use essa função para calcular 5!.
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
DECLARE result : INTEGER
DECLARE i : INTEGER
result ← 1
FOR i ← 2 TO n
result ← result * i
NEXT i
RETURN result
ENDFUNCTION
OUTPUT "5! = ", Factorial(5)5! = 120Uma FUNCTION recebe parâmetros, faz o seu trabalho e devolve um valor com RETURN; o cabeçalho informa o tipo que ela retorna. As variáveis declaradas dentro dela só existem enquanto ela executa. 5! é 5 × 4 × 3 × 2 × 1, que dá 120.
13. Contar as vogais de uma palavra
Conte quantas vogais existem na palavra PSEUDOCODE.
DECLARE word : STRING
DECLARE letter : CHAR
DECLARE vowels : INTEGER
DECLARE i : INTEGER
word ← "PSEUDOCODE"
vowels ← 0
FOR i ← 1 TO LENGTH(word)
letter ← SUBSTRING(word, i, 1)
IF letter = 'A' OR letter = 'E' OR letter = 'I' OR letter = 'O' OR letter = 'U' THEN
vowels ← vowels + 1
ENDIF
NEXT i
OUTPUT word, " has ", vowels, " vowels"PSEUDOCODE has 5 vowelsLENGTH dá o número de caracteres de uma string, e SUBSTRING(word, i, 1) pega um caractere a partir da posição i. O laço passa por cada caractere e soma um ao contador sempre que ele é A, E, I, O ou U.
14. FizzBuzz
Mostre os números de 1 a 15, mas escreva Fizz para os múltiplos de 3, Buzz para os múltiplos de 5 e FizzBuzz para os múltiplos dos dois.
DECLARE i : INTEGER
FOR i ← 1 TO 15
IF i MOD 15 = 0 THEN
OUTPUT "FizzBuzz"
ELSE
IF i MOD 3 = 0 THEN
OUTPUT "Fizz"
ELSE
IF i MOD 5 = 0 THEN
OUTPUT "Buzz"
ELSE
OUTPUT i
ENDIF
ENDIF
ENDIF
NEXT i1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzzA ordem das verificações importa. 15 é múltiplo de 3 e de 5, então o teste do 15 precisa vir primeiro; senão o programa escreveria Fizz e nunca chegaria ao FizzBuzz. É um aquecimento clássico de entrevista porque testa exatamente esse tipo de raciocínio.
15. Tentativas de senha com REPEAT UNTIL
Teste até três senhas, uma de cada vez, e libere o acesso se uma delas estiver correta.
DECLARE attempts : ARRAY[1:3] OF STRING
DECLARE tries : INTEGER
DECLARE guess : STRING
attempts[1] ← "hunter1"
attempts[2] ← "letmein"
attempts[3] ← "open sesame"
tries ← 0
REPEAT
tries ← tries + 1
guess ← attempts[tries]
OUTPUT "Try ", tries, ": ", guess
UNTIL guess = "open sesame" OR tries = 3
IF guess = "open sesame" THEN
OUTPUT "Access granted"
ELSE
OUTPUT "Locked out"
ENDIFTry 1: hunter1
Try 2: letmein
Try 3: open sesame
Access grantedUm laço REPEAT ... UNTIL testa a condição no final, então o corpo sempre roda pelo menos uma vez. Ele para quando a senha confere ou depois da terceira tentativa. As tentativas vêm de um vetor para que o exemplo rode sem digitar nada; em uma resposta de prova, você normalmente leria cada uma com INPUT.
Perguntas frequentes sobre exemplos de pseudocódigo
Qual é um exemplo de pseudocódigo?
Um exemplo curto decide se alguém passou na prova: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. Ele se lê quase como inglês, mas segue regras fixas, então pode ser passado para Python, Java ou qualquer outra linguagem linha por linha. Os 15 programas desta página vão de uma única linha até busca e ordenação.
Como escrever pseudocódigo?
Defina o que o programa precisa fazer e escreva os passos em ordem com um pequeno conjunto de palavras-chave: DECLARE para variáveis, ← para atribuir, IF para decisões, FOR ou WHILE para repetição e OUTPUT para resultados. Indente o corpo de cada bloco, feche o bloco com a sua palavra de fechamento e escreva uma ação por linha.
O pseudocódigo é igual em todas as provas?
Não. Cambridge (IGCSE e A-Level) usa DECLARE e a seta ←, a AQA usa ← sem declarações, a Exam Reference Language da OCR parece Python e a Edexcel escreve SET ... TO. Os exemplos daqui usam Cambridge; o editor de pseudocódigo alterna entre os quatro estilos.
Dá para executar pseudocódigo?
Sim, nesta página. Pseudocódigo não é uma linguagem de programação real, então não existe um compilador oficial, mas o editor daqui executa pseudocódigo Cambridge no navegador, mostra a saída e percorre o programa linha por linha. Clique em Executar no editor abaixo de qualquer exemplo.
Qual a diferença entre pseudocódigo e fluxograma?
Os dois descrevem um algoritmo antes de ele virar código. Um fluxograma desenha os passos como caixas e setas, o que funciona bem para processos curtos com poucas decisões. O pseudocódigo escreve os passos como texto estruturado, que dá conta de programas mais longos e vira código real de forma mais direta.
É preciso declarar variáveis em pseudocódigo?
No pseudocódigo Cambridge, sim: os critérios de correção esperam DECLARE name : TYPE antes de a variável ser usada. Outros estilos, como o da AQA, dispensam declarações. Declarar uma variável também diz ao leitor que tipo de valor ela guarda.