2010-02-20 28 views
23

Necesito traducir algunas rutinas de Python y Java en pseudo código para mi tesis de maestría, pero tienen problemas para llegar a una sintaxis/estilo que es:Estándares para pseudo código?

  • consistente
  • fácil de entender
  • no demasiado prolijo
  • no muy cerca del lenguaje natural
  • no demasiado cerca de algún lenguaje de programación concreto.

¿Cómo se escribe el pseudo código? ¿Hay alguna recomendación estándar?

Respuesta

14

Recomiendo mirar el libro "Introducción a los algoritmos" (por Cormen, Leiserson y Rivest). Siempre he encontrado su descripción de algoritmos pseudocódigo muy clara y consistente.

Un ejemplo:

DIJKSTRA(G, w, s) 
1 INITIALIZE-SINGLE-SOURCE(G, s) 
2 S ← Ø 
3 Q ← V[G] 
4 while Q ≠ Ø 
5  do u ← EXTRACT-MIN(Q) 
6   S ← S ∪{u} 
7   for each vertex v ∈ Adj[u] 
8    do RELAX(u, v, w) 
+0

Requiere un gran nivel de abstracción del código real, pero sí, supongo que esto es lo que necesito. Gracias. – ferdystschenko

+0

@ferdystschenko: sí, pero el pseudo código tiene que ver con la abstracción, ocultando los detalles innecesarios. En el ejemplo anterior, la línea 6 dice que se unificará en S, ¿qué importancia tiene cómo se implementa? –

+2

Para profundizar en Eli Bendersky: no solo los detalles de cómo se implementa no importan, pero dado que se trata de un seudo código, ¡ni siquiera se sabe cómo se implementa! –

4

Si el código es de procedimiento, lo normal pseudo-código es probablemente fácil (Wikipedia tiene algunos ejemplos).

El pseudocódigo orientado a objetos puede ser más difícil. Considere:

  • el uso de diagramas de clase UML para representar la clases/inheritence
  • utilizando diagramas de secuencia UML para describir la secuencia de código
+0

Principalmente es de procedimiento, pero tiene razón sobre el uso de UML para OO. Gracias por la pista. – ferdystschenko

5

le sugiero que tome un vistazo a la Fortress Programming Language.

Este es un lenguaje de programación real y no pseudocódigo, pero fue diseñado para ser lo más cercano a pseudocódigo ejecutable como sea posible. En particular, para diseñar la sintaxis, leyeron y analizaron cientos de artículos de CS y matemática, cursos, libros y diarios para encontrar patrones de uso comunes para el pseudocódigo y otras notaciones computacionales/matemáticas.

Puede aprovechar toda esa investigación simplemente mirando el código fuente de Fortress y abstrayendo las cosas que no necesita, ya que su público objetivo es humano, mientras que Fortress's es un compilador.

Aquí hay un ejemplo real de ejecutar el código Fortress del NAS (NASA Advanced Supercomputing) Conjugate Gradient Parallel Benchmark. Para una experiencia divertida, compare la especificación del benchmark con la implementación en Fortress y observe cómo hay casi una correspondencia 1: 1. También compare la implementación en un par de otros idiomas, como C o Fortran, y observe cómo no tienen absolutamente nada que ver con la especificación (y también suelen ser un orden de magnitud mayor que la especificación).

Debo recalcar: esto no es pseudocódigo, ¡este es el código Fortress real! Fortress Code Example http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Editar: Código anterior El enlace de ejemplo está muerto.Ejemplo posible similar se puede encontrar aquí: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

+4

Me parece gracioso que piense que esta es una sintaxis clara y simple. ¿Cuál es la diferencia entre: = y =? ¿El subíndice "max" actúa como un operador o es solo una notación? El seudo código debe ser algo que pueda explicarle a un no especialista. –

3

No entiendo su requisito de "no demasiado cerca de algún lenguaje de programación concreto".

Python generalmente se considera como un buen candidato para escribir seudocódigo. Tal vez una versión ligeramente simplificada de Python funcione para usted.

+1

Generalmente estoy de acuerdo, aunque creo que Python tiene algunas cosas que pueden no ser inmediatamente inteligibles para alguien que no conoce el idioma. Un ejemplo es la notación de listas, diccionarios y tuplas, es decir, '{}' podría tomarse como una matriz vacía y no como una estructura de mapeo. – ferdystschenko

2

Pascal siempre ha sido tradicionalmente el más parecido al pseudocódigo, cuando se trata de campos matemáticos y técnicos. No sé por qué, siempre fue así.

Tengo algunos (oh, no sé, 10 tal vez libros en un estante, lo que concreta esta teoría).

Python como se sugiere, puede ser un buen código, pero también puede ser tan ilegible, que es una maravilla en sí misma. Los idiomas antiguos son más difíciles de hacer ilegibles: son más "simples" (tome con precaución) que los de hoy. Quizás sea más difícil entender lo que está sucediendo, pero es más fácil de leer (se necesitan menos características de sintaxis/lenguaje para comprender lo que hace el programa).

7

Respondiendo a mi propia pregunta, solo quería llamar la atención sobre la siguiente página web acerca de la composición del pseudo código en LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms. Describen varios estilos diferentes, enumerando ventajas y desventajas. Incidentalmente, existen dos hojas de estilo para escribir pseudocódigo de la manera utilizada en "Introducción a Algoritmos" por Cormen, como se recomendó anteriormente: newalg y clrscode. Este último fue escrito por el propio Cormen.

+0

personalmente este pseudocódigo es mi favorito, parece que está basado en la lógica de predicados pero con una notación muy limpia para el control del código. me encanta y se ve limpio. –

Cuestiones relacionadas