Pseudocódigo

Pseudocódigo

El ciencias de la computación, y análisis numérico el pseudocódigo (o falso lenguaje) es una descripción de un algoritmo de programación informático de alto nivel compacto e informal que utiliza las convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código de lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas que se documentan varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes de realizar la codificación efectivamente. No existe una sintaxis estándar para el pseudocódigo, aunque los dos programas que manejan pseudocódigo tengan su sintáxis propia. Aunque parecido, el pseudocódigo no debe confundirse con los programas esqueleto que incluyen código ficticio, que pueden ser compilados sin errores. Aunque los diagramas de flujo y UML sean más amplios en el papel, pueden ser considerados como una alternativa gráfica al pseudocódigo.

Contenido

Aplicación

Muchas veces, los libros de texto y publicaciones las científicas relacionadas con la informática y la computación numérica utilizan pseudocódigo en la descripción de algoritmos, de manera que todos los programadores puedan entender, aunque no todos conozcan el mismo lenguaje de programación. Por lo general, en los libros de texto, hay una explicación que acompaña la introducción que explica las convenciones particulares en uso. El nivel de detalle del pseudocódigo puede, en algunos casos, acercarse a la de formalizar los idiomas de propósito general.

Un programador que tiene que aplicar un algoritmo específico, sobre todo uno desfamiliarizado, generalmente comienza con una descripción en pseudocódigo, y luego "traduce" esa descripción en el lenguaje de programación meta y lo modifica para que interactúe correctamente con el resto del programa. Los programadores también pueden iniciar un proyecto describiendo la forma del código en pseudocódigo en el papel antes de escribirlo en su lenguaje de programación, como ocurre en la estructuración de un enfoque de Top-down y Bottom-up arriba hacia abajo.

Características y partes

Las principales características de este lenguaje son:

  1. Se puede ejecutar en un ordenador (con un IDE como por ejemplo B166ER o PSeInt)
  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. Módulo.
    3. Tipos de datos.
    4. Constantes.
    5. Variables.
  2. Cuerpo.
    1. Inicio.
    2. Instrucciones.
    3. Fin.

Definición de datos del pseudocódigo

La definición de datos se da por supuesta, sobre todo en las variables sencillas, si se emplea formaciones: pilas, colas, vectores o registros, se pueden definir en la cabecera del algoritmo, y naturalmente cuando empleemos el pseudocódigo para definir estructuras de datos, esta parte la desarrollaremos adecuadamente.

Funciones y operaciones

Cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por ejemplo, la instrucción "reemplace el valor de la variable x por el valor de la variable y" puede ser representado como:

  • asigne a x\, el valor de y\,

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

   { \color{Green} \mathit{ x }} \;
   { \color{Blue}  \mathit{ := }} \;
   { \color{Green} \mathit{ y }}

   { \color{Green} \mathit{ x }} \;
   { \color{Blue}  \mathit{ = }} \;
   { \color{Green} \mathit{ y }}

Las operaciones aritméticas se representan de la forma usual en matemáticas.


   { \color{Gray}  \mathit{ \{ Esto \; es \; un \; comentario \; normalmente \; matem \acute{a} tico \} }}

   { \color{Green} \mathit{ volumen }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Plum}  \mathit{ \pi }}
   { \color{Green} \mathit{ r }} {}^2
   { \color{Green} \mathit{ h }}

   { \color{Gray}  \mathit{ // y \; este \; es \; otro \; comentario \; normalmente \; de \; texto // }}

   { \color{Green} \mathit{ hipotenusa }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   \sqrt{
      { \color{Green} \mathit{ a }} {}^2 \;
      { \color{Blue}  \mathit{ + }} \;
      { \color{Green} \mathit{ b }} {}^2 \;
   }

   { \color{Green} \mathit{ resultado }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Tan}   \mathit{ sin }}
   (
      { \color{Green} \mathit{ a }}
   )

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 pueden 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 alternativa 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 ejecuta Instrucciones1, 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 no que será cierto cuando las demás condiciones sean falsas.

En esta estructura si Condición1 es cierta, entonces se ejecuta sólo Instrucciones1. 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{ Segun }} \;
   { \color{Green} \mathit{ variable }}
   { \color{Sepia} \mathit{ Hacer }}

  { \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{ De \; Otro \; Modo}}

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

  { \color{Sepia} \mathit{ Fin \; Segun }}

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.

Estructuras iterativas

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ón mientras

   { \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{ Con \; Paso }} \;
   { \color{Green} \mathit{ z}} \;
   { \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{ <= }} \;
   { \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{ z }}

   { \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{ Con \; Paso }} \;
   { \color{Green} \mathit{ 1}} \;
   { \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 }}

