Skip to content · ⁨Saltar al contenido⁩

Diseño de algoritmos y resolución de problemas

A-Level Ciencias de la Computación · Topic 9 · ⁨Tema 9⁩

Train · ⁨Entrenar⁩
Video lesson for this topic · ⁨Lección de video para este tema⁩ Open the video page · ⁨Abrir la página de video⁩
14:52

Pensamiento computacional

Aquí hay una tarea: construir un sistema para gestionar el stock de toda una tienda —cada producto, cada venta, cada entrega, cada informe. Como un problema gigante, es demasiado grande para…

English narration · English + 中文 subtitles burned in · ⁨Narración en inglés · Subtítulos en inglés + 中文 quemados en pantalla⁩

9.1

Computational thinking · ⁨Pensamiento computacional⁩

Syllabus
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)
Español
Los candidatos deben ser capaces de: Notas y orientaciones
Demostrar comprensión de la abstracción Necesidad y beneficios del uso de la abstracción. Describir el propósito de la abstracción. Producir un modelo abstracto de un sistema incluyendo únicamente los detalles esenciales.
Describir y utilizar la descomposición Desglosar problemas en subproblemas, lo que conduce al concepto de módulo de programa (procedimiento / función).

Source: Cambridge International syllabus · ⁨Fuente: Plan de estudios 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.

Español

El pensamiento computacional 计算思维 es el conjunto de herramientas mentales para analizar un problema y diseñar una solución que un ordenador pueda ejecutar. Dos conceptos clave son la abstracción y la descomposición.

Un rompecabezas parcialmente resuelto
El pensamiento computacional divide un problema grande en partes más pequeñas y fáciles — como resolver un rompecabezas

Abstracción

La abstracción 抽象 significa mantener las características esenciales de un problema e ignorar los detalles irrelevantes, creando así un modelo más simple.

Ejemplos:

  • un mapa de una red ferroviaria mantiene las estaciones y líneas, pero omite la geografía real.
  • una clase en programación orientada a objetos conserva solo los atributos y métodos que el sistema necesita.
  • una función oculta una parte del trabajo tras un nombre.

Un modelo completo de cualquier problema real sería demasiado complejo para analizar, por lo que la abstracción es esencial.

Al examinador le piden el propósito de la abstracción y sus beneficios. Propósito: producir un modelo más simple de un problema que contenga únicamente los detalles necesarios para resolverlo. Beneficios: el problema es más fácil de entender y programar; el programa es más pequeño, se escribe y prueba más rápido; el mismo modelo puede reutilizarse para problemas similares. Cuando se te pide crear un modelo abstracto de un sistema, enumera solo los datos y acciones que la tarea requiere. Para un horario escolar, esto significa clases, aulas, profesores y periodos; no significa el color de las aulas ni la edad de los profesores.

La abstracción convierte una geografía real y caótica (una ruta sinuosa con edificios dispersos) en un mapa de metro limpio — círculos de estaciones espaciados uniformemente en una línea recta, manteniendo las estaciones y líneas y omitiendo la geografía
La abstracción mantiene lo esencial (estaciones y líneas) y elimina los detalles irrelevantes (la geografía)

Descomposición

La descomposición 分解 significa dividir un problema grande en subproblemas más pequeños, cada uno más fácil de resolver y abordado uno a la vez.

  1. encontrar las partes principales de la tarea.
  2. dividir cada parte en subtareas más pequeñas.
  3. continuar hasta que cada una sea lo suficientemente pequeña para diseñarla directamente.
  4. resolver las tareas pequeñas y combinarlas.

Para el control de stock: "gestionar stock" → "registrar ventas", "registrar entregas", "producir informes" → ("registrar ventas") "consultar producto", "disminuir contador de stock", "guardar transacción". La descomposición hace manejables los problemas grandes, permite que un equipo divida el trabajo y proporciona código modular — cada módulo se convierte en una procedimiento 过程 o función.

"Plicar por qué se usa la descomposición" es una pregunta de tres puntos con una estructura fija. Da tres beneficios separados: cada subproblema 子问题是 lo suficientemente pequeño para diseñar, codificar y probar por sí mismo; diferentes programadores pueden trabajar en diferentes módulos 模块 al mismo tiempo; un módulo que ya existe (o una rutina de biblioteca) puede reutilizarse, y un fallo es más fácil de localizar porque está contenido dentro de un solo módulo. Un diagrama estructural (tema 12) es el diagrama de una descomposición: el programa en la parte superior, sus módulos debajo, y los datos que se pasan entre ellos.

