Logo FPCode

Pseudocódigo

Introducción al uso del pseudocódigo como herramienta para el diseño y planificación de algoritmos, antes de escribir programas en un lenguaje concreto.

Introducción

Antes de comenzar a programar en un lenguaje concreto, es muy útil tener una visión clara y estructurada de lo que queremos que haga nuestro programa. Aquí es donde entra en juego el pseudocódigo, una herramienta que nos permite describir algoritmos utilizando un lenguaje intermedio, cercano al lenguaje natural, pero con una estructura lógica.

El pseudocódigo facilita la planificación de soluciones antes de traducirlas a un lenguaje de programación real. Nos ayuda a centrarnos en la lógica del problema sin preocuparnos por la sintaxis específica del lenguaje. Es ideal para aprender a resolver problemas de forma ordenada y desarrollar el pensamiento computacional.

Conocimiento previo

Referencias

Índice

  1. ¿Qué es el pseudocódigo?
  2. Operadores y palabras reservadas
  3. Tipos de datos
  4. Variables y constantes
  5. Estructuras de control
    5.1. Secuencial
    5.2. Alternativa
    5.3. Iterativa
  6. Estructuras modulares
    6.1. Procedimientos
    6.2. Funciones
    6.3. Paso de paramétros
    6.4. Funciones predefinidas
  7. Estructuras de datos complejas
    7.1. Vectores, Arreglos y Arrays
    7.2. Matrices
  8. Recursividad
  9. Operaciones de entrada y salida de datos
  10. Herramientas para trabajar con pseudocódigo
  11. Ejercicios

1. ¿Qué es el pseudocódigo?

El pseudocódigo es una herramienta muy útil para diseñar y entender algoritmos antes de traducirlos a un lenguaje de programación específico. Se trata de un lenguaje parecido al lenguaje natural, que facilita la escritura de instrucciones de manera clara y sencilla para cualquier programador, sin importar el lenguaje que vaya a usar luego.

El pseudocódigo no es un lenguaje de programación en sí mismo, sino un sistema que usa expresiones limitadas para representar las estructuras básicas de control, que vimos en los paradigmas de programación.

Cuando escribimos pseudocódigo, buscamos expresar algoritmos que tengan una solución finita, con un único punto de inicio. Esta forma de estructurar los algoritmos nos ayuda mucho a la hora de traducirlos después a un lenguaje de programación real.

2. Operadores y palabras reservadas

Aunque no existe una norma estricta para escribir pseudocódigo, es recomendable seguir ciertas convenciones que faciliten su posterior traducción a código de un lenguaje de programación.

Operadores:

Son símbolos o palabras clave que se utilizan en los lenguajes para realizar operaciones sobre uno o más valores (llamados operandos). Estas operaciones pueden ser matemáticas, lógicas, de comparación, entre otras

TipoOperadores
Aritméticos+ - * / Div Mod ^
Relacionales= < <= > >= <>
Lógicosand or not
Asignación
Comentarios//

Palabras reservadas:

Son palabras propias del lenguaje que tienen un significado especial y un uso específico. No se pueden usar literalmente como nombres de variables, funciones u otros identificadores porque están reservadas para controlar la estructura y funcionamiento del programa.

