miércoles, 3 de junio de 2009

pseudocodigo

Un pseudocódigo (falso lenguaje), es una serie de palabras léxicas y gramaticales referidos a los lenguajes de programación, pero sin llegar a la rigidez de la sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software.

Para probar el algoritmo se utiliza un Pseudo intérprete el cual se encuentra disponible para las plataformas GNU/Linux y Windows, es de código libre y está escrito en C++. El mismo se ejecuta en un Terminal.

El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de la solución a un problema.

No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir, no hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el estudio y diseño de aplicaciones, veamos un ejemplo, que podríamos definir como: lenguaje imperativo, de tercera generación, según el método de programación estructurada.



Definición de datos del Pseudocódigo [editar]

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.

Definición de estructuras de control [editar]

Como se había mencionado antes, cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por ejemplo, considere la instrucción "Reemplace el valor de la variable x por el valor de la variable y"; algunas de las posibles sintaxis para indicar lo anterior podrían ser:

  • asigne a x\, el valor de y\,
  • x\leftarrow y\,
  • x := y\,
  • x = y\,

Sin embargo, independientemente de estas diferencias, muchos autores consideran tres estructuras de control para desarrollar los procedimientos:

Secuencial [editar]

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 condicion dada dentro del algoritmo.

Instrucción1
Instrucción2
Instrucción3
\vdots
Instrucciónn

Selectiva [editar]

La instrucción selectiva determina si una determinada instrucción se ejecuta o no, según el cumplimiento de una condición P.

Diagrama de flujo que muestra el funcionamiento de la instrucción condicional
si P entonces
Instrucciones1
fin si

La condición P 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í, ésta no se ejecuta.

Selectiva doble (alternativa) [editar]

La instrucción selectiva realiza una instrucción de dos posibles, según el cumplimiento de una condición P.

Diagrama de flujo que muestra el funcionamiento de la instrucción condicional
si P entonces
Instrucciones1
sino
Instrucciones2
fin si

La condición P 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 [editar]

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

si Condición1 entonces
Instrucciones1
sino si Condición2 entonces
Instrucciones2
\vdots
sino si Condiciónn entonces
Instruccionesn - 1
sino
Instruccionesn
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 [editar]

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

seleccionar Indicador
caso Valor1:
Instrucciones1
caso Valor2:
Instrucciones2
\vdots
caso Valorn-1:
Instruccionesn-1
[en otro caso:
Instruccionesn]
Fin seleccionar Indicador

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.

Iterativa [editar]

Las instrucciones iterativas abren la posibilidad de realizar una secuencia de instrucciones más de una vez.

Diagrama de flujo que muestra el funcionamiento de la instrucción mientras
mientras P hacer
Instrucciones
fin mientras

El bucle se repite mientras la condición P 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.

Existen otras variantes que se derivan a partir de la anterior. La estructura de control hacer se utiliza cuando es necesario que las instrucciones de una estructura mientras se ejecuten al menos una vez:

hacer
Instrucciones
mientras P

La estructura anterior equivaldría a escribir

Instrucciones
mientras P hacer
Instrucciones
fin mientras

Una estructura de control muy común es el ciclo para, la cual se usa cuando se desea iterar sobre sobre un índice i (por convención se usa i, sin embargo se puede usar cualquier identificador):

para i\leftarrow x hasta n hacer
Instrucciones
fin para

la cual se define como

i\leftarrow x
mientras i\leq n hacer
Instrucciones
i\leftarrow i+1
fin mientras

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:

para cada x\in L hacer
Instrucciones
fin para

Si asumimos que los elementos de L son L_0,L_1,\dots,L_n, entonces esta sentencia equivaldría a

para i\leftarrow 0 hasta n hacer
x\leftarrow L_i
Instrucciones
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 [editar]

Cualquier instrucción puede ser sustituida por una estructura de control. El siguiente ejemplo muestra un pseudocódigo de un método de ordenamiento denominado Ordenamiento de burbuja en el cual aparecen varias estructuras anidadas. Este algoritmo ordena una lista L.

procedimiento Ordenar(L)\,
//L=(L_1,L_2,\dots,L_n) es una lista con n elementos//
hacer
intercambio\leftarrow falso
para i\leftarrow1 hasta n-1\, hacer
si L_{i+1}\," src="http://upload.wikimedia.org/math/e/7/b/e7bc8f22b66ed140af9862ba02c6dff8.png"> entonces
intercambiar(L_i,L_{i+1})\,
intercambio\leftarrow verdadero\,
fin si
fin para
mientras intercambio=verdadero\,
fin procedimiento

Desarrollo de algoritmos [editar]

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 [editar]

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).

función \mathrm{potencia}(a,n)\,
//Este algoritmo calcula an (con a y n números naturales)
i\leftarrow n
r\leftarrow 1
x\leftarrow a
mientras 0\," src="http://upload.wikimedia.org/math/f/8/6/f8638147cda431dc7af3d7dbc8d1c798.png"> hacer
si i\, es impar entonces
r\leftarrow r\times x
fin si
x\leftarrow x\times x
i\leftarrow i\div2
fin mientras
devolver r\,
fin función

Ventajas de utilizar un Pseudocódigo a un diagrama de flujo [editar]

  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, estos 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. El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizara para la codificación del mismo.

    Las principales características de este lenguaje son:
  7. Se puede ejecutar en un ordenador
  8. Es una forma de representación sencilla de utilizar y de manipular.
  9. Facilita el paso del programa al lenguaje de programación.
  10. Es independiente del lenguaje de programación que se vaya a utilizar.
  11. Es un método que facilita la programación y solución al algoritmo del programa. El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizara para la codificación del mismo.

    Las principales características de este lenguaje son:
  12. Se puede ejecutar en un ordenador
  13. Es una forma de representación sencilla de utilizar y de manipular.
  14. Facilita el paso del programa al lenguaje de programación.
  15. Es independiente del lenguaje de programación que se vaya a utilizar.
  16. Es un método que facilita la programación y solución al algoritmo del programa.

Diagrama de flujo


Diagrama de flujo sencillo con los pasos a seguir si una lámpara no funciona.

Un diagrama de flujo es una forma de representar gráficamente los detalles algorítmicos de un proceso multifactorial. Se utiliza principalmente en programación, economía y procesos industriales, pasando también a partir de estas disciplinas a formar parte fundamental de otras, como la psicología cognitiva. Estos diagramas utilizan una serie de símbolos con significados especiales y son la representación gráfica de los pasos de un proceso. En computación, son modelos tecnológicos utilizados para comprender los rudimentos de la programación lineal.


estructuras de control

  1. secuencial las intruciones se siguen en una secuencia fija es decir que se ejecutan hacia arriba hacia abajo
instruccion 1
instruccion 2
instruccion 3


2. selectivo realiza una instrucciones de dos posibles segun el cumplimiento de la
conducion

si p entonces si no
instruccion 1 instruccion 2


3.interativa o repetitiva estas instrucciones abren la posivilidad de realizar una secuencia de instrucciones de una ves