Un árbol con "Gestionar stock" en la parte superior que se ramifica en los módulos "Registrar ventas", "Registrar entregas" y "Producir informes", y "Registrar ventas" se divide en las subtareas "Consultar producto", "Disminuir contador de stock" y "Guardar transacción"
Descomponer un programa en módulos y submódulos
Explore · ⁨Explorar⁩

Resolver un problema a la manera computacional

Recorra los cuatro pilares en el orden en que los usaría: descomponga el problema, identifique lo que se repite, simplifíquelo a lo esencial y luego escriba los pasos.

Vocabulary · ⁨Vocabulario⁩ Train · ⁨Entrenar⁩
English · ⁨Inglés⁩ Chinese · ⁨Chino⁩ 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
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
Español
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión de que un algoritmo es una solución a un problema expresada como una secuencia de pasos definidos
Utilizar nombres de identificadores adecuados para la representación de datos utilizados por un problema y representarlos mediante una tabla de identificadores
Escribir pseudocódigo que contenga entrada, proceso y salida
Escribir pseudocódigo utilizando las tres construcciones básicas de secuencia, selección e iteración (repetición)
Documentar un algoritmo simple mediante una descripción en inglés estructurado, un diagrama de flujo o pseudocódigo
Escribir pseudocódigo a partir de: • una descripción en inglés estructurado • un diagrama de flujo
Dibujar un diagrama de flujo a partir de: • una descripción en inglés estructurado • pseudocódigo
Describir y utilizar el proceso de refinamiento progresivo para expresar un algoritmo hasta un nivel de detalle desde el cual la tarea pueda ser programada
Utilizar sentencias lógicas para definir partes de una solución algorítmica

Source: Cambridge International syllabus · ⁨Fuente: Plan de estudios 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.

Español
Ordenamiento burbuja, paso a paso

Un algoritmo 算法 es una solución expresada como una secuencia de pasos definidos. Cada paso es sin ambigüedad 无歧义 (un significado), determinista 确定性 (misma entrada → misma salida), finito (los pasos terminan) y efectivo (cada uno puede ejecutarse). Un algoritmo dice qué hacer, independientemente del lenguaje de programación utilizado para implementarlo.

Explore · ⁨Explorar⁩

Selección: seguir las ramas IF / ELSE

Arrastra la puntuación y observa qué rama se ejecuta. La selección prueba cada condición a su vez y toma la PRIMERA que sea verdadera; así es como funciona IF … ELSE IF … ELSE.

Watch lesson · ⁨Ver lección⁩
9.2

Identifier table · ⁨Tabla 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.

Español

Cuando inicias un algoritmo, lista cada pieza de datos en una tabla de identificadores 标识符表 — su identificador 标识符 (el nombre de la variable 变量), tipo de dato 数据类型 y descripción. La tabla del examen tiene exactamente estas tres columnas:

Identificador Tipo de dato Descripción
Category STRING categoría del producto
SaleDate DATE cuándo se vendió el artículo
ItemCost REAL costo del artículo
InStock BOOLEAN TRUE si está en stock
Sales ARRAY[1:30] OF REAL los totales diarios de ventas de los últimos 30 días

Usa nombres descriptivos (ItemCost, no x): un identificador comienza con una letra, no contiene espacios y se escribe de la misma manera cada vez que aparece. Los tipos comunes son INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, además de arreglos. La tabla te obliga a nombrar cada pieza de datos antes de escribir código, y una pregunta de "completar la tabla de identificadores" otorga un punto por cada tipo de dato o descripción correcta, así que escribe el tipo exactamente como lo hace la guía de pseudocódigo.

