informaticaPC

Teoría de la programación

Estructura del programa (II)

Estructuras de control

Todos los modernos lenguajes de programación disponen de estructuras de control de flujo necesarias para desarrollar un programa, pudiendo ser:

  • Condicionales o Selectivas:
    • Simples (SI ... FIN SI): usadas para comprobar si se debe ejecutar o no cierta parte del código fuente.
    • Dobles( SI ... SINO ... FIN SI): comprueba si se debe ejecutar entre una u otra porción de código.
    • Múltiples: (EN CASO DE ... FIN CASO): permite tener en cuenta varias condiciones para discernir qué parte del código fuente debe ser ejecutado a continuación.
  • Repetitivas o Iterativas: mediante el uso de bucles es posible repetir varias veces una porción de código fuente:

    • MIENTRAS: el contenido de este bucle se ejecutará una y otra vez mientras el resultado de una expresión lógica sea 'Verdadero'.
    • REPETIR ... HASTA: igual que el anterior, con la única diferencia de que el código se ejecutará al menos una vez.
    • DESDE ... HASTA: el bucle se ejecutará un determinado número de veces.
Información

Es posible anidar sentencias de control: puede haber por ejemplo una sentencia SI dentro de otra, una EN_CASO_DE dentro de una MIENTRAS, etc.

Información

Las variables creadas dentro de una sentencia de control existen y son visibles sólo dentro de ella.

Estructuras de control Condicionales o Selectivas

* Estructuras selectivas simples: para representarlas con algoritmos en pseudocódigo usaremos SI (condición) ... FIN_SI.

Ejemplo: pedir un número al usuario y mostrar el resultado de multiplicarlo por cien, sólo en caso de que sea mayor de 500:

ALGORITMO Numero;
VAR
    ENTERO num1;
INICIO
    ESCRIBIR("Dime un número");
    LEER( num1 );

    SI( num1 > 500 )
        num1 <- num1 * 100;
    FIN SI

    ESCRIBIR("El número es: ", num1);
FIN

* Estructuras selectivas dobles: se representan con SI (condición) ... SINO ... FIN_SI.

Ejemplo: pedir dos números al usuario y mostrar un mensaje informando de que el primero es igual o mayor que el segundo, o que el segundo es mayor que el primero, según cada caso:

ALGORITMO CualMayor;
VAR
    ENTERO num1, num2;
INICIO
    ESCRIBIR("Dime dos números");
    LEER( num1, num2 );

    SI( num1 >= num2 )
        ESCRIBIR("El primer número es mayor o igual que el segundo");
    SINO
        ESCRIBIR("El segundo número es mayor que el primero");
    FIN SI
FIN

Así pues, si el usuario introdujese 50 y 30 el programa mostraría "El primer número es mayor o igual que el segundo", y si fuesen 40 y 80 se mostraría "El segundo número es mayor que el primero".

* Estructuras selectivas múltiples: como hemos comentado anteriormente, las usaremos para seleccionar entre varias condiciones.

Ejemplo: pedir un número al usuario y mostrar si es cero, se encuentra entre 1 y 10 o entre 11 y 20, o bien si éste es mayor de 20:

ALGORITMO Multi1;
VAR
    ENTERO num1;
INICIO
    ESCRIBIR("Dime un número");
    LEER( num1 );

    SI( num1 == 0 )
        ESCRIBIR("Ha introducido un cero");
    SINO SI ( (num1 >= 1) AND (num1 <=10) )
        ESCRIBIR("El número está entre 1 y 10");
    SINO SI ( (num1 >= 11) AND (num1 <=20) )
        ESCRIBIR("El número está entre 11 y 20");
    SINO
        ESCRIBIR("El número no está entre cero y 20");
    FIN SI
FIN

También podemos usar EN CASO DE ... FIN CASO (en muchas situaciones es más conveniente usar esta instrucción):

ALGORITMO Multi2;
VAR
    ENTERO num1;