EspañolInglésDescripción
InicioStartMarca el comienzo del algoritmo o programa.
FinEndIndica el final del algoritmo o programa.
SiIfCondicional que ejecuta un bloque si la condición es verdadera.
EntoncesThenIndica la acción a tomar cuando la condición del “Si” es verdadera.
Si noElseBloque alternativo que se ejecuta si la condición del “Si” es falsa.
OtroOtherwiseAlternativa para condiciones adicionales o por defecto.
ParaForBucle que se repite un número determinado de veces.
EnInUsado para indicar el conjunto o rango en bucles o condiciones.
MientrasWhileBucle que se repite mientras la condición sea verdadera.
HacerDoInicio del bloque que se ejecuta dentro de un bucle o condicional.
RepetirRepeatBucle que se ejecuta al menos una vez hasta que se cumpla una condición.
Hasta queUntilCondición que indica hasta cuándo debe continuar un bucle.
SegúnSwitchEstructura de selección múltiple basada en valores específicos.
CasoCaseCada opción dentro de una estructura “Según” (switch).
ProcedimientoProcedureSubrutina que ejecuta una serie de instrucciones sin devolver valor.
FunciónFunctionSubrutina que ejecuta instrucciones y devuelve un valor.
LeerReadCaptura datos ingresados por el usuario o desde una fuente externa.
EscribirWriteEnvía información a la pantalla, a un fichero u otros dispositivos.
ImprimirPrintMuestra información en pantalla o salida estándar.
RetornarReturnDevuelve un valor desde una función o termina su ejecución.
IncrementoIncrementAumenta el valor de una variable (usualmente en bucles).
CadaEachIndica iteración sobre cada elemento de una colección o conjunto.
Por valorBy ValueSe pasa una copia del valor original al parámetro del procedimiento o función.
Por referenciaBy ReferenceSe pasa la dirección de memoria de la variable original al parámetro del procedimiento o función.

3. Tipos de datos

Los tipo de dato determina la naturaleza de la información, cómo se almacena en memoria y qué operaciones se pueden realizar sobre ella. Normalmente se utiliza para determinar una variable o constante.

EspañolInglésDescripción
CarácterCharUn solo símbolo o letra.
CadenaStringSecuencia de caracteres.
EnteroIntegerNúmero entero sin parte decimal.
DecimalRealNúmero con parte decimal (general).
BooleanoBooleanValor verdadero o falso.
FechaDateRepresenta fechas y horas.

Los tipos de datos que se muestran son los más comunes y reconocidos en general, pero es posible encontrar otros tipos o subtipos que representen diferentes conjuntos o subconjuntos de datos, según el lenguaje de programación o el contexto de uso.

4. Variables y constantes

Las variables son etiquetas o nombres que representan lugares en la memoria donde se guardan valores temporales. Estas permiten almacenar, modificar y manipular datos durante la ejecución del algoritmo, simulando la lógica del programa sin necesidad de entrar en detalles técnicos específicos.

Para declarar una variable, usamos la siguiente estructura:

pseudocodigo.txt
Inicio
Definir numero1 como Entero;
Fin

Aquí, Entero es el tipo de dato y numero1 el nombre de la variable, que sirve para referenciarla.

Las variables pueden cambiar de valor mediante una operación llamada asignación, que reemplaza el valor anterior por uno nuevo. Por ejemplo:

pseudocodigo.txt
Inicio
Definir numero1 como Entero;
numero1 ← 5;
// Se cambia el valor de 5 por 10 en la variable numero1
numero1 ← 10;
Fin

Por otro lado, las constantes son valores fijos que no cambian durante la ejecución del programa. Se suelen nombrar con letras mayúsculas para hacerlas más visibles y facilitar su comprensión. La declaración es similar a la de las variables, pero solo se asigna un valor una vez, que no podrá modificarse después.

Ejemplo de constantes:

pseudocodigo.txt
Inicio
Definir PI como Real;
PI ← 3,14159;
Definir LIMITE_MAXIMO como Entero;
LIMITE_MAXIMO ← 500;
Fin

5. Estructuras de control

Las estructuras de control permiten definir el flujo de ejecución de un algoritmo. En pseudocódigo, estas estructuras siguen el estilo de la programación estructurada, dividiendo el programa en bloques lógicos. Podemos clasificarlas en tres grandes grupos: secuencial, alternativa e iterativa.

5.1. Secuencial

Las instrucciones se ejecutan en el orden en que aparecen, una detrás de otra. No hay decisiones ni repeticiones: simplemente, el programa sigue un camino lineal, de arriba a abajo.