Que es lo mismo que:


   { \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.

Desarrollo de algoritmos

Con este pseudocódigo se puede desarrollar cualquier algoritmo que:

  • Tenga un único punto de inicio.
  • Tenga un número finito de posibles puntos de término.
  • Haya un número finito de caminos, entre el punto de inicio y los posibles puntos de término.

Funciones y procedimientos

Muchas personas prefieren distinguir entre funciones y procedimientos. Una función, al igual que una función matemática, recibe uno o varios valores de entrada y regresa una salida mientras que un procedimiento recibe una entrada y no genera ninguna salida aunque en algún caso podría devolver resultados a través de sus parámetros de entrada si estos se han declarado por referencia (ver formas de pasar argumentos a una función o procedimiento).

En ambos casos es necesario dejar en claro cuáles son las entradas para el algoritmo, esto se hace comúnmente colocando estos valores entre paréntesis al principio o bien declarándolo explícitamente con un enunciado. En el caso de las funciones, es necesario colocar una palabra como regresar o devolver para indicar cuál es la salida generada por el algoritmo. Por ejemplo, el pseudocódigo de una función que permite calcular an (un número a elevado a potencia n).


   { \color{Sepia} \mathit{ funci \acute{o} n }} \;
   { \color{Blue}  \mathit{ potencia }} \;
   (
      { \color{Green} \mathit{ a,n}}
   )

   { \color{Gray} \mathit{
      // Comentario: \; Este \; algoritmo \; calcula \; a^n \; con \;
      a \; y \; n \; n \acute{u} meros \; naturales // }}

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

   { \color{Green} \mathit{ r }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Plum}  \mathit{ 1}}

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

   { \color{Sepia} \mathit{ Mientras }} \;
   { \color{Green} \mathit{ i }} \;
   { \color{Blue}  \mathit{ > }} \;
   { \color{Plum}  \mathit{ 0 }} \;
   { \color{Sepia} \mathit{ Hacer }}

   { \color{Sepia} \mathit{ Si }} \;
   { \color{Green} \mathit{ i }} \;
   { \color{Sepia} \mathit{ % }} \;
   { \color{Plum}  \mathit{ 2}}
   { \color{Blue}  \mathit{ <> }} \;
   { \color{Plum}  \mathit{ 0}}
   { \color{Sepia} \mathit{ entonces }} \;
   { \color{Gray} \mathit{
      //\; Si \; i \; es \; impar, \; % \; es \; resto}}

   { \color{Green} \mathit{ r }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ r }} \;
   { \color{Blue}  \mathit{ * }} \;
   { \color{Green} \mathit{ x }}

   { \color{Sepia} \mathit{ Fin \; si }}

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

   { \color{Green} \mathit{ i }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ i }}
   { \color{Blue}  \mathit{ / }} \;
   { \color{Plum}  \mathit{ 2 }} \;

   { \color{Sepia} \mathit{ Fin \; Mientras }}

   { \color{Sepia} \mathit{ Escribir }} \;
   { \color{Green} \mathit{ r }}

   { \color{Sepia} \mathit{ Fin \; funci \acute{o} n }}

Un ejemplo de procedimiento seria el algoritmo de Ordenamiento de burbuja, por el que partiendo de una lista de valores estos se ordenan, nótese que en un procedimiento, no se calcula el valor de una función, sino que se realiza una acción, en este caso ordenar la lista.


   { \color{Sepia} \mathit{ procedimiento }} \;
   { \color{Blue}  \mathit{ DeLaBurbuja }} \; 
   (
      { \color{Green}  \mathit{ a }}
      { \color{Plum}   \mathit{ {}_0 }} ,
      { \color{Green}  \mathit{ a }}
      { \color{Plum}   \mathit{ {}_1 }} ,
      { \color{Green}  \mathit{ a }}
      { \color{Plum}   \mathit{ {}_2 }} ,
      \ldots,
      { \color{Green}  \mathit{ a }} {}_(
      { \color{Green}  \mathit{ {}_n }}
      { \color{Blue}   \mathit{ {}_- }}
      { \color{Plum}   \mathit{ {}_1}} {}_)
   )

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

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

   { \color{Sepia} \mathit{ si }} \;
   { \color{Green} \mathit{ a }}    {}_(
   { \color{Green} \mathit{ {}_j }} {}_) \;
   { \color{Blue}  \mathit{ < }} \;
   { \color{Green} \mathit{ a }} {}_(
   { \color{Green} \mathit{ {}_j }}
   { \color{Blue}  \mathit{ {}_+ }}
   { \color{Plum}  \mathit{ {}_1}} {}_) \;
   { \color{Sepia} \mathit{ entonces }}

   { \color{Green} \mathit{ aux }} \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ a }}    {}_(
   { \color{Green} \mathit{ {}_j }} {}_) \;

   { \color{Green} \mathit{ a }}    {}_(
   { \color{Green} \mathit{ {}_j }} {}_) \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ a }} {}_(
   { \color{Green} \mathit{ {}_j }}
   { \color{Blue}  \mathit{ {}_+ }}
   { \color{Plum}  \mathit{ {}_1}} {}_)

   { \color{Green} \mathit{ a }} {}_(
   { \color{Green} \mathit{ {}_j }}
   { \color{Blue}  \mathit{ {}_+ }}
   { \color{Plum}  \mathit{ {}_1}} {}_) \;
   { \color{Blue}  \mathit{ \gets }} \;
   { \color{Green} \mathit{ aux }}

   { \color{Sepia} \mathit{ Fin \; Si }}

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

   { \color{Sepia} \mathit{ Fin \; Para }}

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

