| Los candidatos deben ser capaces de: | Notas y orientaciones |
|---|---|
| 1 Declarar y utilizar variables y constantes | |
| 2 Comprender y utilizar los tipos de datos básicos | • Incluye: – entero – real – carácter – cadena – Booleano |
| 3 Comprender y utilizar la entrada y salida de datos | |
| 4 (a) Comprender y utilizar el concepto de secuencia | |
| (b) Comprender y utilizar el concepto de selección | • Incluye: – sentencias IF – sentencias CASE |
| (c) Comprender y utilizar el concepto de iteración | • Incluye: – bucles controlados por contador – bucles con precondición – bucles con postcondición |
| (d) Comprender y utilizar los conceptos de acumulación y conteo | |
| (e) Comprender y utilizar el manejo de cadenas | • Incluye: – longitud – subcadena – mayúsculas – minúsculas • El primer carácter de la cadena puede estar en la posición cero o uno |
| (f) Comprender y utilizar operadores aritméticos, relacionales y lógicos | • Aritméticos, limitados a: – + – – – / – * – ^ (elevado a una potencia) – MOD – DIV • Relacionales, limitados a: – = – < – <= – > – >= – <> (distinto de) • Lógicos, limitados a: – AND – OR – NOT |
| 5 Comprender y utilizar sentencias anidadas | • Incluye selección e iteración anidadas • No se requerirá que los candidatos escriban más de tres niveles de sentencias anidadas |
| 6 (a) Comprender qué significan procedimientos, funciones y parámetros (b) Definir y utilizar procedimientos y funciones, con o sin parámetros (c) Comprender y utilizar variables locales y globales | • Los procedimientos y funciones pueden tener hasta tres parámetros |
| 7 Comprender y utilizar rutinas de biblioteca | • Incluye: – MOD – DIV – ROUND – RANDOM |
| 8 Comprender cómo crear un programa mantenible | • Incluye el uso adecuado de: – identificadores significativos – la función de comentarios proporcionada por el lenguaje de programación – procedimientos y funciones – comentarios relevantes y apropiados para la sintaxis • Utilizar identificadores significativos para: – variables – constantes – arreglos – procedimientos y funciones |
Programación
IGCSE Ciencias de la Computación · Tema 8
13:11
Programación
Aquí hay un programa corto. Lee cinco notas de prueba e imprime el total. Las cinco notas son ocho, nueve, siete, seis y diez, así que el total debería ser cuarenta. Mira…
Narración en inglés · subtítulos en inglés y 中文 que puedes cambiar
8.1
Variables y constantes
Syllabus
Fuente: Plan de estudios Cambridge International
Una variable es un almacén nombrado que contiene un valor que puede cambiar mientras se ejecuta el programa. Una constante es un almacén nombrado cuyo valor está fijado y no cambia.


Debes declararlas (indicar su nombre y tipo) antes de usarlas:
DECLARE Score : INTEGER
DECLARE Name : STRING
CONSTANT Pi ← 3.142

Utiliza una constante para un valor que nunca cambia (como Pi), para que se defina en un solo lugar y sea fácil de leer.
Variables y asignación
Paso a paso por las líneas y observe cómo cada variable toma su nuevo valor.
| English | Español |
|---|---|
| variable/ˈveərɪəbl/ | variable |
| constant/ˈkɒnstənt/ | constante |
| declare/dɪˈkleə/ | declarar |
| integer/ˈɪntɪdʒə/ | entero |
| string/strɪŋ/ | cadena |
8.1
Tipos de datos
Un tipo de dato indica qué clase de valor contiene una variable. Debes conocer cinco tipos básicos.