pseudocodigo.txt
Inicio
<instrucción1>
...
<instrucciónN>
Fin

5.2. Alternativa

Estas estructuras permiten que el algoritmo tome decisiones. Según una condición, se ejecutará una parte del código u otra.

1. Alternativa simple (If)

Se ejecuta un bloque de instrucciones solo si se cumple una condición booleana.

pseudocodigo.txt
Si <condición> Entonces
<instrucciones>
Fin Si

2. Alternativa doble (If-Else)

Permite ejecutar un bloque u otro, según se cumpla o no la condición.

pseudocodigo.txt
Si <condición> Entonces
<instrucciones1>
Si no
<instrucciones2>
Fin Si

3. Alternativa múltiple (Switch)

Permite evaluar una expresión contra múltiples casos posibles.

pseudocodigo.txt
Según <expresión> Hacer
Caso <valor1>
<instrucciones1>
Caso <valor2>
<instrucciones2>
...
Otro caso
<instruccionesN>
Fin Según

Esta estructura también puede implementarse anidando varias estructuras Si - Si no.

pseudocodigo.txt
Si <condición1> Entonces
<instrucciones1>
Si no
Si <condición2> Entonces
<instrucciones2>
Si no
Si <condición3> Entonces
<instrucciones3>
Si no
<instrucciones4>
Fin Si
Fin Si
Fin Si

5.3. Iterativa

Estas estructuras permiten repetir un bloque de instrucciones mientras se cumpla una condición o durante un número de veces determinado.

1. Iteración con salida al principio (While)

Primero evalúa la condición. Si es verdadera, ejecuta las instrucciones. Si no, sale del bucle.

pseudocodigo.txt
Mientras <condición> Hacer
<instrucciones>
Fin Mientras

2. Iteración con salida al final (Do-While)

Primero se ejecutan las instrucciones y luego se comprueba la condición.

pseudocodigo.txt
Hacer
<instrucciones>
Mientras <condición>

Esta estructura también se puede encontrar como Repeat. Es lo mismo.

pseudocodigo.txt
Repetir
<instrucciones>
Hasta Que <condición>

3. Iteración con contador (For)

Utiliza una variable de control que se incrementa o decrementa hasta alcanzar un límite.

Con incremento positivo:

pseudocodigo.txt
Definir i como Entero;
Para i ← 1 Hasta N Con paso Incremento 1 Hacer
<instrucciones>
Fin Para

Con incremento negativo:

pseudocodigo.txt
Definir i como Entero;
Para i ← N Hasta 1 Con paso Incremento -1 Hacer
<instrucciones>
Fin Para

4. Iteración para cada elemento (For Each)

Recorre todos los elementos de un conjunto o lista.

pseudocodigo.txt
Definir conjunto[N] Como Entero;
Para Cada elemento En conjunto Hacer
<instrucciones>
Fin Para Cada

El uso de este tipo de estructura requiere conocer los tipos de datos complejos, que se explican en el siguiente apartado: Vectores, Arreglos y Arrays

6. Estructuras modulares

En programación, descomponer un problema en partes más pequeñas y manejables es fundamental para mejorar la organización, reutilización y legibilidad del código. Una de las formas más comunes de hacerlo es mediante estructuras modulares, como los procedimientos y funciones.

Podemos utilizar pseudocódigo para representar de manera sencilla esta descomposición modular, sin necesidad de utilizar un lenguaje de programación específico.

6.1. Procedimientos

Un procedimiento es un bloque de instrucciones independiente que recibe un nombre (Por convención, suele utilizarse un verbo en infinitivo, y la primera letra se escribe en mayúscula, para indicar la acción que realiza) y se ejecuta cuando es invocado desde otro bloque de código o desde otro programa.

Además, puede recibir uno o más parámetros de entrada (también llamados argumentos), que son variables acompañadas de su tipo de dato. Estos parámetros permiten al procedimiento trabajar con información concreta, adaptando su comportamiento a los valores recibidos. Es importante tener en cuenta que no es obligatorio definir parámetros. Si el procedimiento no necesita recibir información, se puede indicar su nombre seguido de paréntesis vacíos.

