找回密码
 注册
Simdroid-非首页
楼主: yexm

[10. Others] 【讨论】Fortran 与 C

[复制链接]
liu_enhua 该用户已被删除
发表于 2005-10-1 01:41:25 | 显示全部楼层 来自 吉林长春
提示: 作者被禁止或删除 内容自动屏蔽
yanghankun9 该用户已被删除
发表于 2005-10-4 12:33:59 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-10-5 19:15:01 | 显示全部楼层 来自 上海

Re:【讨论】Fortran 与 C

编程语言的理性选择

    根据我们大量的调研、比较及验证,加上以前积累的经验,科技领域中编程语言的最佳选择是FORTRAN。作这一选择有很多理由,例如它特别适用于去做科学计算。而我们首先要强调的则是它的简单的结构、语法和使用方便。或许有人会说,FORTRAN是一种非常过时的语言。但是按我们的看法,这是一种误解,现在FORTRAN已经获得了新的潜力。事实上,每一种编程语言当前几乎都有大致相近的发展水平,FORTRAN也不会例外。例如,在其最新的版本FORTRAN-95中,它也提供了指针、结构等表达。然而,从编程角度看,其更重要的一点是,FORTRAN以较为自然的方式表达各种功能。不像C和VC,正是FORTRAN具有如此接近人类语言的面貌,使在学习和使用上变得非常容易。

转自:http://www.cnvf.com
发表于 2005-10-5 19:37:41 | 显示全部楼层 来自 上海

Re:【讨论】Fortran 与 C

MS FORTRAN 图形功能介绍  源于同上
  FORTRAN 语言是国际上非常流行的一种适用于数值计算的语言。MS FORTRAN 从5.0版本开始开发出了图形功能,FORTRAN语言高效的数值计算和图形功能相结合,使其具有非常广阔的应用前景。本文根据软件提供的帮助文件和参考其它有关资料[1],结合自己的实践体会,将 FORTRAN 的图形功能主要部分作介绍,供有关人员参考使用。

1 FORTRAN 图形库应用环境
  MS FORTRAN 图形库的全名为graphics.lib,它包括了一套完整的图形函数集。图开库既可以从MS FORTRAN 中调用,也可以从支持 FORTRAN 调用约定的其它MS语言中进行访问。图形库支持 IBM EGA (及兼容机)、CGA、MCGA和VGA硬件配置的某些方式和AT&T个人微机上的Olivetti视频方工,该库还支持Hercules图形卡、Graphics Card Plus、Incolor卡(及兼容卡)。

2 图形函数调用说明
  在调用图形库的函数时,都必须对该函数进行说明。MS FORTRAN提供了fgraph.fi和fgraph.fd两个文件。文件fgraph.fi中包含了interface语句段中的过程说明;文件fgraph.fd则包含了图形过程符号常量说明以及external语句,还定义了videoconfig、xycoord、wxycoord、rccoord和fontinfo五个结构。总之,这两个包含文件包括了访问所有图形函数的必需说明。因此,在调用图形函数时应在程序的开头用include语句引用这两个包含文件。

3 图形函数
  MS FORTRAN图形库函数包括外部函数和子程序两种过程。每个外部函数都有一个返回值,返回值均为整型的数。子程序在应用程序中由call调用,无返回值。在下面的介绍中,凡属子程序的都将加以注明。

3.1 显示方式

  在FORTRAN图形库中包含了许多定义文本和图形显示方式的函数,它们用来确定图形的环境特征和操作方式等。
  displaycursor(toggle)
  指定在执行每个图形函数之后显示或隐去光标。当参量toggle设置为?GCURSORON值时显示光标,为?GCURSOROFF值时则隐去光标。
  getvideoconfig(s)
  子程序,将当前图形环境信息返回到videomode结构参量s中,这些信息可供其它函数使用。
  setvideomode(mode)
  为特定硬件和显示器配置选择一种屏幕方式(如颜色数和分辨率)。参理mode的取值定义在fgraph.fd中,当mode取?MAXRESMODE和?MAXCOLORMODE 时,分别选择分辨率最高和颜色最多的图形方式,mode取?DEFAULTMODE值时,将屏幕恢复为正常方式。
  settextrows(rows)
  指定文本方式所用的文本行数。
  setvideomoderows(mode,rows)
  为特定硬件和显示器组合选择一种屏幕方式。setvideomoderows、settextrows和setvideomode函数若调用成功,均返回设置的文本行数,若出错,则返回O。