Ventajas del pseudocódigo sobre los diagramas de flujo

  1. Ocupan mucho menos espacio en el desarrollo del problema.
  2. Permite representar de forma fácil operaciones repetitivas complejas.
  3. Es más sencilla la tarea de pasar de pseudocódigo a un lenguaje de programación formal.
  4. Si se siguen las reglas de identación se puede observar claramente los niveles en la estructura del programa.
  5. En los procesos de aprendizaje de los alumnos de programación, éstos están más cerca del paso siguiente (codificación en un lenguaje determinado, que los que se inician en esto con la modalidad Diagramas de Flujo).
  6. Mejora la claridad de la solución de un problema.

Bibliografía

  1. Peña Marí, Ricardo (2005) (en español). Diseño de programas: formalismo y abstracción (3 edición). Pearson Alhambra. pp. 488. ISBN 978-84-205-4191-4. 
  2. (en español) Pseudocódigos y programación estructurada (1 edición). Centro Técnico Europeo de Enseñanzas Profesionales. 2 de 1997. ISBN 978-84-8199-065-2. 
  3. Brassard, Gilles; Bratley, Paul (1996) (en español). Algorítmica: concepción y análisis. Peña Mari, Ricardo Tr. (1 edición). Masson, S.A.. pp. 384. ISBN 978-84-458-0535-0. 
  4. Rodeira, ed (6 de 1994) (en Gallego). Pseudocódigos e programación estructurada (1 edición). ISBN 978-84-8116-287-5. 
  5. Edebé, ed (8 de 1993) (en español). Pseudocódigos y programación estructurada (1 edición). ISBN 978-84-236-3126-1. 

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Поможем написать реферат

Mira otros diccionarios:

  • Pseudocódigo — El pseudocódigo es una manera genérica de describir un algoritmo usando las convenciones de los lenguajes de programación. El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y… …   Enciclopedia Universal

  • Algoritmo — Los diagramas de flujo sirven para representar algoritmos de manera gráfica. En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y éste a su vez del matemático persa Al… …   Wikipedia Español

  • Algoritmo Knuth-Morris-Pratt — El algoritmo KMP tiene por objeto buscar la existencia de palabra dentro de una cadena de texto. Para ello utiliza información basada en los fallos previos, aprovechando la información que la propia palabra a buscar contiene de sí (sobre ella se… …   Wikipedia Español

  • Algoritmo de búsqueda A* — Ejemplo de aplicación del algoritmo A*. El algoritmo de búsqueda A* (pronunciado A asterisco o A estrella ) se clasifica dentro de los algoritmos de búsqueda en grafos. Presentado por primera vez en 1968 por Peter E. Hart, Nils J. Nilsson y… …   Wikipedia Español

  • Algoritmo de Dijkstra — Ejecución del algoritmo de Dijkstra Tipo Algoritmo de búsqueda Problema que resuelve Problema del camino más corto …   Wikipedia Español

  • Algoritmo de Euclides — El algoritmo de Euclides es un método antiguo y eficaz para calcular el máximo común divisor (MCD). Fue originalmente descrito por Euclides en su obra Elementos. El algoritmo de Euclides extendido es una ligera modificación que permite además… …   Wikipedia Español

  • Criba de Atkin — Saltar a navegación, búsqueda La criba de Atkin es un algoritmo rápido y moderno empleado en matemáticas para hallar todos los números primos menores o iguales que un número natural dado. Es una versión optimizada de la criba de Eratóstenes, pero …   Wikipedia Español

  • Algoritmo de Floyd-Warshall — En informática, el algoritmo de Floyd Warshall, descrito en 1959 por Bernard Roy, es un algoritmo de análisis sobre grafos para encontrar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos los pares de… …   Wikipedia Español

  • Algoritmo de la panadería de Lamport — El algoritmo de la panadería de Lamport es un algoritmo de computación creado por el científico en computación Dr Leslie Lamport, para implementar la exclusión mutua de N procesos o hilos de ejecución. Contenido 1 Algoritmo 2 Entrada en sección… …   Wikipedia Español

  • Ramificación y poda — Saltar a navegación, búsqueda El método de diseño de algoritmos Ramificación y poda (también llamado Ramificación y Acotación) es una variante del Backtracking mejorado sustancialmente. El término (del inglés, Branch and Bound) se aplica… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”