Una vez invocado, el procedimiento ejecuta todas las instrucciones definidas en su interior hasta llegar al final del bloque. Después, retorna el control al programa o bloque que lo llamó, pero no devuelve ningún valor como salida.

Sintaxis general

pseudocodigo.txt
Procedimiento nombre (parámetro1 tipo, parámetro2 tipo, …)
<instrucciones>
Fin Procedimiento
  • Ejemplo 1: Procedimiento sin parámetros

En este ejemplo, se define un procedimiento que no recibe argumentos. Por lo tanto, en su llamada se indicará únicamente el nombre seguido de paréntesis vacíos.

pseudocodigo.txt
Procedimiento MostrarMensaje()
Escribir "Este es un mensaje";
Fin Procedimiento
Inicio
MostrarMensaje();
Fin
  • Ejemplo 2: Procedimiento con parámetro

Utilizando el mismo ejemplo anterior, se añade un parámetro al procedimiento para mostrar una información.

pseudocodigo.txt
Procedimiento MostrarMensaje(mensaje Cadena)
Escribir "El parámetro recibido es: ", mensaje;
Fin Procedimiento
Inicio
Definir saludo Como Cadena;
saludo ← "Hola";
MostrarMensaje(saludo);
Fin

6.2. Funciones

Una función es similar a un procedimiento, con la diferencia de que siempre devuelve un valor como resultado de su ejecución. También puede recibir parámetros de entrada.

Sintaxis general

pseudocodigo.txt
Función nombre (parámetro1 tipo, parámetro2 tipo, …) : tipoRetorno
<instrucciones>
...
Retornar valor;
Fin Función

Ejemplo: Función que suma dos números

pseudocodigo.txt
Función Sumar(a Entero, b Entero) : Entero
Definir resultado como Entero;
resultado ← a + b;
Retornar resultado;
Fin Función
Inicio
Definir x, y, suma Como Entero;
Imprimir "Introduce el primer número:";
Leer x;
Imprimir "Introduce el segundo número:";
Leer y;
suma ← Sumar(x, y);
Imprimir "El resultado es: ", suma;
Fin

6.3. Paso de paramétros

Tanto en los procedimientos como en las funciones es posible enviar parámetros, que son valores o variables que se utilizan dentro del cuerpo del bloque.

Los parámetros permiten que un procedimiento o función trabaje con datos externos, adaptando su comportamiento en función de los valores que recibe. De esta forma, se evita escribir el mismo código varias veces, reutilizando el bloque con diferentes datos.

Dependiendo de cómo se envíen los datos al procedimiento o función, los parámetros pueden comportarse de dos formas:

  1. Paso del parámetro por valor

En el paso por valor, al procedimiento o función se le envía una copia del dato original. Esto significa que cualquier cambio que se haga sobre el parámetro no afecta al valor original de la variable en el programa principal.

pseudocodigo.txt
Procedimiento Incrementar(x Entero Por Valor)
x ← x + 1;
Fin Procedimiento
Inicio
Definir x Como Entero;
x ← 5;
Escribir x;
Incrementar(x);
Escribir x;
Fin

Al ejecutar el ejemplo, vemos que el valor de x sigue siendo el mismo.

Terminal window
5
5
  1. Paso del parametro por referencia

En el paso por referencia, al procedimiento o función se le envía la dirección de memoria de la variable original. Esto implica que cualquier cambio sobre el parámetro modificará directamente el valor de la variable original.

pseudocodigo.txt
Procedimiento Incrementar(x Entero Por Referencia)
x ← x + 1;
Fin Procedimiento
Inicio
Definir x Como Entero;
x ← 5;
Escribir x;
Incrementar(x);
Escribir x;
Fin