| Tipo | Contiene | Ejemplo |
|---|---|---|
| entero | un número entero | 42, -7 |
| real | un número con punto decimal | 3.14, -0.5 |
| carácter | un solo carácter | 'A', '?' |
| cadena | una secuencia de caracteres | "Hello" |
| Booleano | uno de dos valores | TRUE o FALSE |
| English | Español |
|---|---|
| data type/ˈdeɪtə taɪp/ | tipo de dato |
| real/rɪəl/ | real |
| char/tʃɑː/ | carácter |
| Boolean/ˈbuːlɪən/ | booleano |
8.1
Entrada y salida
Entrada lee un valor del usuario. Salida muestra un valor en la pantalla.
OUTPUT "What is your name?"
INPUT Name
OUTPUT "Hello ", Name
| English | Español |
|---|---|
| input/ˈɪnpʊt/ | entrada |
| output/ˈaʊtpʊt/ | salida |
| sequence/ˈsiːkwəns/ | secuencia |
| selection/sɪˈlekʃn/ | selección |
| iteration/ˌɪtəˈreɪʃn/ | iteración |
8.1
Las tres estructuras básicas
Todo programa se construye a partir de tres estructuras de control.

Secuencia
Secuencia significa que los pasos se ejecutan uno tras otro, en orden, de arriba hacia abajo.
INPUT Length
INPUT Width
Area ← Length * Width
OUTPUT Area
Selección
Selección elige qué pasos ejecutar, basado en una condición. Usa una instrucción IF, o una instrucción CASE cuando hay muchas opciones.
IF Score >= 50
THEN
OUTPUT "Pass"
ELSE
OUTPUT "Fail"
ENDIF
CASE OF Grade
'A' : OUTPUT "Excellent"
'B' : OUTPUT "Good"
OTHERWISE OUTPUT "Keep trying"
ENDCASE
Iteración
Iteración (un bucle) repite pasos. Hay tres tipos.
Un bucle controlado por contador se repite un número fijo de veces:
FOR I ← 1 TO 5
OUTPUT "Hello"
NEXT I
Un bucle de precondición verifica la condición antes de cada repetición, por lo que puede ejecutarse cero veces:
WHILE Answer <> "stop" DO
INPUT Answer
ENDWHILE
Un bucle de postcondición verifica la condición después de cada repetición, por lo que siempre se ejecuta al menos una vez:
REPEAT
INPUT Password
UNTIL Password = "secret"

Cómo decide una escalera IF … ELSE IF
Las condiciones se prueban de arriba hacia abajo; la PRIMERA que es verdadera se ejecuta y las demás se omiten. Desliza la puntuación y observa qué rama se ilumina.
Selección
Cambie el valor y observe qué rama se ejecuta — selección en acción.
| English | Español |
|---|---|
| loop/luːp/ | bucle |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | bucle controlado por contador |
| pre-condition loop/priː kənˈdɪʃn luːp/ | bucle de precondición |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | bucle de postcondición |
| length/leŋθ/ | longitud |
8.1
Sumatoria y conteo
- acumulación — seguir sumando valores a una suma total:
Total ← Total + Value. - conteo — añadir 1 a un contador cada vez:
Count ← Count + 1.


Total ← 0
FOR I ← 1 TO 10
INPUT Mark
Total ← Total + Mark
NEXT I
OUTPUT Total
Ejemplo resuelto. Un programa debe leer 5 notas, luego mostrar el total y el promedio.
Total ← 0
FOR I ← 1 TO 5
INPUT Mark
Total ← Total + Mark
NEXT I
Average ← Total / 5
OUTPUT Total, Average
Dos líneas manejan las notas. Total ← 0 debe estar antes del bucle: si se coloca dentro, el total se reinicia en cada pasada, por lo que el programa solo mostrará la última nota. Y Average ← Total / 5 debe estar después del bucle, porque el total no está completo hasta que se haya añadido cada nota. Inicializar antes, calcular después: ese orden es lo que realmente está probando la pregunta.
| English | Español |
|---|---|
| totalling/ˈtəʊtəlɪŋ/ | suma total |
| counting/ˈkaʊntɪŋ/ | conteo |
| remainder/rɪˈmeɪndə/ | resto |
| nested statement/ˈnestɪd ˈsteɪtmənt/ | instrucción anidada |
8.1
Operadores
Operadores aritméticos
| Operador | Significado |
|---|---|
+ - * / |
sumar, restar, multiplicar, dividir |
^ |
elevado a la potencia |
MOD |
el resto después de la división |
DIV |
la parte de número entero de una división |
Por ejemplo, 17 MOD 5 es 2, y 17 DIV 5 es 3.
Operadores relacionales
Comparan dos valores y dan como resultado un Booleano: =, <, <=, >, >= y <> (diferente de).
Operadores lógicos
Conectan condiciones: AND (ambas deben ser verdaderas), OR (al menos una debe ser verdadera), NOT (invierte verdadero/falso).