3.2 图形坐标

  MS FORTRAN 图形库提供的描述屏幕象素位置的坐标系有三种,即物理坐标系、视口坐标系和窗口坐标系。所谓物理坐标系,其原点(0,0)总是位于屏幕的左上角,x轴的方向从左到右,y轴的方向从上到下,x轴和y轴的尺寸取决于配置函数和当前屏幕方式。使用图形库提供的函数,物理坐标系可以实现向视口坐标系转换,视口坐标系又可向窗口坐标系转换。
  所有使用窗口坐标的函数均以下划线和字母W结尾,即-W。凡是引用物理坐标和视口坐标的函数都是接收整型参数,而使用窗口坐标的函数则接收双精度型参数。
  setvieworg(x、y、s)
  子程序,将视口坐标原点(0,0)设置在物理坐标点(x,y)。xycoord结构变量s返回原视口原点的物理坐标值。
  setcliprgn(x1,y1,x2,y2)
  子程序,定义图形字形的矩形显示区域(称为剪裁区)。物理坐标(x1,y1)和(x2,y2)是定义该区域矩形的左上角和右下角。setcliprgn不改变当前视口坐标系。
  setviewport(x1,y1,x2,y2)
  子程序,重新设置图形视口,其定义剪裁区的方法和setcliprgn相同,视口坐标的原点设置在点(x1,y1)。
  setwindow(finvert,wx1,wy1,wx2,wy2)
  将当前视口坐标系转换为窗口坐标系。参量(wx1,wy1)和(wx2,wy2)分别指定窗口的左上角和右下角。参量finvert指定坐标的方向,当取TRUE值时,y轴方向自下向上(笛卡尔坐标);取FALSE值时,y轴方向自上向下(屏幕坐标)。若调用成功,返回非零值;若调用失败,则返回0。
  getphyscoord(x,y,s)
  子程序,将视口坐标(x,y)转换为物理坐标,并在xycoord结构s中返回物理坐标。
  getvtiewcoord(x,y,s)
  子程序,将物理坐标(x,y)转换成视口坐标,并将该坐标返回到xycoord结构s中。
  getviewcoord-w(wx,wy,s)
  子程序,将窗口坐标(wx,wy)转换为视口坐标,并将该坐标返回到wxycoord结构参量s中。
  getwindowcoord(x,y,s)
  子程序,将视口坐标(x,y)转换为窗口坐标,并在wxycoord结构s中返回窗口坐标。
  getcurrentposion(s)
  getcurentposion-w(s)
  子程序,在xycoord或wxycoord结构参量s中返回当前图形输出位置的坐标。

3.3 调色板和颜色

  屏幕上的每种颜色都是用一个相应的“颜色索引”值来表示,“调色板”即是颜色索引值和实际显示色之前的映射(关联)。大多数方式仅支持一个调色板。标准色(缺省值)有16种(0~15),参见fgraph.fd。
  remappalette(index,color)
  将一个颜色索引index重新映射到颜色值color中。若调用成功,返回原颜色值;若调用失败,则返回-1。
  selectpapette(number)
  选择调色板。本函数仅适用于视频方式?MRES4 COLOR和?MRESNOCOLOR。
  getbkclolor ()
  返回当前背景色的值。
  setbkcolor(color)
  将当前背景色设置为颜色索引(或颜色值)。在彩色文本方式下,setbkcolor接收一个颜色索引,如setbkcolor(2);在彩色图形文式下,setbkcolor接收一个颜色值,如setbkcolor(GREEN)。
  getcolor\-()
  返回当前前景的颜色索引。
  setcolor(color)
  设置前景色。color是一个颜色索引。
  gettextcolor
  返回当前文本色的颜色索引。
  settextcolor(index)
  为outtext函数输出的文本设置颜色。在彩色文本方式下,index值的范围可以指定为0~31。0~15是标准色,而16~31颜色同0~15,但文本将出现闪烁。