Al ejecutar el ejemplo, no ocurrirá como en el anterior, esta vez x va a tener diferente valor, una vez llamado al procedimiento.

Terminal window
5
6

¿Cuándo utilizar una forma u otra?

  • Se utilizará por valor, cuando queremos proteger el dato original y evitar modificaciones. Es útil si solo necesitamos leer o trabajar temporalmente con el dato.
  • Se utilizará por referencia, Cuando necesitamos que el procedimiento o función modifique el valor de la variable original. Es útil, por ejemplo, para devolver resultados o actualizar valores.

6.4. Funciones predefinidas

En pseudocódigo, al igual que en la mayoría de los lenguajes de programación, existen funciones predefinidas que nos permiten realizar operaciones comunes sin necesidad de escribir todo el procedimiento desde cero.

Estas funciones están ya integradas en la gran mayoria de lenguajes y nos permiten trabajar con números, cadenas de texto y operaciones lógicas de forma más rápida y sencilla. Usarlas adecuadamente nos ayuda a escribir algoritmos más claros y no tener que desarrollar desde cero estas operaciones.

A continuación se muestran algunas funciones predefinidas:

Funciones matemáticas

Son funciones que permiten realizar operaciones numéricas avanzadas.

  • Raiz(n) → Devuelve la raíz cuadrada de n.
  • Potencia(base, exponente) → Calcula la potencia de un número.
  • Abs(n) → Devuelve el valor absoluto de n.
  • Redon(n) → Redondea el número n al entero más cercano.
  • Aleatorio(inf, sup) → Devuelve un número aleatorio entre los valores indicados.
Funciones de cadenas

Estas funciones nos permiten trabajar con textos o palabras (también llamadas cadenas de caracteres).

  • Longitud(cadena) → Devuelve cuántos caracteres tiene la cadena.
  • SubCadena(cadena, inicio, fin) → Extrae una parte de la cadena.
  • Concatenar(cad1, cad2) → Une dos cadenas en una sola.
  • Mayusculas(cadena) y Minusculas(cadena) → Convierte todo el texto a mayúsculas o minúsculas.

7. Estructuras de datos complejas

Además de los tipos de datos simples como enteros, reales o cadenas, existen estructuras de datos complejas que nos permiten almacenar y manejar colecciones de valores relacionados. Las dos estructuras más comunes son los vectores y las matrices.

Con el conocimiento que tenemos hasta ahora, si queremos almacenar en memoria el nombre de una fruta, creamos una variable. Pero, ¿qué pasa si ahora queremos almacenar una lista de frutas, por ejemplo, 100 frutas? ¿Tendríamos que crear 100 variables diferentes? Eso sería inviable y poco práctico.

Por eso, existen estructuras de datos que facilitan el almacenamiento ordenado de múltiples datos relacionados y permiten su manipulación mediante índices. Estas estructuras nos ayudan a gestionar colecciones de datos de forma eficiente y organizada.

7.1. Vectores, Arreglos y Arrays

Un vector, arreglo o array son términos que sirve para representar un conjunto de elementos del mismo tipo almacenados en una sola dimensión, es decir, una lista ordenada. Cada elemento se accede mediante un índice, que indica su posición dentro del vector.

** Declaración** Su sintaxis es similar a la de una variable pero ahora se indica entre [ ] la cantidad númerica de elementos. Hay que tener en cuenta que todos los elementos deben ser del mismo tipo. No es posible tener un vector con diferentes tipo de datos.

pseudocodigo.txt
Definir numeros[5] Como Entero; // Vector con 5 elementos

Acceso y recorrido Para acceder a los elementos de un vector, se utiliza un índice, que representa la posición del elemento dentro del mismo. En este caso, el índice comenzará en 1, y cada posición se identifica por su número de orden.

El índice nunca debe superar el límite establecido en la declaración del vector. Por ejemplo, si se ha declarado un vector con 5 elementos, no es válido acceder al índice 6 o superior, ya que se estaría intentando acceder a una posición que no existe en memoria.

