El diagrama de Nassi- Shneiderman es una representación gráfica de algoritmos y programas estructurados desarrollados en 1972 por los estudiantes graduados estadounidenses Ben Schneiderman e Isaac Nassi.
Dado que la programación estructurada no utiliza saltos incondicionales , Ben Schneiderman decidió que las flechas utilizadas en los diagramas de flujo no eran necesarias para escribir algoritmos estructurados. Habiendo ideado diferentes formas de representar las principales estructuras de control (secuencias, ramas y ciclos ), luego, junto con Isaac Nussey, elaboró su idea en detalle. Juntos escribieron el artículo "Flowchart Technique for Structured Programming", que fue publicado en la revista científica SIGPLAN Notices en agosto de 1973.
Los diagramas de Nassi-Schneiderman se han generalizado en algunos países, especialmente en Alemania , donde incluso desarrollaron un estándar oficial para ellos por parte del Instituto Alemán de Normalización : DIN 66261.
Los diagramas de Nassi-Schneiderman tienen una serie de ventajas sobre los diagramas de flujo en el desarrollo de algoritmos y programas estructurados:
Todos los elementos del diagrama de Nassi-Schneiderman tienen forma rectangular y difieren solo en su contenido interno.
La acción que se realiza (incluido un comando de lenguaje en un programa o una subtarea en un algoritmo) se representa en los diagramas de Nassi-Schneiderman como un rectángulo en el que se escribe la designación de la acción (comando) o la formulación de la subtarea.
Un ejemplo de una entrada de subtarea:
Encuentra el elemento más pequeño en la matriz |
Un ejemplo de grabación de un comando ejecutable (al escribir un programa en el lenguaje Pascal ):
writeln('¡Hola mundo!') |
Al escribir una estructura de ejecución secuencial, los elementos se dibujan verticalmente uno tras otro. En este caso, todos los elementos de la secuencia deben tener el mismo ancho; debido a esto, toda la secuencia también tiene una forma rectangular. Por ejemplo:
Abrir archivo para leer |
Leer la primera línea del archivo |
Imprime el valor leído en la pantalla |
cerrar el archivo |
Escribiendo el mismo algoritmo en forma de diagrama de Nassi-Schneiderman utilizando el lenguaje Pascal :
restablecer (f) |
readln(f, cadena) |
writeln(cadena) |
cerrar |
La estructura de una rama simple se muestra como un rectángulo dividido por una línea horizontal en dos partes. En la parte superior está el encabezado de la rama, y en la parte inferior hay dos ramas separadas por una barra vertical. El encabezado dibuja dos líneas que van desde las esquinas superiores hasta el comienzo de la línea que separa las ramas. En el triángulo obtenido en la parte superior, se escribe la condición de ramificación, en los dos triángulos inferiores sobre las ramas, se firman los valores de condición correspondientes a estas ramas, por ejemplo, "verdadero" y "falso", o "si y no".
La estructura de una opción múltiple se representa de manera similar a la estructura de una rama simple, solo la rama principal y el triángulo sobre ella están divididos en muchas partes por líneas verticales. La expresión de cambio se escribe en el triángulo superior, los valores de cambio correspondientes se escriben sobre las ramas.
Una estructura repetida con una condición al principio se dibuja como un rectángulo, dentro del cual se dibuja otro rectángulo en la parte inferior derecha. Sobre el rectángulo interior está escrito el título del ciclo, y dentro está el cuerpo del ciclo.
Un ejemplo de cómo escribir un ciclo con una condición previa (en este ejemplo, el cuerpo del ciclo es una secuencia de dos acciones):
Se diferencia del bucle con una condición previa solo en que el rectángulo interior se dibuja en la parte superior derecha del exterior y el título se escribe debajo.
Un ejemplo de cómo escribir un ciclo con una condición posterior (en este ejemplo, el cuerpo del ciclo es una secuencia de dos acciones):
El rectángulo interior se dibuja en el lado derecho y no toca la parte superior e inferior del rectángulo exterior. La condición del bucle está escrita en la parte superior.