3.4 图形的显示

  MS FORTRAN 的图形库允许用指定的坐标系来画出几何图形,它们使用当前背景色、前景色、线型和填充模式。
  getlinestyle ()
  返回当前线型模式数。线型是一个16位数,其中每位对应一个象素。若位值为零,则象素保持当前背景色,若位值为1,则象素被置为当前色。缺省线型模式是#FFFF(实线)。
  setlinestyle(mask)
  子程序,设置当前线型。
  getfillmask(mask)
  子程序,返回当前填充模式。填充模式是一个8×8位的数组,每位表示一个象素。若位值为零,则象素保持不变,若位值为1,则象素被赋值为当前色。
  setfillmask(mask)
  子程序,设置当前填充模式。
  clearscreen(area)
  子程序,用于清屏。参量area取得值有:?GCLEARSCREEN、?GVIEWPORT、?WINDOWS。
  rectangle(control,x1,y1,x2,y2)
  rectangle-w(control,wx1,wy1,wx2,wy2)
  画矩形,边界由左上角和右下角坐标定义。当参量control设置为?GFILLINTERIOR值时,矩形用当前颜色和填充模式填充,为?GBORDER值时则不填充。
  ellipse(control,x1,y1,x2,y2)
  ellipse-w(control,wx1,wy1,wx2,wy2)
  画椭圆。椭圆的中心是由左上角和右下角坐标定义的边界矩形的中心,大小则由矩形边界确定。control的意义见rectangle。
  polygon(control,lppoints,cpoints)
  polygon-w(control,lppoints,cpoints)
  画多边形。多边形的各个角点的坐标在xycoord或wxycoord结构数组lppoints中返回参量cpoints为多边形的角点的个数。
  lineto(x,y)
  lineto-w(wx,xy)
  从当前位置到指定点位置画一条直线。
  floodfill(x,y,boundary)
  floodfill-w(wx,wy,boundary)
  从指定坐标点开始使用当前颜色和填充模式对一个区域进行填充。参量boundary为定义区域边界线的颜色索引。
  moveto(x,y,s)
  moveto-w(wx,wy,s)
  子程序,将当前位置移动到指定点。
  getpixel(x,y)
  getpixel-w(wx,wy)
  返回一个指定点的颜色索引值。
  setpixel(x,y)
  setpixel-w(wx,xy)
  将指定点设置为当前色,相当于画点。

3.5 字形的显示

  registerfonts(filename)
 对字形文件进行“注册”,即读入指定的.fon文件,并将字形的头部信息装入内存中。参量filename是合法.fon文件的路径说明和文件名。MS FORTRAN共提供了六个.fon文件,分别保存Courier、Helv、Tms Rmn、Modern、Script和Roman六种字体的数据。本函数若调用成功,则返回注册的字形个数,若失败则返回一个负值。
  setfont(options)
  从已注册的字形集中找出一种字形作为当前字形。本函数若调用失败将返回一个负值。当前字形特征由字符型参量options指定,其选项代码有:
  t′fontname′  选择字体
  wx     字符宽度,x为象素个数
  hy     字符高度,y为象素个数
  f(或p)   仅选择一种固定(或比例)间距的字形
  v(或r)   仅选择一种向量(或光栅)映射字形
  b      自动选择最佳匹配字形
  nx     选择字形号x(单独使用)
  gefontinfo(fi)
  将当前字形特征返回到fontinfo结构fi中。本函数若调用成功则返回0。
  getgtextextent(text)
  确定字符串text以当前字形输出时的宽度。
  setgtextvector(x,y)
  子程序,指定字符串的输出方向。参量(x,y)的取值有:
  (1,0),缺省值,水平向右输出;
  (0,1),反时针旋转90度输出;
  (-1,0),反时针旋转180度输出;
  (0,-1),反时针旋转270度输出。
  outgtext(text)
  子程序,将字符串text输出到屏幕,包括尾部的空格。
  unregisterfonts
  子程序,释放由registenfonts函数分配和使用的内存空间。