pseudocodigo.txt
numero[2] ← 7; // Se añade el valor 7 a la posicion 2
Escribir "El valor en la posicion 2 es: ", numero[2];

Para recorrer los registros de los vectores se empleará un bucle.

pseudocodigo.txt
// Añadir valores a los elementos del vector
Para i ← 1 Hasta 5 Hacer
Escribir "Introduce el número ", i, ":";
Leer numeros[i];
Fin Para
// Leer los valores de los elementos del vector
Para i ← 1 Hasta 5 Hacer
Escribir "El número en la posición ", i, " es: ", numeros[i];
Fin Para

7.2. Matrices

Una matriz es una estructura bidimensional que almacena datos en filas y columnas. Es útil para representar tablas, mapas, imágenes o cualquier tipo de información que necesite un doble índice para su acceso. Una forma sencilla de entenderlo es pensar en el tablero del juego Hundir la flota, donde cada casilla se localiza con una coordenada compuesta por una fila y una columna. Así funciona una matriz.

Declaración

pseudocodigo.txt
Definir matriz[3,4] Como Real; // Matriz de 3 filas y 4 columnas
Definir tablero[10,10] Como Entero; // Matriz de 10 filas y 10 columnas

Acceso y recorrido Se accede a cada elemento con dos índices: fila y columna.

pseudocodigo.txt
matriz[1,1] ← 4.5 // Se añade el valor 4.5 a la posicion 1,1
Escribir "El valor en la posicion 1,1 es: ", matriz[1,1]

Para recorrer las filas y columnas de la matriz se empleará dos bucles anidados

pseudocodigo.txt
// Añadir valores a la matriz
Para i ← 1 Hasta 3 Hacer
Para j ← 1 Hasta 4 Hacer
Escribir "Introduce el valor para la posición (", i, ",", j, "):";
Leer matriz[i,j];
Fin Para
Fin Para
// Mostrar los valores de la matriz
Para i ← 1 Hasta 3 Hacer
Para j ← 1 Hasta 4 Hacer
Escribir "El valor en (", i, ",", j, ") es: ", matriz[i,j];
Fin Para
Fin Para

8. Recursividad

La recursividad es una técnica de programación en la que una función (o procedimiento) se llama a sí misma para resolver un problema. Es especialmente útil cuando el problema puede dividirse en subproblemas del mismo tipo, más pequeños.

Aunque puede parecer compleja al principio, la recursividad permite crear soluciones elegantes y muy potentes. Sin embargo, es importante usarla con cuidado para evitar errores como llamadas infinitas o consumo excesivo de memoria.

¿Cómo funciona?

Una función recursiva tiene dos partes fundamentales:

  1. Caso base: la condición que detiene la recursión.
  2. Llamada recursiva: la función se llama a sí misma con un nuevo valor, acercándose al caso base.

A continuación se va a mostrar un ejemplo de un contador hacia atrás, que imprime números desde n hasta 1. Para entenderlo mejor, se presentarán dos versiones: una iterativa y otra recursiva.

  • Forma iterativa:
pseudocodigo.txt
Funcion ContarHaciaAtras(n: Entero)
Para i ← n Hasta 1 Con Paso -1 Hacer
Escribir i;
Fin Para
Fin Funcion
Inicio
ContarHaciaAtras(5);
Fin
  • Forma recursiva
pseudocodigo.txt
Funcion ContarHaciaAtras(n: Entero)
Si n > 0 Entonces // caso base
Escribir n;
ContarHaciaAtras(n - 1); // llamada recursiva
Fin Si
Fin Funcion
Inicio
ContarHaciaAtras(5); // Llamada inicial
Fin

En la gran mayoría de los casos, un problema puede resolverse tanto de forma iterativa como recursiva. Sin embargo, la recursividad puede resultar más intuitiva y sencilla de aplicar en ciertos contextos, especialmente en problemas con estructura jerárquica o que pueden dividirse naturalmente en subproblemas.

