En informática , el pseudocódigo es una descripción de los pasos de un algoritmo que utiliza una combinación de convenciones de lenguajes de programación (como operador de asignación , operador condicional , bucle ) con notación informal, generalmente autoexplicativa, de acciones y condiciones. [1] [2] Aunque el pseudocódigo comparte características con los lenguajes de programación regulares , está destinado a la lectura humana en lugar del control de la máquina. El pseudocódigo generalmente omite detalles que son esenciales para la implementación del algoritmo por máquina, lo que significa que el pseudocódigo solo se puede verificar a mano. [3] El lenguaje de programación se amplía con detalles de descripción en lenguaje natural , cuando es conveniente, o con notación matemática compacta . El propósito de usar pseudocódigo es que sea más fácil de entender para las personas que el código del lenguaje de programación convencional, y que sea una descripción eficiente e independiente del entorno de los principios clave de un algoritmo. Se usa comúnmente en libros de texto y publicaciones científicas para documentar algoritmos y en la planificación de software y otros algoritmos.
No existe un estándar amplio para la sintaxis del pseudocódigo , ya que un programa en pseudocódigo no es un programa ejecutable; sin embargo, existen ciertos estándares limitados (como para la evaluación académica). El pseudocódigo se parece a los programas esqueleto , que se pueden compilar sin errores. Los diagramas de flujo , los diagramas drakon y los diagramas de lenguaje de modelado unificado (UML) pueden considerarse una alternativa gráfica al pseudocódigo, pero necesitan más espacio en el papel. Los lenguajes como HAGGIS cierran la brecha entre el pseudocódigo y el código escrito en lenguajes de programación.
Los libros de texto y las publicaciones científicas relacionadas con la informática y el cálculo numérico suelen utilizar pseudocódigo en la descripción de los algoritmos, de modo que todos los programadores puedan entenderlos, incluso si no todos conocen los mismos lenguajes de programación. En los libros de texto, suele haber una introducción que explica las convenciones particulares que se utilizan. El nivel de detalle del pseudocódigo puede, en algunos casos, acercarse al de los lenguajes formalizados de propósito general.
Un programador que necesita implementar un algoritmo específico, especialmente uno que no le resulte familiar, a menudo comenzará con una descripción en pseudocódigo y luego "traducirá" esa descripción al lenguaje de programación de destino y la modificará para que interactúe correctamente con el resto del programa. Los programadores también pueden comenzar un proyecto esbozando el código en pseudocódigo en papel antes de escribirlo en su lenguaje real, como un enfoque de estructuración de arriba hacia abajo , con un proceso de pasos a seguir como refinamiento.
El pseudocódigo también se utiliza en la estandarización. Por ejemplo, los estándares MPEG hacen un uso intensivo de pseudocódigo formal similar al C y no se pueden entender sin comprender los detalles del código. [4]
El pseudocódigo en general no obedece las reglas de sintaxis de ningún lenguaje en particular; no existe una forma estándar sistemática. Algunos escritores toman prestado el estilo y la sintaxis de las estructuras de control de algún lenguaje de programación convencional, aunque esto no se recomienda. [5] [6] Algunas fuentes de sintaxis incluyen Fortran , Pascal , BASIC , C , C++ , Java , Lisp y ALGOL . Las declaraciones de variables generalmente se omiten. Las llamadas a funciones y los bloques de código, como el código contenido dentro de un bucle, a menudo se reemplazan por una oración de lenguaje natural de una línea.
Dependiendo del escritor, el pseudocódigo puede variar ampliamente en estilo, desde una imitación casi exacta de un lenguaje de programación real en un extremo, hasta una descripción que se acerca a la prosa formateada en el otro.
Esta flexibilidad trae consigo tanto ventajas como inconvenientes importantes: en el lado positivo, ningún lenguaje de programación ejecutable "puede superar la conveniencia de inventar nuevas construcciones según sea necesario y dejar que el lector intente deducir su significado a partir de explicaciones informales", en el lado negativo, "el código no probado suele ser incorrecto". [7]
En computación numérica , el pseudocódigo a menudo consiste en notación matemática , típicamente de teoría de matrices y conjuntos , mezclada con las estructuras de control de un lenguaje de programación convencional, y quizás también descripciones en lenguaje natural . Esta es una notación compacta y a menudo informal que puede ser entendida por una amplia gama de personas con formación matemática, y se utiliza con frecuencia como una forma de describir algoritmos matemáticos . Por ejemplo, el operador de suma ( notación sigma mayúscula ) o el operador de producto ( notación pi mayúscula ) pueden representar un bucle for y una estructura de selección en una expresión:
Devolver
Normalmente se utiliza una composición tipográfica no ASCII para las ecuaciones matemáticas, por ejemplo mediante lenguajes de marcado, como TeX o MathML , o editores de fórmulas propietarios .
El pseudocódigo de estilo matemático a veces se denomina código pidgin , por ejemplo , pidgin ALGOL (el origen del concepto), pidgin Fortran , pidgin BASIC , pidgin Pascal , pidgin C y pidgin Lisp .
El siguiente es un ejemplo más extenso de pseudocódigo de estilo matemático para el algoritmo Ford-Fulkerson :
El algoritmo Ford-Fulkerson se ingresa como: Gráfico G con capacidad de flujo c , nodo fuente s , Nodo sumidero t salida: Flujo f tal que f es máximo desde s hasta t (Tenga en cuenta que f (u,v) es el flujo del nodo u al nodo v, y c (u,v) es la capacidad de flujo del nodo u al nodo v) para cada arista ( u , v ) en G E do f ( u , v ) ← 0 f ( v , u ) ← 0 mientras exista un camino p desde s hasta t en la red residual G f do sea c f la capacidad de flujo de la red residual G f c f ( p ) ← min{ c f ( u , v ) | ( u , v ) en p } para cada arista ( u , v ) en p do f ( u , v ) ← f ( u , v ) + c f ( p ) f ( v , u ) ← − f ( u , v ) devolver f
Varios intentos de incorporar elementos de la gramática del lenguaje natural a la programación informática han dado lugar a lenguajes de programación como HyperTalk , Lingo , AppleScript , SQL , Inform y, en cierta medida, Python . En estos lenguajes, los paréntesis y otros caracteres especiales se sustituyen por preposiciones, lo que da lugar a un código bastante verboso. Estos lenguajes suelen tener tipos dinámicos , lo que significa que se pueden omitir las declaraciones de variables y otro código repetitivo . Estos lenguajes pueden facilitar la comprensión del código y, tal vez, también el aprendizaje del lenguaje a una persona sin conocimientos sobre el lenguaje. Sin embargo, la similitud con el lenguaje natural suele ser más cosmética que genuina. Las reglas de sintaxis pueden ser tan estrictas y formales como en la programación convencional, y no necesariamente facilitan el desarrollo de los programas.
Una alternativa al uso de pseudocódigo matemático (que implica notación de teoría de conjuntos u operaciones matriciales) para la documentación de algoritmos es utilizar un lenguaje de programación matemática formal que sea una combinación de notación matemática no ASCII y estructuras de control de programas. Luego, una máquina puede analizar e interpretar el código.
Varios lenguajes de especificación formal incluyen la notación de la teoría de conjuntos mediante caracteres especiales. Algunos ejemplos son:
Algunos lenguajes de programación de matrices incluyen expresiones vectorizadas y operaciones matriciales como fórmulas no ASCII, combinadas con estructuras de control convencionales. Algunos ejemplos son:
Evite elementos sintácticos del lenguaje de programación de destino.