19 de junio de 2017

Pseudo código.

   El pseudo código es un tipo de notación algorítmica en el que se utiliza texto. Es un lenguaje artificial de especificación de algoritmos, caracterizado por:
  1. Mantener una sangría conveniente para la fácil identificación de los elementos que lo componen.
  2. Permitir la declaración de los datos (constantes y/o variables) manipulados por el algoritmo.
  3. Disponer de un conjunto pequeño y completo de palabras reservadas. Las palabras reservadas son propias del lenguaje artificial y no pueden ser utilizadas como identificadores de variables o módulos. Las palabras reservadas se muestran en negritas en la descripción de las estructuras de control correspondientes.
   El pseudo código se concibió para superar las dos principales desventajas del diagrama de flujo:
  1. Lento de crear.
  2. Difícil de modificar.
   A pesar de esto, los diagramas de flujo son una excelente herramienta para el seguimiento del flujo de un algoritmo, así como para transformar con relativa facilidad dichos algoritmos en programas.

Estructuras de control.
   Esta sección describe brevemente en su representación en pseudo código las estructuras de control. Todas las estructuras de control enunciadas siguen las mismas características descritas con anterioridad en las entradas correspondientes de Algoritmos (panorama general) y Algoritmos (definición y conceptos), por lo que se recomienda su revisión.

   Estructura secuencial.
   La siguiente lista de sentencias ilustra la representación en pseudo código de la estructura de control secuencial:

                                                       <Sentencia 1>
                                                       <Sentencia 2>
                                                                  .
                                                                  .
                                                                  .
                                                       <Sentencia n>
Estructura secuencial en pseudo código.

    Es claro que el orden en que se ejecutan o procesan las sentencias es el orden natural en el que aparecen: de izquierda a derecha y de arriba hacia abajo, exactamente de la misma forma en la que leemos un texto.
 
   Estructuras de selección.
   Las estructuras de selección simple, doble y múltiple se muestran a continuación. La condición debe tener una naturaleza de carácter booleano, es decir, que la condición pueda ser evaluada sin ambigüedad como verdadera o falsa:

                                                  if (condición)
                                                         <Sentencia(s)>

Estructura de selección simple (if) en pseudo código.

    Si condición es verdadera, se procesan el grupo de Sentencias (puede ser una o varias) correspondiente, si es falsa, se ignora.
 
                                                  if (condición)
                                                         <Sentencia(s) 1>
                                                  else
                                                         <Sentencia(s) 2>
Estructura de selección doble (if-else) en pseudo código.
 
    Para la estructura de control if-else, si condición es verdadera, se procesan el grupo de Sentencias 1 (puede ser una o varias) correspondiente, si es falsa, se procesan el grupo de Sentencias 2. 

                                                  if (condición 1)
                                                         <Sentencia(s) 1>
                                                  else if (condición 2)
                                                         <Sentencia(s) 2>
                                                  else if (condición 3)
                                                         <Sentencia(s) 3>
                                                                      .
                                                                      .
                                                                      .
                                                  else
                                                         <Sentencia(s) n + 1>

Estructura de selección múltiple anidada (if-else) en pseudo código.

    La estructura de control if-else se puede anidar, permitiendo con ello una mayor versatilidad, así por ejemplo, si condición 1 es verdadera, se procesan el grupo de Sentencias 1 (puede ser una o varias) y se ignoran todas las demás; si es falsa se evalúa la condición 2 y, si es verdadera, se procesan el grupo de Sentencias 2 y se ignoran todas las restantes y así sucesivamente con todas las condiciones y sentencias que existan.
    El último else es opcional. Si existe y ninguna de las condiciones anteriores fue verdadera, entonces se procesa el grupo de Sentencias n + 1.

                                                switch (indicador)
                                                        case <valor 1>:
                                                                <Sentencia(s) 1>
                                                        case <valor 2>:
                                                                <Sentencia(s) 2>
                                                                      .
                                                                      .
                                                                      .
                                                        case <valor n>:
                                                                <Sentencia(s) n>
                                                        default:
                                                                <Sentencia(s) n + 1>

Estructura de selección múltiple (switch-case) en pseudo código.

    La estructura de selección múltiple switch-case es un caso particular de selección múltiple anidada if-else. En ella, el indicador se evalúa y se compara con alguno de los valores (valor 1, valor 2, ..., valor n) para que, se coincide con alguno de ellos, se procese el grupo de Sentencias correspondiente.
    El default y su grupo de sentencias asociado es opcional. Si existe, y el indicador no coincidió con ninguno de los valores propuestos por los case, entonces se procesa el grupo de Sentencias n + 1.
 
    Estructuras de repetición.
   Finalmente, las estructuras de repetición “mientras” (while) y “hacer mientras” (do-while), son presentadas a continuación:


                                                   while (condición)
                                                         <Sentencia(s)>
                                                   end while

Estructura de repetición mientras (while) en pseudo código.
 
    En la estructura de repetición while, mientras la condición sea verdadera se procesará el grupo de Sentencias correspondiente. Una vez que la condición sea falsa, se ejecutará la primera sentencia que aparezca después del end while continuando el flujo de control secuencial a partir de ahí.

                                                   do
                                                         <Sentencia(s)>
                                                   while (condición)

Estructura de repetición hacer-mientras (do-while) en pseudo código.

       En la estructura de repetición do-while, mientras la condición sea verdadera se procesará el grupo de Sentencias correspondiente. Una vez que la condición sea falsa, se ejecutará la primera sentencia que aparezca después del while continuando el flujo de control secuencial a partir de ahí.
   
    Observe que la descripción y el funcionamiento de la estructura do-while es similar al de la estructura while, con la diferencia de que la expresión en el ciclo while es evaluada al principio, mientras que en el ciclo do-while es evaluada al final. Con base en lo anterior se tiene que:
  • Las sentencias de la estructura de repetición while se repiten de 0 a n-veces.
  • Las sentencias de la estructura de repetición do-while se repiten de 1 a n-veces.
   En esencia, esta es la única diferencia que existe entre las estructuras de repetición while y do-while. No pierda de vista esta simple pero fundamental diferencia.

   Pseudocódigo del algoritmo de Euclides.
   Esta sección muestra el pseudocódigo para el problema propuesto en la sección Algoritmo de Euclides: definición del problema de la entrada Algoritmos (definición y conceptos), por lo que convendría revisarla para tener una mejor comprensión del algoritmo.

   Se deja como ejercicio al lector el comparar el siguiente algoritmo en pseudo código con el de la sección Diagrama de flujo del algoritmo de Euclides de la entrada Diagramas de flujo.

                Algoritmo MCD
                    Inicio
                               Variables
                                          m, n, r de tipo entero

                               obtener (m, n)

                               r = m mod n

                               while (r != 0)
                                          m = n
                                          n = r
                                          r = m mod n
                               end while

                               imprimir (n)
                    Fin
Algoritmo de Euclides en pseudo código.