Ejemplos clásicos donde la recursividad destaca por su claridad son el cálculo del factorial, la serie de Fibonacci o el recorrido de estructuras de datos como árboles y grafos. Estos problemas, aunque también pueden resolverse de forma iterativa, suelen volverse mucho más complejos de implementar sin recursión. En cambio, la recursividad permite expresar la solución de manera más directa, legible y elegante.

¿Cuándo usar recursividad?
  • 🔁 El problema puede dividirse en subproblemas del mismo tipo.
    Por ejemplo, para calcular el factorial de un número n, basta con multiplicar n por el factorial de n - 1, lo cual es el mismo tipo de operación en una escala menor.

  • El número de pasos no es fijo o no se conoce de antemano.
    En problemas como el recorrido de un árbol binario o la búsqueda de soluciones en un laberinto, la profundidad del proceso depende de los datos y no se puede predecir fácilmente.

  • 🔍 La solución iterativa es mucho más compleja o menos clara.
    Algunos algoritmos, como los de recorrido en profundidad (DFS) o ciertos algoritmos de generación de combinaciones o particiones, son significativamente más sencillos de expresar con recursividad.

  • 📐 Existe una definición matemática recursiva.
    Cuando el propio problema ya está formulado de manera recursiva (como Fibonacci o Torres de Hanoi), implementarlo recursivamente suele ser más directo y natural.

Limitaciones y problemas de la recursividad

Aunque la recursividad puede ser una herramienta muy poderosa, no siempre es la mejor opción. Tiene algunas limitaciones importantes que es necesario conocer:

  • Mayor uso de memoria:
    Cada llamada recursiva se guarda en la pila de ejecución del programa. Si se hacen demasiadas llamadas (por ejemplo, en una recursión profunda sin optimización), puede provocar un error de desbordamiento de pila (stack overflow).

  • Posibilidad de recursión infinita:
    Si no se define correctamente un caso base, o si las llamadas no se acercan a ese caso, la función nunca termina y se ejecuta indefinidamente.

  • Rendimiento lento en algunos casos:
    Algunas funciones recursivas, como la versión clásica de Fibonacci, recalculan muchas veces los mismos valores, lo que las hace ineficientes si no se aplican técnicas como memorización o programación dinámica.

  • Mayor dificultad para depurar y encontrar errores:
    El seguimiento de errores puede ser más complicado en funciones recursivas, ya que hay muchas llamadas apiladas y el flujo del programa no es tan lineal como en una versión iterativa.

9. Operaciones de entrada y salida de datos

Una de las habilidades fundamentales al empezar a programar es aprender cómo interactuar con el usuario, ya sea para pedir datos o para mostrar resultados. Estas acciones se conocen como operaciones de entrada y salida de datos.

Entrada de datos

La entrada de datos permite que el usuario proporcione información al programa. En pseudocódigo, la instrucción más común para esto es:

  • Leer (o Leer nombreVariable)

Esta instrucción pausa la ejecución del algoritmo y espera que el usuario introduzca un valor, el cual se guarda en la variable indicada.

pseudocodigo.txt
Algoritmo EntradaEjemplo
Definir edad Como Entero;
Escribir "Introduce tu edad:";
Leer edad;
FinAlgoritmo

En este ejemplo, el programa pide al usuario su edad y la guarda en la variable edad.

Salida de datos

La salida de datos permite mostrar información al usuario, enviarla a un fichero u otros dispositivos. La instrucción utilizada para ello es:

  • Escribir (o Escribir expresión)

Puedes mostrar texto, el valor de una variable o el resultado de una operación.

pseudocodigo.txt
Algoritmo SalidaEjemplo
Definir nombre Como Cadena;
nombre ← "Lucía";
Escribir "Bienvenida, ", nombre;
FinAlgoritmo

Este ejemplo muestra un saludo personalizado, uniendo un texto fijo con el contenido de una variable.

