2. Estructuras de Control

Las estructuras de control señalan el orden en que tienen que sucederse los pasos de un algoritmo. Todo algoritmo estructurado puede ser escrito utilizando solamente tres tipos de estructura de control.

2.1. Estructura Secuencial

Una acción (instrucción) sigue a otra en secuencia. La salida de una es la entrada de la siguiente.

ACCION Ejemplo1 ES
AMBIENTE
    a, doble: entero
PROCESO
    ESCRIBIR("Ingrese el número")
    LEER(a)
    doble := a * 2
    ESCRIBIR("Resultado ->", doble)
FIN_ACCION

2.2. Estructura Condicional

Se utilizan para tomar decisiones lógicas.

2.2.1. Condicional Alternativo Simple (SI)

Si se verifica una condición, se ejecuta una serie de instrucciones.

SI <condición> ENTONCES
    <acciones_si_verdadero>
FIN_SI

// Ejemplo
ACCION Ejemplo2 ES
AMBIENTE
    a: entero
PROCESO
    ESC("Ingrese el número")
    LEER(a)
    SI a > 0 ENTONCES
        ESCRIBIR("El nro. es positivo")
    FIN_SI
FIN_ACCION

2.2.2. Condicional Alternativo Doble (SI-SINO)

Si se verifica una condición, se ejecuta un bloque; si no, se ejecuta otro.

SI <condición> ENTONCES
    <acciones_si_verdadero>
SINO
    <acciones_si_falso>
FIN_SI

// Ejemplo
ACCION Ejemplo3 ES
AMBIENTE
    A, B: ENTERO
PROCESO
    ESC("Ingrese el primer número"), LEER(A)
    ESC("Ingrese el segundo número"), LEER(B)
    SI A > B ENTONCES
        ESC(A, "es mayor que ", B)
    SINO
        ESC(A, "NO es mayor que ", B)
    FIN_SI
FIN_ACCION

2.2.3. Condicional Alternativo Múltiple (SEGÚN)

Permite evaluar una variable que puede tomar múltiples valores y ejecutar diferentes acciones para cada uno.

SEGÚN <variable_o_expresion> HACER
    <valor1>: <acciones_para_valor1>
    <valor2>: <acciones_para_valor2>
    ...
    <otro_caso>: <acciones_por_defecto> // Opcional
FIN_SEGUN

// Ejemplo
ACCION EJEMPLO4 ES
AMBIENTE
    a, b, suma: entero
PROCESO
    ESC("Ingrese el primer número"), LEER(a)
    ESC ("Ingrese el segundo número"),LEER(b)
    suma := a + b
    SEGÚN suma HACER
        =0 : ESC("El resultado es igual a 0")
        <0: ESC("El resultado es menor a 0")
        >0: ESC("El resultado es mayor a 0")
    FIN_SEGUN
FIN_ACCION

2.3. Estructuras Repetitivas (Bucles)

Repiten una secuencia de instrucciones un número determinado o indeterminado de veces. Cada repetición se llama iteración.

2.3.1. Estructura PRE-TEST (MIENTRAS)

El cuerpo del bucle se repite mientras una condición sea verdadera. La condición se evalúa antes de cada iteración. Puede ejecutarse 0 o más veces.

MIENTRAS <condición> HACER
    <acciones_del_bucle>
FIN_MIENTRAS

// Ejemplo: Suma de números entre 1 y N
ACCION BUCLE1_MIENTRAS ES
AMBIENTE
    n, suma, cont: entero
PROCESO
    ESCRIBIR("Ingrese el numero"), LEER(n)
    suma := 0
    cont := 1
    MIENTRAS cont <= n HACER
        suma := suma + cont
        cont := cont + 1
    FIN_MIENTRAS
    ESCRIBIR("La suma es: ", suma)
FIN_ACCION

2.3.2. Estructura POST-TEST (REPETIR)

El cuerpo del bucle se ejecuta al menos una vez, y se repite hasta que una condición sea verdadera. La condición se evalúa después de cada iteración.

REPETIR
    <acciones_del_bucle>
HASTA QUE <condición>

// Ejemplo: Suma de números entre 1 y N
ACCION BUCLE1_REPETIR ES
AMBIENTE
    n, suma, cont: entero
PROCESO
    ESCRIBIR("Ingrese el numero"), LEER(n)
    suma := 0
    cont := 0 // o 1, ajustar lógica interna
    REPETIR
        cont := cont + 1 // Si cont inicia en 0
        suma := suma + cont
        // Si cont iniciara en 1, el orden podría ser suma, luego cont++
    HASTA QUE cont >= n // o suma >= n en el ejemplo original (que parece un error de lógica para sumar 1 a N)
                        // Para sumar de 1 a N, la condición de parada es sobre 'cont'
    ESCRIBIR("La suma es: ", suma)
FIN_ACCION

2.3.3. Estructura Manejada por Contador (PARA)

Es un ciclo definido, se conoce de antemano la cantidad de veces que se iterará.

PARA <variable_contador> := <valor_inicial> HASTA <valor_final> [INCREMENTO <paso>] HACER
    <acciones_del_bucle>
FIN_PARA

// Ejemplo: Suma de números entre 1 y N
ACCION BUCLE3_PARA ES
AMBIENTE
    n, suma, cont: entero
PROCESO
    ESCRIBIR("Ingrese el numero"), LEER(n)
    suma := 0
    PARA cont := 1 HASTA n HACER  // Incremento por defecto es 1
        suma := suma + cont
    FIN_PARA
    ESCRIBIR("La suma es: ", suma)
FIN_ACCION

2.4. Comparación entre Estructuras Repetitivas

Característica

PRE-TEST (MIENTRAS)

POST-TEST (REPETIR)

MANEJADO X CONT (PARA)

¿Se conoce N° iteraciones?

NO

NO

SI

Momento verificación condición

Antes de ejecutar cuerpo

Después de ejecutar cuerpo

Antes de ejecutar cuerpo

¿Puede no ejecutarse nunca?

SI (si condición es falsa al inicio)

NO (al menos una vez)

SI (si Vi > Vf y paso > 0)

¿Modificar valor condición en bucle?

SI (necesario para finalizar)

SI (necesario para finalizar)

NO (es automático)

¿Puede ser infinito?

SI

SI

NO (generalmente)

Cuándo usar

N° iteraciones indeterminado, puede no ejecutarse

N° iteraciones indeterminado, debe ejecutarse al menos una vez

N° iteraciones conocido por adelantado