INICIO
    ESCRIBIR("Dime un número");
    LEER( num1 );

    EN_CASO_DE num1 HACER
        0:
            ESCRIBIR("Ha introducido un cero");
        1,2,3,4,5,6,7,8,9,10:
            ESCRIBIR("El número está entre 1 y 10");
        11,12,13,14,15,16,17,18,19,20:
            ESCRIBIR("El número está entre 11 y 20");
        EN_OTRO_CASO:
            ESCRIBIR("El número no está entre cero y 20");
    FIN CASO
FIN
Más información

Vea también: [ Ejemplos ]

Estructuras de control Repetitivas o Iterativas

Ejemplo: usando la sentencia MIENTRAS contar los números positivos que el usuario introduzca por teclado. El bucle se continuará ejecutando mientras no se introduzca cero o un número negativo:

ALGORITMO ContarNumeros_Mientras;
VAR
    ENTERO contador <- 0;
    ENTERO numero;
INICIO
    ESCRIBIR("Dame un número positivo: ");
    LEER( numero );

    MIENTRAS( numero > 0 ) HACER
        contador <- contador + 1;

        ESCRIBIR("Dame un número positivo: ");
        LEER( numero );
    FIN MIENTRAS

    ESCRIBIR("Has introducido ", contador, " números positivos");
FIN

EXPLICACIÓN: la primera vez se pide un número (fuera del bucle), y sólo en caso de que sea mayor de cero (positivo) se entrará en el bucle MIENTRAS, en el que se incrementará la variable auxiliar 'contador' (que previamente hemos inicializado a cero), y luego volvemos a pedir otro número (a partir de ahora desde el LEER() que está dentro del bucle): cada vez que se procese esta última línea de código fuente en el bucle se volverá al principio del mismo para volver a realizar la comprobación.

A continuación el mismo ejemplo, pero usando la sentencia REPETIR ... HASTA:

ALGORITMO ContarNumeros_Repetir;
VAR
    ENTERO contador <- 0;
    ENTERO numero;
INICIO
    REPETIR
        ESCRIBIR("Dame un número positivo: ");
        LEER( numero );

        SI( numero > 0 )
            contador <- contador + 1;
        FIN SI
    HASTA( numero <= 0 )

    ESCRIBIR("Has introducido", contador, " números positivos");
FIN

EXPLICACIÓN: tras inicializar la variable auxiliar 'contador' a cero entramos el bucle, en el que pedimos un número al usuario para a continuación, usando una sentencia condicional comprobar si es mayor de cero y en tal caso incrementar la variable 'contador' (en la que se irá registrando la cantidad de números positivos introducidos). Si por el contrario, el número es cero o negativo se saldrá del bucle y el programa finalizará tras mostrar la cantidad de números positivos introducidos por el usuario.

Finalmente, nos queda por ver la sentencia PARA, con la que podemos especificar el número de veces que debe repetirse un bucle.

Ejemplo: mostrar los números del 1 al 10, ordenados de menor a mayor:

ALGORITMO MostrarNumeros_Para;
VAR
    ENTERO contador;
INICIO
    PARA contador DESDE 1 HASTA 7
        ESCRIBIR( contador );
    FIN_PARA
FIN

Como hemos visto, en el bucle PARA se realiza por defecto un incremento de 1 cada vez que se procesa la primera línea del mismo, pero es posible definirlo usando la palabra INCREMENTO para determinar el deseado (pudiendo ser negativo).

Ejemplo: mostrar los números del 1 al 10, ordenados de mayor a menor:

ALGORITMO MostrarNumeros_Para;
VAR
    ENTERO contador;
INICIO
    PARA contador DESDE 7 HASTA 1 INCREMENTO -1
        ESCRIBIR( contador );
    FIN_PARA
FIN

Este tipo de bucle es usado principalmente para recorrer vectores o arrays.

Más información

Vea también: [ Ejemplos ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso