15 — SubProcesos y Funciones


Disponibilidad

Los SubProcesos están disponibles desde la versión 20121010 (octubre 2012). Permiten modularizar el código agrupando instrucciones bajo un nombre reutilizable, evitando la repetición y mejorando la legibilidad.


Tipos de SubProcesos

TipoDescripciónUso
ProcedimientoNo retorna ningún valorSe llama como una instrucción
FunciónRetorna un valorSe usa como operando en una expresión

Declaración — Procedimiento (sin retorno)

SubProceso NombreDelSubProceso(param1, param2, ...)
    <instrucciones>
FinSubProceso
// Sin parámetros
SubProceso Saludar
    Escribir "¡Hola mundo!";
FinSubProceso

// Con parámetros
SubProceso MostrarNombre(nombre, apellido)
    Escribir "Nombre: ", nombre, " ", apellido;
FinSubProceso

Declaración — Función (con retorno)

SubProceso resultado <- NombreDeLaFuncion(param1, param2, ...)
    <instrucciones>
    resultado <- <valor a retornar>;
FinSubProceso
// Función que retorna el doble de un número
SubProceso res <- Doble(num)
    res <- num * 2;
FinSubProceso

// Función que retorna si un número es par
SubProceso resultado <- EsPar(n)
    resultado <- (n MOD 2 = 0);
FinSubProceso

Ubicación de los SubProcesos

Los SubProcesos van fuera y antes del proceso principal

// ✅ CORRECTO — SubProceso antes del Proceso
SubProceso Saludar
    Escribir "Hola";
FinSubProceso

Proceso Principal
    Saludar;
FinProceso
// ❌ INCORRECTO — SubProceso dentro del Proceso
Proceso Principal
    SubProceso Saludar       // ERROR
        Escribir "Hola";
    FinSubProceso
FinProceso

Llamada a SubProcesos

Proceso Principal
    Definir x Como Entero;
    Leer x;

    // Llamada a procedimiento (sin paréntesis si no hay args)
    Saludar;
    MostrarNombre("Alex", "Carrillo");

    // Llamada a función (como operando en expresión)
    Escribir "El doble de ", x, " es ", Doble(x);

    // Almacenar resultado
    Definir par Como Logico;
    par <- EsPar(x);
    Si par Entonces
        Escribir x, " es par";
    FinSi;
FinProceso

Pasaje de parámetros

Por Valor (predeterminado para variables simples)

La función trabaja con una copia — los cambios no afectan la variable original:

SubProceso Duplicar(num Por Valor)
    num <- num * 2;    // solo cambia la copia local
FinSubProceso

Proceso Test
    Definir x Como Entero;
    x <- 5;
    Duplicar(x);
    Escribir x;    // sigue siendo 5
FinProceso

Por Referencia (predeterminado para arreglos)

La función trabaja con la variable original — los cambios sí la afectan:

SubProceso Triplicar(num Por Referencia)
    num <- num * 3;    // modifica la variable original
FinSubProceso

Proceso Test
    Definir x Como Entero;
    x <- 5;
    Triplicar(x);
    Escribir x;    // ahora es 15
FinProceso

Regla de pasaje por defecto

  • Variables simples → por valor (si no se especifica)
  • Arreglospor referencia (siempre)

Ejemplo completo con múltiples SubProcesos

// Subproceso: verificar si es primo
SubProceso resultado <- EsPrimo(n)
    Definir divisores, i Como Entero;
    divisores <- 0;
    Para i <- 1 Hasta n Hacer
        Si n MOD i = 0 Entonces
            divisores <- divisores + 1;
        FinSi;
    FinPara;
    resultado <- divisores <= 2;
FinSubProceso

// Subproceso: mostrar línea decorativa
SubProceso LineSeparadora(caracter, cantidad)
    Definir i Como Entero;
    Para i <- 1 Hasta cantidad Hacer
        Escribir Sin Saltar caracter;
    FinPara;
    Escribir "";
FinSubProceso

// Proceso principal
Proceso PrimosDel1Al50
    Definir n Como Entero;
    LineSeparadora("=", 30);
    Escribir "Números primos del 1 al 50:";
    LineSeparadora("=", 30);
    Para n <- 1 Hasta 50 Hacer
        Si EsPrimo(n) Entonces
            Escribir Sin Saltar n, "  ";
        FinSi;
    FinPara;
    Escribir "";
FinProceso

Recursividad

Un SubProceso puede llamarse a sí mismo — esto se llama recursividad:

// Factorial recursivo
SubProceso resultado <- Factorial(n)
    Si n <= 1 Entonces
        resultado <- 1;
    SiNo
        resultado <- n * Factorial(n - 1);
    FinSi;
FinSubProceso

// Torres de Hanoi recursivo
SubProceso Hanoi(n, origen, destino, auxiliar)
    Si n > 0 Entonces
        Hanoi(n-1, origen, auxiliar, destino);
        Escribir "Mover disco ", n, " de ", origen, " a ", destino;
        Hanoi(n-1, auxiliar, destino, origen);
    FinSi;
FinSubProceso

Proceso TestRecursion
    Escribir "5! = ", Factorial(5);           // 120
    Escribir "";
    Escribir "Torres de Hanoi con 3 discos:";
    Hanoi(3, "A", "C", "B");
FinProceso

Cuidado con la recursividad

Toda función recursiva debe tener un caso base (condición de parada) que detenga las llamadas. Sin él, el programa generará un error de desbordamiento de pila.


Sinónimos aceptados

EstándarSinónimos
SubProcesoSubproceso, Funcion, SubAlgoritmo
FinSubProcesoFinSubproceso, FinFuncion, FinSubAlgoritmo

Relación con otros temas


Creado con Quartz v4.5.2 © 2026 | Contribución: Alexis Carrillo | Círculo Interno • EvoClub