IF Age >= 13 AND Age <= 19
THEN
OUTPUT "Teenager"
ENDIF
SUBSTRING: extraer parte de una cadena
El primer carácter está en la posición 1. SUBSTRING(Palabra, Inicio, Longitud) toma Longitud caracteres comenzando en Inicio — arrastra los dos mangos y lee la llamada que construye.
8.1
Manejo de cadenas
Una cadena está formada por caracteres. Operaciones útiles:

- longitud — el número de caracteres en la cadena;
- subcadena — una parte más pequeña extraída de la cadena;
- mayúsculas — cambiar letras a mayúsculas;
- minúsculas — cambiar letras a minúsculas.
name ← "Computer"
OUTPUT LENGTH(name) // 8
OUTPUT SUBSTRING(name, 1, 4) // "Comp"
OUTPUT UCASE(name) // "COMPUTER"
OUTPUT LCASE(name) // "computer"
(El primer carácter puede contarse como posición 0 o posición 1, dependiendo del lenguaje).
En pseudocódigo de examen, el primer carácter está en la posición 1, y SUBSTRING(name, start, length) toma length caracteres comenzando en start.
Ejemplo resuelto. Imprime el apellido de un nombre 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)
LENGTH(FullName)es 12 (el espacio cuenta como un carácter).- El bucle verifica un carácter a la vez; el espacio está en la posición 4, así que
Positiones 4. - El apellido comienza en la posición 5 y tiene $12 - 4 = 8$ caracteres:
SUBSTRING(FullName, 5, 8)es"Lovelace".
SUBSTRING: extraer parte de una cadena
El primer carácter está en la posición 1. SUBSTRING(Palabra, Inicio, Longitud) toma Longitud caracteres comenzando en Inicio — arrastra los dos mangos y lee la llamada que construye.
| English | Español |
|---|---|
| substring/ˈsʌbstrɪŋ/ | subcadena |
| upper case/ˈʌpə keɪs/ | mayúscula |
| lower case/ˈləʊə keɪs/ | minúscula |
8.1
Sentidos anidados
Una instrucción anidada es una estructura de control colocada dentro de otra. Puedes anidar selección e iteración.
FOR I ← 1 TO 3
IF MOD(I, 2) = 0
THEN
OUTPUT I, " is even"
ELSE
OUTPUT I, " is odd"
ENDIF
NEXT I
No tendrás que escribir más de tres niveles de anidamiento.
8.1
Procedimientos y funciones
Para evitar repetir código, puedes dividir un programa en bloques con nombre.
- Un procedimiento es un bloque de código con nombre que realiza una tarea. Se ejecuta con
CALL. - Una función es como un procedimiento, pero devuelve un valor al lugar donde fue llamada.
Un parámetro es una entrada nombrada en un procedimiento o función; una llamada proporciona su valor. Las preguntas de examen utilizan hasta tres 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
Ejemplo resuelto. Escribe una función que devuelva el número mayor de dos números, y úsala.
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) devuelve 30, que se almacena en Biggest; Larger(30, 25) devuelve 30, que se muestra. A, B y Result son locales: existen solo mientras la función se ejecuta. El resultado de una función debe usarse, en una asignación o una salida; un procedimiento se ejecuta en su propia línea con CALL y no devuelve nada.