En algunos contextos, es posible encontrar una instrucción específica para mostrar información por pantalla, normalmente utilizando la palabra clave Imprimir.

Esto no significa que se envíe un documento a la impresora, sino que los datos indicados se visualizarán en pantalla, generalmente en la consola o salida estándar del programa.

Lo más habitual es que entrada y salida se usen juntas para construir programas interactivos.

pseudocodigo.txt
Algoritmo EntradaSalida
Definir nombre Como Cadena;
Escribir "¿Cómo te llamas?";
Leer nombre;
Escribir "¡Hola, ", nombre, "!";
FinAlgoritmo

10. Herramientas para trabajar con pseudocódigo

PSeInt (acrónimo de “PSeudo Intérprete”) es una aplicación educativa creada con el objetivo de ayudar a estudiantes a desarrollar la lógica algorítmica utilizando pseudocódigo. Se trata de un entorno sencillo, intuitivo y en español, lo que lo convierte en una opción válida para quienes se inician en este campo.

Características

  • Editor de pseudocódigo con sugerencias y coloreado de sintaxis.
  • Simulador paso a paso, ideal para comprender el flujo de ejecución de los algoritmos.
  • Detección de errores comunes y sugerencias para corregirlos.
  • Conversión automática a otros lenguajes de programación, como Python, Java, JavaScript o C#, para visualizar cómo se implementaría un algoritmo en un lenguaje real.
  • Soporte para diagramas de flujo, lo que permite representar visualmente la lógica antes de codificarla.

PSeInt permite escribir, simular y validar pseudocódigo de forma sencilla, ayudando a entender la lógica de programación sin preocuparse por la sintaxis estricta de un lenguaje específico. Además, incluye otras funcionalidades que permiten transformar pseudocódigo a un lenguaje de programación concreto.

PseInt

Se puede descargar desde su sitio oficial: 👉 https://pseint.sourceforge.net/

11. Ejercicios

Ejercicio 1: Operaciones Básicas

Declara tres variables numéricas: a, b y resultado. Pide al usuario que introduzca los valores de a y b, y luego muestra en pantalla la suma, resta y multiplicacion de ambos.

Ejercicio 2: Operaciones para la figura de un círculo

Define una constante llamada PI. Pide al usuario que introduzca el radio de un círculo y calcula su área utilizando la fórmula área = PI * radio².

Ejercicio 3: Control de mayoría de edad

Pide al usuario una edad y muestra un mensaje que indique si es mayor de edad o no.

Ejercicio 4: Login

Pide al usuario una contraseña y verifica si coincide con la cadena “1234”. Repite la solicitud hasta que acierte.

Ejercicio 5: Cuadrado de un número

Crea una función llamada Cuadrado que reciba un número y devuelva su cuadrado. Luego, en el algoritmo principal, pide un número al usuario, llama a la función y muestra el resultado.

Ejercicio 6: Saludar Usuario

Define un procedimiento llamado SaludarUsuario que pida el nombre del usuario y lo salude. Llama al procedimiento desde el algoritmo principal.

Ejercicio 7: Lista de frutas

Crea un vector llamado frutas con espacio para 5 elementos. Pide al usuario que introduzca los nombres de 5 frutas y luego muestra la lista completa.

Ejercicio 8: Tabla de multiplicar por 5

Crea una matriz de 10x5 que represente la tabla de multiplicar del 1 al 10. En cada fila se guardará la operación a multiplicar, de la siguiente forma:

| 1 | x | 5 | = | 5 |
| 2 | x | 5 | = | 10 |
| 3 | x | 5 | = | 15 |
...

Muestra la tabla completa en pantalla.

🧠 Estos ejercicios son solo una pequeña introducción. Para dominar la lógica de programación, es fundamental seguir practicando de forma constante.

🛠️ Puedes encontrar más actividades para desarrollar tus habilidades en el siguiente enlace: 👉ejercicios👈