Una tabla de identificadores que lista cada variable con su nombre, tipo de dato y descripción, por ejemplo CostoArticulo como un REAL para el costo del artículo
Una tabla de identificadores nombra cada pieza de datos antes de escribir código
Vocabulary · ⁨Vocabulario⁩ Train · ⁨Entrenar⁩
English · ⁨Inglés⁩ Chinese · ⁨Chino⁩ Pinyin
identifier table/aɪˈdentɪfaɪə ˈteɪbl/ 标识符表 biāo shí fú biǎo
identifier/aɪˈdentɪfaɪə/ 标识符 biāo shí fú
variable/ˈveərɪəbl/ 变量 biàn liàng
data type/ˈdeɪtə taɪp/ 数据类型 shù jù lèi xíng
9.2

Pseudocode — the three basic constructs · ⁨Pseudocódigo — las tres construcciones 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:

Español

El pseudocódigo 伪代码 es una forma estructurada y neutral al lenguaje para describir algoritmos.

Las tres construcciones básicas como mini-diagramas de flujo: secuencia ejecuta paso A luego B luego C; selección verifica una condición y realiza X o Y; iteración repite un cuerpo mientras se cumple una condición, volviendo atrás
Los tres bloques constructores de cualquier algoritmo: secuencia, selección e iteración

1. Secuencia

Los pasos se ejecutan uno después de otro (secuencia 顺序):

INPUT Name
INPUT Age
OUTPUT "Hello", Name

2. Selección

Una elección de qué pasos ejecutar, basada en una condición (selección 选择):

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

Para más opciones, usa CASE OF ... ENDCASE.

3. Iteración

Repetir un bloque (iteración 迭代, un bucle 循环):

FOR i ← 1 TO 10
    OUTPUT i
NEXT i

Un bucle MIENTRAS verifica la condición antes de cada pasada (puede ejecutarse cero veces); un bucle REPETIR...HASTA verifica después de cada pasada (siempre se ejecuta al menos una vez).

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

REPEAT
    INPUT Mark
UNTIL Mark >= 0 AND Mark <= 100
Dos diagramas de flujo lado a lado. MIENTRAS verifica la condición primero, así que el cuerpo nunca podría ejecutarse: el rombo está sobre el cuerpo y la rama No sale del bucle. REPETIR HASTA ejecuta el cuerpo primero y verifica después, así que el cuerpo siempre se ejecuta al menos una vez: el cuerpo está sobre el rombo y la rama No vuelve a él
Un bucle MIENTRAS verifica antes de que se ejecute el cuerpo; un bucle REPETIR ... HASTA verifica después, por lo que su cuerpo siempre se ejecuta al menos una vez

Elegir el bucle es en sí mismo un punto: FOR cuando sabes cuántas veces (un bucle controlado por contador 计数循环); WHILE cuando el bucle podría no ejecutarse en absoluto (un bucle de precondición 前测循环); REPEAT ... UNTIL cuando debe ejecutarse al menos una vez, como en la validación de una entrada (un bucle de poscondición 后测循环). Una respuesta que "describe la construcción de iteración" nombra la construcción, dice dónde se verifica la condición y da la consecuencia (cero veces o al menos una vez).

Operaciones comunes

  • asignación 赋值: x ← 5 (una flecha; = es para comparación).
  • entrada/salida: INPUT variable, OUTPUT expression.
  • comparaciones =, <>, <, >, <=, >=; lógica AND, OR, NOT.
  • aritmética + - * /, además de DIV (división entera) y MOD (resto).
  • cadenas: LENGTH, LEFT, RIGHT, MID, y & para concatenación 拼接 (unir).

El pseudocódigo que espera el examen

Cada respuesta de pseudocódigo se califica según la guía publicada de Cambridge. Escribe estas formas exactamente:

Construcción Pseudocódigo
Variable DECLARE Total : INTEGER
Arreglo DECLARE Marks : ARRAY[1:30] OF REAL
Constante CONSTANT MaxTries = 3
Asignación Total ← Total + Value
Entrada / salida INPUT Name
OUTPUT "Hello ", Name
Selección CASE OF Choice
1 : OUTPUT "Add"
OTHERWISE OUTPUT "Error"
ENDCASE
Bucle PARA FOR i ← 1 TO 10 STEP 2 ... NEXT i
Bucle MIENTRAS WHILE Total < 100 DO ... ENDWHILE
Bucle REPETIR REPEAT ... UNTIL Mark >= 0
Aritmética entera 17 DIV 5 = 3
17 MOD 5 = 2
Cadenas LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
MID(S, 2, 4), UCASE(S), LCASE(S)
Conversiones INT(3.7) = 3, NUM_TO_STR(12)
STR_TO_NUM("4.5"), ASC('A') = 65, CHR(66) = 'B'
Aleatorio RAND(100)
INT(RAND(100)) + 1