Variables locales y globales
- Una variable local se declara dentro de un procedimiento o función. Solo puede usarse allí.
- Una variable global se declara en el programa principal. Puede usarse en cualquier lugar.
Las variables locales son más seguras, ya que no pueden cambiarse por error desde otra parte del programa.
| English | Español |
|---|---|
| procedure/prəˈsiːdʒə/ | procedimiento |
| function/ˈfʌŋkʃn/ | función |
| parameter/pəˈræmɪtə/ | parámetro |
| local variable/ˈləʊkl ˈveərɪəbl/ | variable local |
| global variable/ˈɡləʊbl ˈveərɪəbl/ | variable global |
| library routine/ˈlaɪbrəri ruːˈtiːn/ | rutina de biblioteca |
| maintainable/meɪnˈteɪnəbl/ | mantenible |
| meaningful identifiers/ˈmiːnɪŋfl aɪˈdentɪfaɪəz/ | identificadores significativos |
| comments/ˈkɒments/ | comentarios |
8.1
Rutinas de biblioteca
Una rutina de biblioteca es un fragmento de código predefinido que puedes usar. Debes conocer estas:
| Rutina | Qué hace |
|---|---|
MOD |
da el resto de una división |
DIV |
da la parte de número entero de una división |
ROUND |
redondea un número real a un número de lugares decimales |
RANDOM |
da un número aleatorio |
| Llamada | Resultado |
|---|---|
MOD(17, 5) |
2 |
DIV(17, 5) |
3 |
ROUND(3.14159, 2) |
3.14 |
ROUND(7.46, 1) |
7.5 |
RANDOM() |
un número real aleatorio entre 0 y 1 |
MOD(Number, 2) = 0 comprueba si un número es par; DIV(Seconds, 60) y MOD(Seconds, 60) dividen 135 segundos en 2 minutos y 15 segundos.
8.1
Escribir un programa mantenible
Un programa mantenible es fácil de leer y modificar para otras personas en el futuro. Para hacerlo:
- usa identificadores significativos — nombres claros para variables, constantes, matrices, procedimientos y funciones (
totalScore, nox); - añade comentarios para explicar qué hacen las partes del código;
- usa procedimientos y funciones para dividir el trabajo en bloques pequeños.
8.2
Arreglos
Syllabus
| Los candidatos deben ser capaces de: | Notas y orientación |
|---|---|
| 1 Declarar y utilizar arreglos unidimensionales (1D) y bidimensionales (2D) | |
| 2 Comprender el uso de los arreglos | • Incluyendo el uso de variables como índices en los arreglos |
| 3 Escribir valores en y leer valores de un arreglo utilizando iteración | • El primer índice puede ser cero o uno • Incluyendo la iteración anidada |
Fuente: Plan de estudios Cambridge International
Una matriz es una sola variable que contiene muchos valores del mismo tipo, accesibles mediante un índice (un número de posición).
Arreglos unidimensionales
Un array unidimensional (1D) es como una lista única.
DECLARE Scores : ARRAY[1:5] OF INTEGER
Scores[1] ← 90
Scores[2] ← 75
OUTPUT Scores[1]

Puedes usar un bucle para llenar o leer un arreglo:
FOR I ← 1 TO 5
INPUT Scores[I]
NEXT I
Ejemplo resuelto. Encuentra la puntuación más alta en Scores y su posición. Scores contiene 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 |
|---|---|---|---|---|
| inicio | 90 | 1 | ||
| 2 | 75 | no | 90 | 1 |
| 3 | 98 | sí | 98 | 3 |
| 4 | 61 | no | 98 | 3 |
| 5 | 98 | no | 98 | 3 |
La salida es Highest 98 at position 3. Comenzar Highest en el primer elemento, no en 0, lo hace funcionar también para valores negativos; con >= en lugar de >, se encontraría la última 98 (posición 5).
Arreglos bidimensionales
Un array bidimensional (2D) es como una tabla con filas y columnas. Utiliza dos índices.
DECLARE Grid : ARRAY[1:3, 1:3] OF INTEGER
Grid[1, 1] ← 5
Grid[2, 3] ← 8

