Pascal程序设计(二级)——基础篇01介绍课程

2016-11-05 19:32:37来源:CSDN作者:baidu_32651739人点击

第七城市

大家好,欢迎大家阅读!

首先,大家有个疑问,网上这么多关于Pascal、Delphi、Lazarus等Pascal语言的教学了,为什么还要开辟这个专题??

第一,大家回顾一下,Pascal语言在上世纪90年代至本世纪初在我国国内教学与等级考试的地位可以说是由盛到衰了!为什么会这样??

第二,我们国家的等级考试与高校组织的水平测试,又为什么删去了Pascal语言与Fortran语言??

实际上,很简单,不是这两种语言落后了,退伍了,用不到了,而是中国国情决定的!

首先是我们必须了解,还有没有必要学习Pascal语言与Fortran语言??答案显然的,虽然现在编程语言众多,著名的有六大语系,A(汇编,ADA),B(Basic),C(C,C++,C#,JAVA,GCC,NetBeans),D(Object-pascal,Delphi-pascal),E(中国的E语言,给中国留点面子,腾个位置给中国吧),F(FORTRAN,F#),这里采用的同类相似归类缩写的办法选集的,有些可能没有联系,这里实际上E不算,F与A可以拆分化解的,这里为了凑顺子,给的缩写简化,实际上,我们通常基础教学选择的是四大语系,即BCDF!!

这里互联网有很多调查,C系占绝对地位,不可否认,C语言是程序员比较喜欢和较好的语言。但是对于应用型的科研人员来说,与专职研究计算机科学相比,比较喜欢的还是Fortran与Pascal语言了,原因很简单,他们更接近科技领域或社会领域!!

举个简单例子,有下面一段代码:

int l3=0,l1=1,l2;
while (l1--&&l2==10,l3+=2,l2++<15);    /*这里如果"=="换成"="就会编译错误*/ 
printf("%d/n",l1+l2+l3);

这在C里面,是个很简单普通的程序代码了,但是仍有专家型的计算机学者会弄错,如果不在计算机上运行的话,他可能都得不出正确的计算结果,更何况是非计算机专业的小基础们啊!!~~

而在Fortran与Pascal语言就可以降低这种纯粹计算机理论的困难,也就是说,我们这里阐述的是计算机科学的发展方向问题,可视化,智能化,自然化!!

所以说,计算机专业研究的仍然放给他们,但是非计算机专业的,例如物理,化学,经济学类等等专业的自然更喜欢用Fortran与Pascal语言了!!

其次,那有人问了,既然学习Pascal语言,是有用处的,为什么我们国家的等级考试与高校组织的水平测试删去了Pascal语言与Fortran语言考试内容啊??

上层基础决定社会层次,不可否认,国家的计算机科学领域的专家与先辈们为国家做了巨大的贡献,但是我们国家相对美国,欧洲等国家还是落后的,以前的教育基础都是在跟他们学习上世纪70,80,最多90年代,或者稍微先进的教育知识,所以很多都是在DOS,WIN98,WINXP上面啃的,教育落后是现实!!而新编的教育教学没能扩大教育阵容和专家领域,也没能更新教育知识,故而出现了断层!!

那有的大学小基础说了,国家以前也编写了Fortran与Pascal语言新版教材了,如2008年的二级Delphi!!那,我就要问你了,为什么会像昙花一样出现又消失了呢??

小基础是不是没体验过那段时刻呀??很显然的!!

拿Pascal语言说,因为以前用的是DOS,所以,问题是很多的,能用WINDOW,不用DOS,因为WINDOW支持多国语言,即支持中文,支持长文件名,支持大内存技术,支持大硬盘技术,更不用说支持大数据计算技术,支持多媒体技术等等了。。。

举个简单例子:

#include<stdio.h>


/*这个程序只能算到12!*/
 
void main()
{
long int n,m,t;
scanf("%d",&n);
m=1;t=n;
while (n>=1)
     {
      m=m*n;
      n--;
 }
printf("%d!=%d/n",t,m);
}

这是一个C写的求阶乘的例子,但是只能算到多少啊??12!!!我有时问小基础的时候,写完这个程序,有个很大的问题,他们就检查啊检查,程序没错啊,是啊,没错但是什么大问题啊??你写个程序只能算到12!!!啊,你上什么了啊??大学了啊!!写个程序你连20的阶乘都算不了!!

要想算个大点的,有个例子:

 /*******************************************************************
   This program is used to computer n! , here n>=0 and n<=42900.
   If use double to  computer n! then n must be less than 171 and if
   n>=22 the n! is not accurate.(19000! contains 73048 decimal bits

   and ending with 4749 zeros)
   30000! contains 121288 decimal bits.
 *******************************************************************/


#include"stdio.h"
#define HT 100000l
#define MAXEP 479001600l                                   /* 479001600 which can be represented in long (4 bytes) */
#define UPV 12
#define MAXA 160001l
#define MAXN 42901l


void printbig(int n,unsigned long r[],unsigned long newup)
{
   int j=1,k,bits;
   if(newup>=MAXA)
     {
      printf("%d is too big and %d! is more than 10^800000/n",n,n);
      return;
     }
   else
     {
      printf("/n %d!=/n",n);
      printf("%5d",r[newup]);
      if(r[newup]>=10000)
bits=5;
      else
if(r[newup]>=1000)
   bits=4;
else
   if(r[newup]>=100)
      bits=3;
   else
      if(r[newup]>=10)
 bits=2;
      else
 bits=1;
      for(k=newup-1;k>=0;k--)
{
 printf("%05d",r[k]);                                /* 1. */
 if(++j%12==0)
    printf("/n");
}
      printf("/n");
     }
   printf("(contains %d decimal bits)/n/n",bits+(j-1)*5);
   return;
}


void eval_small(int n)
{
   int i,s=1;
   for(i=1;i<=n;i++)
       s*=i;
   printf("%d!=%d/n",n,s);
}


void eval_big(int n)
{
   static int lastn=MAXN;
   static unsigned long r[MAXA],newup;
   int i,j,k,t;
   if(n>=lastn)
      for(j=lastn+1;j<=n;j++)
{
 for(k=0;k<=newup;k++)                     /* 2. */
     r[k]*=j;
 for(k=0;k<=newup;k++)                     /* 3. */
    {
     t=r[k]/HT;
     r[k]%=HT;
     r[k+1]+=t;
    }
          if(r[newup+1])                            /* 4. */
    newup++;
}
   else
     {
      /* cannot use the last result */
      r[0]=MAXEP%HT;
      r[1]=MAXEP/HT;
      for(i=2;i<MAXA;i++)
 r[i]=0;
      newup=1;
      for(j=UPV+1;j<=n;j++)
{
 for(k=0;k<=newup;k++)
              r[k]*=j;
 for(k=0;k<=newup;k++)
    {
     t=r[k]/HT;
     r[k]%=HT;
     r[k+1]+=t;
    }
 if(r[newup+1])
    newup++;
}
     }
   printbig(n,r,newup);
   lastn=n;
   return;
}


void main()
{
   int i;
   printf("Input a non_negative integer (0 to quit !): /n");
   scanf("%d",&i);
   while(i)
{
if(i>=MAXN)
   printf(" i (%d) is too big ! Try again!/n",i);
else
   if(i<=UPV)
      eval_small(i);
   else
      eval_big(i);
printf("Input a non_negative integer (0 to quit !):/n");
scanf("%d",&i);
}
}

这个倒是可以算30000以内整数的阶乘了,对于小基础来说,是不是很苦闷啊??你为了算个20的阶乘,居然要学到最后才能算啊!!这是个什么滋味啊??

所以,学习更先进的,更领先的是需要的!!

但是,为什么二级Delphi会像昙花一样出现又消失了呢??

Delphi不是WINDOW环境吗??是的,但是二级Delphi教学内容丰富,但却把教语言与编一本编译环境等同了,小基础们学习时就像才学编程语言就要编写个求大数的阶乘程序一样,苦闷啊,以前的DOS版Pascal教程的逻辑层次多好啊,讲究循序渐进,现在的国家二级C语言2016版的也很不错,WINDOW环境,但是教学是循序渐进的!!!!所以要把以前的和现在的二级Pacal语言教学的优点综合一块,循序渐进的编写教材与教育教学!!

所以,程序设计,应该与时俱进,建议国家教育部,把二级Delphi改为循序渐进的

二级Pacal语言           重点与以前的Pacal语言教学类似,学习语言,熟悉编译环境(如现在的C语言就是个好的范例啊),学习些简单的WINDOS环境下的编程

三级Pacal语言           重点放在难一些的WINDOS环境下的编程

四级Pacal语言          重点放在Pacal语言的各种应用上,如数据库,多媒体,网络,嵌入式开发,安卓开发等等。。。

也就是说,由于环境的不同,教育教学的层次和步骤也不同,国家也需要征集更多的科技人才去研究开发,这里引谈一下。。。

自然了,像高校可以按时代特点,规划,大学生本科非计算机类,可以选修到三级Pacal语言教学上。。。至少在2个学年内,作为辅助学科学习。。。

好,也就是说,我们要综合前辈们的优点,结合时代性,了解和学习本课程。

我们学习也就从“二级Pacal语言           重点与以前的Pacal语言教学类似,学习语言,熟悉编译环境(如现在的C语言就是个好的范例啊),学习些简单的WINDOS环境下的编程“逐步的学习。

本节就先介绍本课程,下节介绍学习环境。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台