RAND(100) da un número real desde 0 hasta (pero sin incluir) 100. INT(RAND(100)) + 1 da un entero de 1 a 100.

Dos hábitos ganan puntos en cada pregunta: declarar todas las variables que uses, con el tipo de tu tabla de identificadores, e inicializar 初始化 todo contador 计数器 y total (Count ← 0, Total ← 0) antes del bucle que lo cambia.

Entrada → Proceso → Salida

Todo programa sigue esta forma:

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

Listar las entradas y salidas primero hace que el algoritmo sea más limpio.

Ejemplo resuelto. Escribe pseudocódigo que introduzca 100 enteros y devuelva cuántos de ellos y la suma de aquellos que están entre 10 y 20 inclusive.

Tabla de identificadores: Count : INTEGER (contador de bucle), Value : INTEGER (el entero acaba de ser introducido), InRange : INTEGER (cuántos estaban en rango), Total : INTEGER (su suma).

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

Si la pregunta luego te pide "identificar dos construcciones y stating cómo se usa cada una", responde con la misma estructura: iteración, el bucle FOR, repite la entrada 100 veces; selección, la instrucción IF, añade un valor solo cuando está en rango.

Ejemplo resuelto. Un programa elige un entero secreto de 1 a 100. El usuario adivina hasta acertar; después de cada intento incorrecto el programa dice "Demasiado bajo" o "Demasiado alto", y al final devuelve cuántos intentos se hicieron.

Tabla de identificadores: Secret : INTEGER (el número a adivinar), Guess : INTEGER (la entrada del usuario), Tries : INTEGER (cuántos intentos ha habido hasta ahora).

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"

Un bucle REPEAT ... UNTIL es la opción correcta porque el usuario debe adivinar al menos una vez. Los puntos son para: el número aleatorio en el rango correcto, un bucle que termina con un acierto, el contador que empieza en cero y aumenta dentro del bucle, los dos mensajes bajo las condiciones correctas, y la salida final.

Diagrama de flujo del juego de adivinanza: Inicio, luego establecer Secreto a un entero aleatorio de 1 a 100 e Intentos a 0, luego entrar una adivinanza, sumar uno a Intentos, verificar si la adivinanza es igual al secreto (Sí lleva a output Intentos y Parar), de lo contrario verificar si la adivinanza es menor (Sí saca Too low, No saca Too high), y ambas salidas vuelven a entrar
El mismo juego de adivinanza como diagrama de flujo: los dos rombos de decisión son las dos instrucciones SI, y la flecha de retorno es el bucle REPETIR ... HASTA

Ejemplo resuelto. Devuelve dos enteros aleatorios diferentes, cada uno entre $-10$ y $10$ inclusive.

Hay 21 valores posibles, por lo que INT(RAND(21)) da de 0 a 20 y restar 10 lo desplaza al rango $-10$ a $10$. El segundo número debe generarse nuevamente hasta que difiera del primero:

DECLARE First, Second : INTEGER
First ← INT(RAND(21)) - 10
REPEAT
    Second ← INT(RAND(21)) - 10
UNTIL Second <> First
OUTPUT First, Second
Todo programa sigue la forma entrada, luego proceso, luego salida, mostrado con el ejemplo del área: entra la longitud y el ancho, procesa multiplicando, saca el área
Todo programa sigue la forma Entrada, Proceso, Salida
Explore · ⁨Explorar⁩

IF … ELSE selección

Cambia el valor y observa qué rama se ejecuta: cómo un programa toma una decisión.

Vocabulary · ⁨Vocabulario⁩ Train · ⁨Entrenar⁩
English · ⁨Inglés⁩ Chinese · ⁨Chino⁩ Pinyin
pseudocode/ˈsuːdəʊkəʊd/ 伪代码 wěi dài mǎ
flowchart/ˈfləʊtʃɑːt/ 流程图 liú chéng tú
selection/sɪˈlekʃn/ 选择 xuǎn zé
iteration/ˌɪtəˈreɪʃn/ 迭代 dié dài
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 · ⁨Tres notaciones⁩

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

