domingo, 17 de julio de 2011

PSEUDOCÓDIGO

El pseudocódigo (o falso lenguaje) es utilizado por programadores para describir algoritmos en un lenguaje humano simplificado que no es dependiente de ningún lenguaje de programación. Por este motivo puede ser implementado en cualquiera lenguaje por cualquier programador que utilice el pseudocódigo.


CARACTERÍSTICAS Y PARTES 



Las principales características de este lenguaje son:
  1. Se puede ejecutar en un ordenador
  2. Es una forma de representación sencilla de utilizar y de manipular.
  3. Facilita el paso del programa al lenguaje de programación.
  4. Es independiente del lenguaje de programación que se vaya a utilizar.
  5. Es un método que facilita la programación y solución al algoritmo del programa.
Todo documento en pseudocódigo debe permitir la descripción de:
  1. Instrucciones primitivas.
  2. Instrucciones de proceso.
  3. Instrucciones de control.
  4. Instrucciones compuestas.
  5. Instrucciones de descripción.
Estructura a seguir en su realización:
  1. Cabecera.
    1. Programa.
    2. Modulo.
    3. Tipos de datos.
    4. Constantes.
    5. Variables.
  2. Cuerpo.
    1. Inicio.
    2. Instrucciones.
    3. Fin.


 ESTRUCTURAS DE CONTROL


En la redacción del pseudocódigo se utiliza tres tipos de estructuras de control: las secuenciales, las selectivas y las iterativas.

Estructuras secuenciales

Las instrucciones se siguen en una secuencia fija que normalmente viene dada por el número de renglón. Es decir que las instrucciones se ejecutan de arriba hacia abajo. Las instrucciones se ejecutan dependiendo de la condición dada dentro del algoritmo.


   { \color{Blue}  \mathit{ instrucci \acute{o} n_1 }}

   { \color{Blue}  \mathit{ instrucci \acute{o} n_2 }}

   { \color{Blue}  \mathit{ instrucci \acute{o} n_3 }}

   \cdots

   { \color{Blue}  \mathit{ instrucci \acute{o} n_n }}


Estructuras selectivas

Las instrucciones selectivas representan instrucciones que eden o no ejecutarse, según el cumplimiento de una condición.
Diagrama de flujo que muestra el funcionamiento de la instrucción condicional.



   { \color{Sepia} \mathit{ si }} \;
   { \color{Green} \mathit{ condici \acute{o} n }} \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; si }}
La condición es una expresión booleana. Instrucciones es ejecutada sólo si la condición es verdadera.


Selectiva doble (alternativa)

La instrucción selectiva realiza una instrucción de dos posibles, según el cumplimiento de una condición.
Diagrama de flujo que muestra el funcionamiento de la instrucción condicional.




   { \color{Sepia} \mathit{ si }} \;
   { \color{Green} \mathit{ condici \acute{o} n }} \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Blue}  \mathit{ instrucciones_1 }}

   { \color{Sepia} \mathit{ si \; no \; entonces }}

   { \color{Blue}  \mathit{ instrucciones_2 }}

   { \color{Sepia} \mathit{ fin \; si }}
La condición es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso). Si esta condición es cierta se ejecutaInstrucciones1, si no es así, entonces se ejecuta Instrucciones2.

[]Selectiva múltiple

También es común el uso de una selección múltiple que equivaldría a anidar varias funciones de selección.



   { \color{Sepia} \mathit{ si }} \;
   { \color{Green} \mathit{ condici \acute{o} n_1 }} \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Blue}  \mathit{ instrucciones_1 }}

   { \color{Sepia} \mathit{ si \; no \; si }} \;
   { \color{Green} \mathit{ condici \acute{o} n_2 }} \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Blue}  \mathit{ instrucciones_2 }}

   { \color{Sepia} \mathit{ si \; no \; si }} \;
   { \color{Green} \mathit{ condici \acute{o} n_3 }} \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Blue}  \mathit{ instrucciones_3 }}

   \cdots

   { \color{Sepia} \mathit{ si \; no \; entonces }}

   { \color{Blue}  \mathit{ instrucciones_n }}

   { \color{Sepia} \mathit{ fin \; si }}