3.6 文本的显示

  MS FORTRAN 图形库允许屏幕在文本方式和图形方式下可以显示文本。
  gettextposition(s)
  子程序,将当前文本位置返回到rccoord结构s中。
  settextposition(row,colummn,s)
  子程序,设置当前文本输出位置于(row,column)处,原文位置返回到rccoord结构s中。
  settextwindow(r1,c1,r2,c2)
  子程序,用行和列坐标重新定义文本输出窗口。
  outtext(text)
  子程序,将字串text以文本形式输出到屏幕,包括尾部的空格。

3.7 转换图象

  MS FORTRAN 图形库允许在内存和屏幕之间转换图象。利用这一功能可以在屏幕上绘出动画图。
  imagesize(x1,y1,x2,y2)
  imagesize-w(wx1,wy1,wx2,wy2)
  计算由边界矩形定义的图象所占内存字节数。
  getimage(x1,y1,x2,y2,image)
  getimage-w(wx1,wy1,wx2,wy2,image)
  子程序,把由指定边界矩形定义的图象保存在image指向的缓冲区中。
  putimage(x,y,image,action)
  putimage-w(wx,wy,image,action)
  子程序,将存贮在image中图象传送到屏幕。参量action取得?GPSET、?GPRESET、?GAND、?GOR、?XOR值之一。

4 说明
  (1)在编制图形应用程序时,开始可调用getvideoconfig检查系统的当前视频配置,以选择设置一种最合适的屏幕方式。而在退出应用程序前,应将屏幕设置为正常方式,以避免其它程序设置屏幕方式时产生潜在冲突。
  (2)MS FORTRAN 的图形库设置了三种图形坐标系。对于大多数应用程序(如气象资料的统计分析)而言,使用窗口坐标系,可以很方便地对数据进行比例变换,以便适应于屏幕的大小,直到取得满意、直观的图形效果。
  (3)许多图形函数如setivdeomode等,仅能在某种硬件或某种图形方式下有效,若使用非法硬件环境,则返回一错误代码。因此在调用时应注意检查返回值。
发表于 2005-10-11 12:10:28 | 显示全部楼层 来自 武汉大学

Re:【讨论】Fortran 与 C

嘿嘿,这个问题讨论了这么久啊,最近刚刚研究了一下IMSL,感觉fortran95就一个字,强!很多好的算法都有,也很好用!我自己也用fortran95写过windows的小程序,感觉vc和fotran各有千秋。vc和vf书写格式都可以用free form,只是在声明变量的时候vc可以在使用的时候声明,而fotran就必须写在可执行语句之前,个人觉得如果能改进一下这一点,就我个人使用而言fortran在使用上应该和c没有太大的差别。当然功能上两者还是偏重不同,用vc写图形,底层操作再好不过;而fortran丰富的资源和强大的数组操作对计算编程来说可以让我们事半功倍。还有一点就是vf系列和vc6.x系列是完全兼容的,也就是vc6.x中的c程序和fortran程序是可以放在一起编译连接的,用过以后感觉就是一个爽字。不过就是不知道现在都流行visual.net了,不晓得这个和后面的vf兼容性如何。希望下一代的vf能在windows编程这一块更加完善和简化一下,这样象偶们这样的就不用在两个中间跳来跳去了!
注意到现在很多关于fortran中goto的问题,都说goto破坏程序的完整性,可读性差。可是goto用的好的话,程序的效率会很高,因为用不着那么多的条件判断了,再说在计算程序中,很多地方不靠goto还真的很难实现。再说了在所谓的面向对象语言c++中不也一样保留了goto语句吗,说明还是有它的用途的。
关于图形和界面,vf可以通过调用api来实现,gdi和openg也都可以用l,写的好效果一点不比vc差,只是实现起来不如c来的方便。简单的可以直接用vf做, 复杂的建议还是选用别的,vc,vb,delphi什么都好。
发表于 2005-10-20 19:22:28 | 显示全部楼层 来自 新加坡