Español

El mismo algoritmo puede escribirse de tres formas.

  • inglés estructurado 结构化英语 — lenguaje natural con sangría y palabras clave fijas; bueno para una descripción de alto nivel.
  • diagrama de flujo 流程图 — un diagrama con formas estándar:
Forma Significado
Rectángulo redondeado Inicio / Parada
Paralelogramo Entrada / Salida
Rectángulo Proceso
Rombo Decisión
Flecha Flujo de control
  • pseudocódigo — la notación de palabras clave anterior; más cercano al código.

Deberías poder convertir entre cualquier par: cada IF es un rombo de decisión, cada bucle es una flecha de retorno, y una secuencia son rectángulos apilados.

SI ... ENTONCES ... DE LO CONTRARIO ... FIN SI

Un diagrama de flujo para promediar números: terminadores redondeados de Inicio y Parada, paralelogramos de entrada/salida, rectángulos de proceso, y un rombo de decisión "count < n?" cuya rama Sí vuelve a leer el siguiente valor
Un diagrama de flujo para promediar una lista de números, usando las formas estándar
9.2

Stepwise refinement · ⁨Refinamiento progresivo⁩

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".

Español

El refinamiento progresivo 逐步求精 comienza con un esquema de alto nivel y expande cada paso hasta que sea lo suficientemente pequeño para codificarlo. Para un promedio de $n$ números:

Nivel 1:

Read in the numbers
Compute the average
Output the average

Nivel 2:

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

Cada refinamiento mantiene la estructura anterior y añade detalles.

Una pregunta de seis puntos de "aplicar refinamiento progresivo" te da un esquema de alto nivel y quiere que cada paso se expanda en las instrucciones concretas que un programador podría codificar. Mantén los pasos en el mismo orden, nombra los datos que cada paso lee o produce, y detente cuando cada línea sea una sola entrada, asignación, salida, bucle o condición. Por ejemplo, "validar la contraseña" se convierte en: introducir la contraseña; verificar que su longitud sea de al menos 8; verificar que contenga al menos un dígito; output "aceptado" si ambas verificaciones pasan, de lo contrario output "rechazado".

Refinamiento progresivo: un esquema Nivel 1 (leer los números, calcular el promedio, imprimir el promedio) se expande en pseudocódigo detallado Nivel 2 con el bucle de entrada y la división
Refinamiento progresivo: expande cada paso de alto nivel en pseudocódigo detallado
Explore · ⁨Explorar⁩

Refinamiento paso a paso: de esquema a código

Descender los niveles. Comienza con toda la tarea en una sola línea y sigue expandiendo cada paso en pasos más pequeños — hasta que cada paso sea lo suficientemente simple para codificarse directamente.

9.2

Logic statements · ⁨Sentencias 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.

Español

Una sentencia lógica 逻辑语句 es una condición Booleana 布尔 que controla el salto, construida a partir de comparaciones (x > 10), conectores (AND, OR, NOT) y paréntesis. Úsala como condición de IF, WHILE o REPEAT...UNTIL:

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

Prioridad 优先级 (de mayor a menor): NOT, luego AND, luego OR. Usa paréntesis si estás inseguro. Errores comunes:

  • a = 1 OR 2 es incorrecto — escribe a = 1 OR a = 2.
  • NOT a > 5 significa NOT (a > 5), es decir, a <= 5.
  • NOT (A AND B) es lo mismo que (NOT A) OR (NOT B) (Ley de De Morgan 德摩根定律) — útil para simplificar condiciones.

Convertir una oración en una sentencia lógica es una habilidad que los exámenes prueban directamente. "Un boleto es gratis para cualquiera menor de 5 o mayor de 65" se convierte en Age < 5 OR Age > 65. "Una nota es válida si es un número entero de 0 a 100" se convierte en Mark >= 0 AND Mark <= 100. "El bucle se detiene cuando el archivo termina o se han leído diez registros" se convierte en UNTIL EOF(File) OR Count = 10. Escribe cada comparación completa: Age > 65 y Age < 5, nunca Age > 65 OR < 5.