En este caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, si una de ellas se cumple las demás tienen que ser falsas necesariamente, hay un caso si noque será cierto cuando las demás condiciones sean falsas.
En esta estructura si Condición1 es cierta, entonces se ejecuta sólo Instrucciones. En general, si Condicióni es verdadera, entonces sólo se ejecuta Instruccionesi


Selectiva múltiple-Casos

Una construcción similar a la anterior (equivalente en algunos casos) es la que se muestra a continuación.



   { \color{Sepia} \mathit{ seleccionar }} \;
   { \color{Green} \mathit{ indicador }}

  { \color{Sepia} \mathit{ caso }} \; 
  { \color{Green} \mathit{ valor_1 }}

  { \color{Blue}  \mathit{ instrucciones_1 }}

  { \color{Sepia} \mathit{ caso }} \; 
  { \color{Green} \mathit{ valor_2 }}

  { \color{Blue}  \mathit{ instrucciones_2 }}

  { \color{Sepia} \mathit{ caso }} \; 
  { \color{Green} \mathit{ valor_3 }}

  { \color{Blue}  \mathit{ instrucciones_3 }}

  \cdots

  { \color{Sepia} \mathit{ en \; otro \; caso}}
Estructuras iterativas
En este caso hay un Indicador es una variable o una función cuyo valor es comparado en cada caso con los valores "Valori", si en algún caso coinciden ambos valores, entonces se ejecutarán las Instruccionesi correspondientes. La sección en otro caso es análoga a la sección si no del ejemplo anterior.


Las instrucciones iterativas representan la ejecución de instrucciones en más de una vez.

]Bucle mientras

El bucle se repite mientras la condición sea cierta, si al llegar por primera vez al bucle mientras la condición es falsa, el cuerpo del bucle no se ejecuta ninguna vez.
Diagrama de flujo que muestra el funcionamiento de la instrucciónmientras



   { \color{Sepia} \mathit{ mientras }} \;
   { \color{Green} \mathit{ condici \acute{o} n }} \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; mientras }}

]Bucle repetir

Existen otras variantes que se derivan a partir de la anterior. La estructura de control repetir se utiliza cuando es necesario que el cuerpo del bucle se ejecuten al menos una vez y hasta que se cumpla la condición:


   { \color{Sepia} \mathit{ repetir }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ hasta \; que }} \;
   { \color{Green} \mathit{ condici \acute{o} n }}
La estructura anterior equivaldría a escribir:


   { \color{Blue} \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ mientras }} \;
   { \color{Blue}  \mathit{ \neg }}
   (
      { \color{Green} \mathit{ condici \acute{o} n }}
   ) \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; mientras }}


Bucle para

Una estructura de control muy común es el ciclo para, la cual se usa cuando se desea iterar un número conocido de veces, empleando como índice una variable que se incrementa (o decrementa):


   { \color{Sepia} \mathit{ para }} \;
   { \color{Green} \mathit{ i}} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ x}} \;
   { \color{Sepia} \mathit{ hasta }} \;
   { \color{Green} \mathit{ n}} \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; para }}
la cual se define como:


   { \color{Green} \mathit{ i}} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ x}}

   { \color{Sepia} \mathit{ mientras }} \;
   { \color{Green} \mathit{ i }} \;
   { \color{Blue}  \mathit{ \leq }} \;
   { \color{Green} \mathit{ n }} \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Green} \mathit{ i}} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ i }} \;
   { \color{Blue}  \mathit{ + }} \;
   { \color{Green} \mathit{ 1}}

   { \color{Sepia} \mathit{ fin \; mientras }}

Bucle para cada

Por último, también es común usar la estructura de control para cada. Esta sentencia se usa cuando se tiene una lista o un conjunto L y se quiere iterar por cada uno de sus elementos:


   { \color{Sepia} \mathit{ para \; cada }} \;
   { \color{Green} \mathit{ x }} \;
   { \color{Blue}  \mathit{ \in }} \;
   { \color{Green} \mathit{ L }} \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; para \; cada }}