Se lee un arreglo 2D con un bucle dentro de otro bucle (iteración anidada).
Ejemplo resuelto. Marks[1:3, 1:2] contiene dos calificaciones de prueba para cada uno de tres estudiantes (filas). Muestre el total de cada estudiante.
| Columna 1 | Columna 2 | |
|---|---|---|
| Fila 1 | 12 | 15 |
| Fila 2 | 9 | 11 |
| Fila 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
El bucle externo selecciona un estudiante; el bucle interno suma las dos calificaciones de ese estudiante. La salida es 27, 20 y 32. Total ← 0 debe estar dentro del bucle externo: si se colocara antes, los totales continuarían hacia 27, 47 y 79.
Un programa completo para una situación
La última pregunta de la prueba 2 te pide que escribas un programa completo para una situación, utilizando arreglos. Se otorgan puntos por cada parte requerida, así que planifica las partes antes de escribir.
Ejemplo resuelto. Una estación meteorológica registra la temperatura del mediodía durante cada uno de los 7 días de una semana. Escribe un programa que:
- introduzca las 7 temperaturas en un arreglo y acepte solo valores de −20 a 50;
- muestre la temperatura promedio de la semana;
- muestre cuántos días estuvieron por encima de ese promedio y cuál fue el día más caluroso.
Plan. (1) declarar el arreglo y las variables; (2) un bucle de 7 entradas, cada una con un bucle de validación; (3) un total acumulado y después el promedio; (4) un segundo bucle para contar los días por encima del promedio y encontrar el valor más alto; (5) salidas con mensajes.
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 qué obtiene puntos. Cada parte requerida está presente y es fácil de encontrar: el bucle de validación vuelve a preguntar hasta que el valor está dentro del rango (un IF solo comprobaría una vez); el valor se suma al total después de que sea válido; el promedio se calcula después del bucle, no dentro de él; el contador comienza en 0 y el día más caluroso comienza en el día 1, por lo que siempre corresponde a una lectura real. Los días por encima del promedio requieren un segundo bucle, porque el promedio no se conoce hasta que se han introducido todos los valores.
Errores comunes. Dividir entre 7 dentro del primer bucle; comparar con el promedio antes de que exista; iniciar el valor más alto en 0 (incorrecto si todas las temperaturas son negativas); y mostrar resultados sin un mensaje que indique qué representa cada número.
Arreglos
Seleccione una fila y una columna para leer una celda. Los arrays de Cambridge cuentan desde 1, y un elemento 2-D se escribe con UN par de corchetes — Grid[2, 3].
| English | Español |
|---|---|
| array/əˈreɪ/ | matriz |
| 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.3
Manejo de archivos
Syllabus
| Los candidatos deben ser capaces de: | Notas y orientación |
|---|---|
| 1 Comprender el propósito de almacenar datos en un archivo para su uso por parte de un programa | |
| 2 Abrir, cerrar y utilizar un archivo para la lectura y escritura | • Incluye: – lectura y escritura de elementos individuales de datos – lectura y escritura de una línea de texto |
Fuente: Plan de estudios Cambridge International
Un programa puede almacenar datos en un archivo para que se conserven después de que el programa se detenga. Debe abrir el archivo, usarlo y luego cerrarlo.
OPENFILE "data.txt" FOR WRITE
WRITEFILE "data.txt", "Hello"
CLOSEFILE "data.txt"
OPENFILE "data.txt" FOR READ
READFILE "data.txt", Line
CLOSEFILE "data.txt"
Puedes leer y escribir elementos individuales de datos o una línea completa de texto. Siempre cierra un archivo cuando termines de usarlo.
Ejemplo resuelto. Guarde los cinco valores de Scores en un archivo, uno por línea, y luego lea el primero de nuevo.
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 añade una línea, por lo que el archivo contiene cinco líneas; la lectura comienza desde arriba, así que FirstScore es la primera nota. Abrir un archivo FOR WRITE lo inicia vacío: todo lo que ya estaba en él se pierde.
| English | Español |
|---|---|
| file/faɪl/ | archivo |
8.3
Consejos para el examen
- Para la pregunta larga sobre una situación, enumera primero las partes requeridas y después asegúrate de que cada una aparezca en tu código, con comentarios o mensajes que indiquen dónde está.
- Una variable puede cambiar mientras se ejecuta el programa; una constante es fija. Aprende los cinco tipos de datos: entero, real, char, string, Boolean.
- Todo programa se construye a partir de tres estructuras: secuencia, selección (IF / CASE) e iteración (bucles).
- Un bucle WHILE prueba antes del cuerpo, por lo que puede ejecutarse cero veces; un bucle REPEAT … UNTIL prueba después, por lo que siempre se ejecuta al menos una vez.
MODda el resto yDIVla parte de número entero de una división:17 MOD 5es 2,17 DIV 5es 3.- Una función devuelve un valor; un procedimiento no. Una variable local solo funciona dentro de su bloque; una global funciona en cualquier lugar.
Lecciones interactivas sobre este tema
Trátalo paso a paso, con ejercicios de verificación instantánea.