Re:【讨论】Fortran 与 C

恩,讨论了不少了呢。Fortran的还有一个重要优点:函数库非常丰富
youyou5909 该用户已被删除
发表于 2005-10-25 20:36:52 | 显示全部楼层 来自 北京
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-12-2 11:21:04 | 显示全部楼层 来自 江苏南京

Re:【讨论】Fortran 与 C

我想问一下哪儿可以下载到VISUAL  FORTRAN 6.1?
发表于 2005-12-8 16:20:42 | 显示全部楼层 来自 甘肃兰州

Re:【讨论】Fortran 与 C

网上一般找不到免费现成的,你可以通过北大天网的maze.exe系统去查找。maze是个软件名称,安装好,你从它里面收获fortran就可以找到。
发表于 2005-12-9 15:19:26 | 显示全部楼层 来自 湖南长沙

Re:【讨论】Fortran 与 C

我觉得C还是比较成为大众的选择
发表于 2005-12-13 15:19:03 | 显示全部楼层 来自 湖北武汉

Re:【讨论】Fortran 与 C

c在做界面方面确实要强一些.
我现在既要做c调用foatran的,有没有对此比较精通的,呵呵,指教一二啊.谢谢了!

qq:17860843
zhzhy 该用户已被删除
发表于 2006-2-5 19:01:41 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-4-28 18:34:54 | 显示全部楼层 来自 江苏南京
原帖由 freefrompassion 于 2005-10-11 12:10 发表
嘿嘿,这个问题讨论了这么久啊,最近刚刚研究了一下IMSL,感觉fortran95就一个字,强!很多好的算法都有,也很好用!我自己也用fortran95写过windows的小程序,感觉vc和fotran各有千秋。vc和vf书写格式都可以用fr ...


vc到.net也不怕啊,呵呵,安装,一个intel fortran,再打开.net编辑环境看看撒,fortran就自动集成到里面了,呵呵
zhangzhang 该用户已被删除
发表于 2006-6-20 22:05:53 | 显示全部楼层 来自 北京
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-7-28 12:52:46 | 显示全部楼层 来自 湖南株洲

我也说两句

你们去读读彭国伦的《FORTRAN95程序设计》,就知道什么叫做强大!!!!
发表于 2006-9-8 07:31:14 | 显示全部楼层 来自 山东济南
fortran语言在各种fotran编译平台移植性好,我最喜欢fortran77,因为年代久远,反而更加成熟,更好使.
我不排斥新的特性,我喜欢用准确无误,可靠的东西.
个人意见.
firehot 该用户已被删除
发表于 2006-9-8 12:41:13 | 显示全部楼层 来自 新疆阿克苏地区阿克苏
提示: 作者被禁止或删除 内容自动屏蔽
wanglei4228 该用户已被删除
发表于 2006-9-23 11:17:00 | 显示全部楼层 来自 安徽合肥
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-10-4 11:28:39 | 显示全部楼层 来自 广西南宁
我只是觉得在C里面好多算法都得自己去变成实现。太麻烦了。
发表于 2006-11-29 18:34:32 | 显示全部楼层 来自 江苏苏州
fortran的确在工程上很好用
所以现在的dephi也非常流行啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 18:01 , Processed in 0.046215 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表