Si asumimos que los elementos de L son L_0,L_1,\dots,L_n, entonces esta sentencia equivaldría a:


   { \color{Sepia} \mathit{ para }} \;
   { \color{Green} \mathit{ i}} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ 0}} \;
   { \color{Sepia} \mathit{ hasta }} \;
   { \color{Green} \mathit{ n}} \;
   { \color{Sepia} \mathit{ hacer }}

   { \color{Green} \mathit{ x }} \;
   { \color{Blue}  \mathit{ \gets}} \;
   { \color{Green} \mathit{ L_i }}

   { \color{Blue}  \mathit{ instrucciones }}

   { \color{Sepia} \mathit{ fin \; para }}
Sin embargo, en la práctica existen mejores formas de implementar esta instrucción dependiendo del problema.
Es importante recalcar que el pseudocódigo no es un lenguaje estandarizado. Eso significa que diferentes autores podrían dar otras estructuras de control o bien usar estas mismas estructuras, pero con una notación diferente. Sin embargo, las funciones matemáticas y lógicas toman el significado usual que tienen en matemática y lógica, con las mismas expresiones.


El anidamiento

Cualquier instrucción puede ser sustituida por una estructura de control. El siguiente ejemplo muestra el pseudocódigo del ordenamiento de burbuja, que tiene varias estructuras anidadas. Este algoritmo ordena de menor a mayor los elementos de una lista L.

\begin{array}{l}
{ \color{Sepia} procedimiento } \;
{ \color{BlueViolet} Ordenar } \; (
{ \color{OliveGreen} L} \; ) \\
 \left \updownarrow
 \begin{array}{l}
 { \color{Gray} // Comentario: \; L=(L_1,L_2,\dots,L_n) \; es \; una \; lista \; con \; n \; elementos // } \\
 { \color{OliveGreen} k } \;
 { \color{BlueViolet} \gets } \;
 { \color{OliveGreen} 0} \\
 { \color{Sepia} repetir } \\
 \left \updownarrow
 \begin{array}{l}
 { \color{OliveGreen} intercambio } \;
 { \color{BlueViolet} \gets } \;
 { \color{OliveGreen} falso} \\
 { \color{OliveGreen} k } \;
 { \color{BlueViolet} \gets } \;
 { \color{OliveGreen} k + 1} \\
 { \color{Sepia} para } \;
 { \color{OliveGreen} i} \;
 { \color{BlueViolet} \gets } \;
 { \color{OliveGreen} 1} \;
 { \color{Sepia} hasta } \;
 { \color{OliveGreen} n - k} \;
 { \color{Sepia} hacer } \\
 \left \updownarrow
 \begin{array}{l}
 { \color{Sepia} si } \;
 { \color{OliveGreen} L_i>L_{i+1} } \;
 { \color{Sepia} entonces } \; \\
 \left \updownarrow
 \begin{array}{l}
 { \color{BlueViolet} intercambiar } \; (
 { \color{OliveGreen} L_i , L_{i+1} } \; ) \\
 { \color{OliveGreen} intercambio } \;
 { \color{BlueViolet} \gets } \;
 { \color{OliveGreen} verdadero} 
 \end{array}
 \right . \\
 { \color{Sepia} fin \; si } \; \\
 \end{array}
 \right . \\
 { \color{Sepia} fin \; para } \\
 \end{array}
 \right . \\
{ \color{Sepia} hasta \; que } \;
{ \color{OliveGreen} intercambio \, = \, falso } \\
\end{array}
\right . \\
{ \color{Sepia} fin \; procedimiento } \; \\
\end{array}
En general, las estructuras anidadas se muestran indentadas, para hacer más sencilla su identificación a simple vista. En el ejemplo, además de la indentación, se ha conectado con flechas los pares de delimitadores de cada nivel de anidamiento.





No hay comentarios:

Publicar un comentario