Pseudocodice: esempi svolti
15 esempi svolti in pseudocodice Cambridge IGCSE e A-Level, da un primo OUTPUT fino al bubble sort. Ognuno mostra il suo output e puoi eseguirlo nell'editor qui sotto.
Come leggere questi esempi
Lo pseudocodice descrive i passi di un programma in un inglese strutturato, senza le regole rigide di un vero linguaggio di programmazione. Tutti gli esempi qui sotto usano lo stile Cambridge richiesto dagli esami IGCSE e A-Level: DECLARE per le variabili, ← per l'assegnazione, OUTPUT per stampare, e blocchi chiusi con ENDIF, NEXT o ENDWHILE.
Ogni esempio presenta un problema, fornisce lo pseudocodice, mostra l'output che produce e spiega come funziona. Premi Eseguilo nell'editor per caricare un esempio nell'editor in cima alla pagina, dove puoi eseguirlo riga per riga e guardare le variabili cambiare. Prima volta con questa sintassi? L'editor di pseudocodice ha una libreria cliccabile con tutti i costrutti.
1. Hello, World
Stampa un messaggio sullo schermo.
OUTPUT "Hello, World!"Hello, World!OUTPUT stampa tutto ciò che lo segue, e il testo va tra virgolette doppie. Questa sola riga è un programma completo: lo pseudocodice non ha bisogno di una funzione principale né di import.
2. Somma due numeri
Memorizza due numeri interi, sommali e stampa il totale.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42Ogni variabile viene dichiarata con un nome e un tipo prima di essere usata. La freccia ← memorizza un valore, quindi leggi total ← a + b come "total diventa a più b". Una virgola in OUTPUT unisce il testo e il valore sulla stessa riga.
3. Pari o dispari
Stabilisci se un numero è pari o dispari.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddMOD restituisce il resto della divisione. Un numero pari diviso per 2 non lascia resto, quindi la verifica è n MOD 2 = 0. IF sceglie uno dei due rami e ENDIF chiude il blocco. In pseudocodice un singolo = confronta due valori; non assegna mai.
4. Assegna un voto a un compito
Trasforma un punteggio su 100 in un voto: A da 80 in su, B da 60 a 79, C sotto 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 BI controlli partono dalla soglia più alta e scendono, quindi un punteggio di 74 non supera la prima verifica e supera la seconda. Mettere un IF dentro l'ELSE di un altro è il modo in cui lo pseudocodice Cambridge scrive una catena di else-if. Un CHAR contiene un solo carattere tra virgolette singole.
5. Somma i numeri da 1 a 10
Somma tutti i numeri interi da 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 55Un ciclo FOR viene eseguito un numero fisso di volte: i assume i valori 1, 2, 3 e così via fino a 10, e NEXT i segna la fine del corpo del ciclo. Il totale parziale parte da 0 e cresce a ogni passaggio. Il risultato, 55, coincide con la formula n(n + 1) / 2.
6. Stampa una tabellina
Stampa le prime cinque righe della tabellina del 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 = 35Il contatore del ciclo i viene usato nel calcolo, quindi ogni passaggio stampa una riga diversa. OUTPUT può unire più testi e più valori con le virgole.
7. Conto alla rovescia con un ciclo WHILE
Conta alla rovescia da 5 a 1, poi stampa un messaggio finale.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!Un ciclo WHILE controlla la sua condizione prima di ogni passaggio e si ferma appena la condizione diventa falsa. Qui la condizione è count > 0, e il corpo diminuisce count di uno ogni volta. Se togli la riga che lo diminuisce, il ciclo non finisce mai. Usa WHILE quando non sai in anticipo quanti passaggi ti servono.
8. Trova il numero più grande in un array
Trova il valore più grande in una lista di sei numeri.
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] dichiara sei posizioni numerate da 1 a 6, perché negli esami Cambridge gli array di solito partono da 1. Il programma presume che il primo elemento sia il più grande, poi confronta con esso ogni altro elemento e tiene quello maggiore. Dopo un passaggio sull'array, largest contiene la risposta.
9. Calcola una media
Calcola la media di quattro voti.
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.5Il ciclo somma ogni elemento dell'array a total, poi il programma divide per il numero dei voti. L'operatore / dà un risultato decimale, ed è per questo che l'output è 77.5. Usa invece DIV quando vuoi una divisione intera.
10. Ricerca lineare
Trova la posizione del nome Dara in una lista di nomi.
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 4La ricerca lineare controlla gli elementi uno alla volta dall'inizio. La condizione del WHILE ferma il ciclo quando il nome viene trovato oppure quando tutti gli elementi sono stati controllati, e il flag found registra quale delle due cose è successa. Funziona con dati non ordinati, ma su una lista lunga può richiedere un confronto per ogni elemento.
11. Bubble sort
Ordina cinque numeri in ordine 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
8Il bubble sort confronta ogni coppia di elementi vicini e li scambia quando sono nell'ordine sbagliato. Dopo ogni passaggio del ciclo esterno, il valore più grande rimasto è arrivato in fondo, quindi il ciclo interno può fermarsi un elemento prima ogni volta. Lo scambio richiede una terza variabile, temp, che tiene un valore mentre l'altro viene copiato.
12. Fattoriale con una funzione
Scrivi una funzione che restituisca il fattoriale di n (n!), poi usala per calcolare 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! = 120Una FUNCTION riceve dei parametri, fa il suo lavoro e restituisce un valore con RETURN; la sua intestazione indica il tipo restituito. Le variabili dichiarate al suo interno esistono solo mentre è in esecuzione. 5! è 5 × 4 × 3 × 2 × 1, cioè 120.
13. Conta le vocali di una parola
Conta quante vocali contiene la parola 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 restituisce il numero di caratteri di una stringa, e SUBSTRING(word, i, 1) prende un carattere a partire dalla posizione i. Il ciclo visita ogni carattere e aggiunge uno al contatore ogni volta che è A, E, I, O o U.
14. FizzBuzz
Stampa i numeri da 1 a 15, ma scrivi Fizz per i multipli di 3, Buzz per i multipli di 5 e FizzBuzz per i multipli di entrambi.
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
FizzBuzzL'ordine dei controlli conta. 15 è multiplo sia di 3 sia di 5, quindi la verifica per 15 deve venire per prima; altrimenti il programma stamperebbe Fizz e non arriverebbe mai a FizzBuzz. È un classico esercizio di riscaldamento nei colloqui di lavoro proprio perché mette alla prova questo tipo di ragionamento.
15. Tentativi di password con REPEAT UNTIL
Prova fino a tre password una dopo l'altra e concedi l'accesso se una di esse è corretta.
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 grantedUn ciclo REPEAT ... UNTIL controlla la sua condizione alla fine, quindi il corpo viene eseguito sempre almeno una volta. Si ferma quando la password corrisponde o dopo il terzo tentativo. I tentativi arrivano da un array, così l'esempio funziona senza digitare nulla; in una risposta d'esame di solito leggeresti ciascuno con INPUT.
Domande frequenti sugli esempi di pseudocodice
Qual è un esempio di pseudocodice?
Uno breve decide se un compito è superato: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. Si legge quasi come l'inglese ma segue regole fisse, quindi si può trasformare in Python, Java o qualsiasi altro linguaggio riga per riga. I 15 programmi di questa pagina vanno da una sola riga fino alla ricerca e all'ordinamento.
Come si scrive lo pseudocodice?
Decidi cosa deve fare il programma, poi scrivi i passi in ordine con un piccolo insieme di parole chiave: DECLARE per le variabili, ← per assegnare, IF per le decisioni, FOR o WHILE per ripetere e OUTPUT per i risultati. Indenta il corpo di ogni blocco, chiudilo con la sua parola chiave di fine e scrivi una sola azione per riga.
Lo pseudocodice è uguale in tutti gli esami?
No. Cambridge (IGCSE e A-Level) usa DECLARE e la freccia ←, AQA usa ← senza dichiarazioni, l'Exam Reference Language di OCR somiglia a Python ed Edexcel scrive SET ... TO. Questi esempi usano Cambridge; l'editor di pseudocodice ti fa passare da uno all'altro dei quattro stili.
Posso eseguire lo pseudocodice?
Sì, in questa pagina. Lo pseudocodice non è un vero linguaggio di programmazione, quindi non esiste un compilatore ufficiale, ma l'editor qui esegue lo pseudocodice Cambridge nel tuo browser, mostra l'output e lo esegue riga per riga. Premi Eseguilo nell'editor sotto qualsiasi esempio.
Che differenza c'è tra pseudocodice e diagramma di flusso?
Entrambi descrivono un algoritmo prima di scriverne il codice. Un diagramma di flusso disegna i passi come riquadri e frecce, il che si adatta a processi brevi con poche decisioni. Lo pseudocodice li scrive come testo strutturato, che funziona anche per programmi più lunghi e si trasforma in codice vero in modo più diretto.
Devo dichiarare le variabili nello pseudocodice?
Nello pseudocodice Cambridge, sì: i criteri di correzione si aspettano DECLARE name : TYPE prima di usare una variabile. Altri stili, come quello di AQA, non usano dichiarazioni. Dichiarare una variabile dice anche a chi legge che tipo di valore contiene.