snap10
1、C/C++ 2、Pascal/Delphi
 
1、C/C++

1、源自aerojockey.com的C程序

        产品软件不论程序规范与否,只要语法上没有错误,都可以将它自动变换成清晰、规范、可读性远胜于文字性程序的二维结构化程序框图(SI-NS图)。
  以下是源自www.aerojockey.com的一个C代码程序:

源自aerojockey.com的一个C代码程序

  变换后生成的SI-NS图为:

源自aerojockey.comC程序SI-NS图

2、源自《C程序设计》例题11.13

《C程序设计》

  清华大学谭浩强教授的《C程序设计》,发行量超过700万册。书中几乎所有例题都采用NS图表达解题的的算法。
  这里以例题11.13为例:
  例11.13:  口袋中有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同色球的可能取法,输出每种排列的情况。
  球只能是5种色之一,而且要判断各球是否同色,应该用枚举类型变量处理。
  设取出的球为i、j、k。根据题意,i、j、k分别是5种色球之一,并要求i ≠ j ≠ k。可以用穷举法,即一种可能一种可能地试,看哪一组符合条件。
  算法用书上图11-27和图11-28的NS图表示。

image003

  该题最终的程序如下:

#include <stdio.h>
main()
{enum color {red,yellow,blue,white,black};
enum color i,j,k,pri; int n,loop;
n=0;
for (i=red;i<=black;i++)
 for (j=red;j<=black;j++)
  if (i!=j)
   { for (k=red;k<=black;k++)
     if ((k!=i) && (k!=j))
      {n=n+1;
      printf("%-4d",n);
      for (loop=1;loop<=3;loop++)
       {switch (loop)
        {case 1: pri=i;break;
         case 2: pri=j;break;
         case 3: pri=k;break;
         default:break;
       }
      switch (pri)
       {case red:printf("%-10s","red"); break;
       case yellow: printf("%-10s","yellow"); break;
       case blue: printf("%-10s","blue"); break;
       case white: printf("%-10s","white"); break;
       case black: printf("%-10s","black"); break;
       default :break;
       }
      }
   printf("\n");
  }
 }
 printf("\ntotal:%5d\n",n);
}

  显然,程序不能像NS图那样清晰、直观地表达该题的算法和设计思想。
  用产品软件将上述程序变换成SI-NS图之后,情况就完全不同了,学生很容易读懂理解程序的整体结构、算法和设计思想。

例图

  倘若能将开发和维护中的程序随时变换成SI-NS图,学生在分析考虑问题时,只需面对读起来远比程序容易理解得多的SI-NS图。这样的开发模式,一次开发成功率非常高。