En el apartado 2.8 vimos cómo ayudarnos de los diagramas de flujo para plantear lo que un programa debe hacer. Si entendemos esta herramienta, es sencillo pasar de esta notación a C (o a casi cualquier otro lenguaje de programación) es sencillo. Pero este tipo de diagramas es antiguo, no tiene en cuenta todas las posibilidades del lenguaje C (y de muchos otros lenguajes actuales). Por ejemplo, no existe una forma clara de representar una orden "switch", que equivaldría a varias condiciones encadenadas.
Por su parte, un bucle "while" se vería como una condición que hace que algo se repita (una flecha que vuelve hacia atrás, al punto en el que se comprobó la condición):
Y un "do..while" como una condición al final de un bloque que se repite:
Aun así, existen otras notaciones más modernas y que pueden resultar más cómodas. Sólo comentaremos una: los diagramas de Nassi–Shneiderman o diagramas de Chapin. En ellos se representa cada orden dentro de una caja, y el conjunto del programa es una serie de cajas apiladas de arriba (primera orden) a abajo (última orden):
Las condiciones se indican diviendo las cajas en dos:
Y las condiciones repetitivas se indican dejando una barra vertical a la izquierda, que marca qué es lo que se repite, tanto si la condición se comprueba al final (do..while):
como si se comprueba al principio (while):
Los "for" se suelen mostrar como un "while", pero detallando los valores: "para n = 1 hasta 5".
En la práctica, ambas notaciones se usan poco a nivel de programación formal, porque un programa simple puede necesitar más tiempo para representarse con una notación gráfica como éstas que para ser tecleado, y la diferencia es aún mayor cuando hay que hacer alguna modificación, que son más costosas en una notación gráfica que en un programa convencional. Aun así, en un momento inicial del aprendizaje (como éste), pueden ayudar a asentar conceptos básicos, como decidir qué debe abarcar un "if" o si se debe optar por un "while" o un "do-while". En "el mundo real", se usan más a nivel de diseño de alto nivel de programas complejos que como paso previo en programas sencillos.
Ejercicio propuesto 3.7.1: Crea el diagrama de Nassi–Shneiderman para un programa que dé al usuario tres oportunidades para adivinar un número del 1 al 10. Compáralo con el diagrama de flujo que diseñaste en el ejercicio 2.8.1.
Ejercicio propuesto 3.7.2: Crea el diagrama de Nassi–Shneiderman para el programa que pida al usuario dos números y diga si uno de ellos es positivo, si lo son los dos o si no lo es ninguno. Compáralo con el diagrama de flujo del ejercicio 2.8.2.
Ejercicio propuesto 3.7.3: Crea el diagrama de Nassi–Shneiderman para el programa que pida tres números al usuario y diga cuál es el mayor de los tres. Compáralo con el diagrama de flujo del ejercicio 2.8.3.