Un árbol de análisis para "intentos < 3 Y NO logueado": NO se aplica a logueado primero, luego Y une eso con intentos < 3
Prioridad: NO se une a logueado primero, luego Y combina ambos lados

Ejemplo resuelto. Escribe una tabla de identificadores y pseudocódigo para leer 10 números y devolver el mayor. La tabla de identificadores nombra cada variable con su tipo de dato y propósito: Count : INTEGER (contador de bucle), Num : REAL (el número acabado de leer), Max : REAL (mayor hasta ahora).

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

La decisión de diseño que lleva los puntos es inicializar Max: debe empezar más bajo que cualquier posible entrada - o, aún más seguro, ser configurado al primer número leído. Inicializarlo a 0 haría que el algoritmo devolviera erróneamente 0 para una lista de números negativos, un error que solo expones si los datos de prueba incluyen un negativo.

Vocabulary · ⁨Vocabulario⁩ Train · ⁨Entrenar⁩
English · ⁨Inglés⁩ Chinese · ⁨Chino⁩ Pinyin
Boolean/ˈbuːlɪən/ 布尔 bù ěr
9.2

Definitions the examiner accepts · ⁨Definiciones que acepta el 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
Español

Una pregunta de definición se califica contra un texto fijo. Aprende estas exactamente, y da solo una respuesta.

Término Definición
abstracción mantener los detalles esenciales de un problema y omitir los detalles que no se necesitan
descomposición dividir un problema en subproblemas más pequeños, cada uno de los cuales puede resolverse por separado
algoritmo una solución a un problema expresada como una secuencia de pasos definidos
tabla de identificadores una tabla que lista cada identificador usado en un algoritmo con su tipo de dato y una descripción de su propósito
pseudocódigo una forma estructurada e independiente del lenguaje para escribir los pasos de un algoritmo
diagrama de flujo un diagrama que muestra los pasos y decisiones de un algoritmo usando símbolos estándar unidos por flechas
secuencia instrucciones ejecutadas una después de otra en el orden escrito
selección elegir qué instrucciones ejecutar según una condición
iteración repetir un grupo de instrucciones mientras, o hasta, se cumpla una condición
refinamiento progresivo dividir cada paso de un esquema en pasos más pequeños, repetidamente, hasta que cada paso pueda codificarse directamente
sentencia lógica una condición construida a partir de comparaciones y los operadores Y, O y NO que evalúa a VERDADERO o FALSO
9.2

Exam tips · ⁨Consejos de examen⁩

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.
Español
  • Define un algoritmo como una secuencia de pasos sin ambigüedad, finita y determinista, independiente del lenguaje.
  • Usa correctamente las tres construcciones — secuencia, selección, iteración — y mantén una tabla de identificadores con tipos de dato.
  • Divide un problema mediante descomposición y abstracción, luego refinamiento progresivo.
  • Escribe pseudocódigo que realmente funcionaría: declara variables y sigue el estilo de pseudocódigo del examen.

Errores comunes

  • Usar = para asignar un valor. La asignación es ←; = es una comparación.
  • Olvidar ENDIF, ENDWHILE, ENDCASE o NEXT. Cada construcción se cierra, y la palabra de cierre es donde se verifica el punto de la construcción.
  • No inicializar un total o contador antes del bucle, por lo que el algoritmo suma a un valor que nunca existió.
  • Usar un bucle FOR cuando el número de repeticiones es desconocido. Leer hasta un valor centinela o un acierto necesita WHILE o REPEAT ... UNTIL.
  • Escribir Age > 65 OR < 5. Cada lado de OR y AND debe ser una comparación completa.
  • Responder "explicar por qué se usa la descomposición" con un beneficio escrito de tres formas. Tres puntos necesitan tres beneficios diferentes.

Interactive lessons on this topic · ⁨Lecciones interactivas sobre este tema⁩

Work through it step by step, with instant-check exercises. · ⁨Trátalo paso a paso, con ejercicios de verificación instantánea.⁩

Past Papers · ⁨Exámenes Anteriores⁩

More topics in A-Level Ciencias de la Computación · ⁨Más temas en A-Level Ciencias de la Computación⁩

Log in or create account · ⁨Iniciar sesión o crear cuenta⁩

IGCSE, A-Level & AP