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

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

[复制链接]
发表于 2007-5-1 23:40:57 | 显示全部楼层 来自 加拿大
原帖由 fuzzybear 于 2006-11-29 18:34 发表
fortran的确在工程上很好用
所以现在的dephi也非常流行啊


But Delphi uses pascal language.
发表于 2007-5-20 12:41:02 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
Fortran还是不错的,新发布的2003标准全面支持面向对象的编程,估计其编译器在1-2年会出来;现在的Intel Fortran 9.1已经可以支持部分的2003标准,所以Fortran还是挺强的,速度快,易学;

另外,common,goto语句早已经过时了,现在的Fortran基本具有与C++相似的现代语言的特征
回复 不支持

使用道具 举报

发表于 2007-5-20 15:44:49 | 显示全部楼层 来自 陕西西安
看了高手的討論真是受教了啊
回复 不支持

使用道具 举报

发表于 2007-5-26 11:04:55 | 显示全部楼层 来自 美国
我最喜欢fortran里的多维数组功能了,特别是subroutine的时候
回复 不支持

使用道具 举报

发表于 2007-5-28 09:14:40 | 显示全部楼层 来自 吉林吉林
看看Fortarn95就会知道,Fortran有了很大的改进,因为他的速度快,应该是一个很好的编程语言!
回复 不支持

使用道具 举报

发表于 2007-5-28 17:16:28 | 显示全部楼层 来自 安徽合肥

紧急求救!--关于用VC调用VF动态链接库的问题,急急啊!

关于用VC调用VF动态链接库的问题,急急啊!

请教高手:我在vc++中调用vf写的动态链接库dll时碰到这样一个问题,当在vf中调用了sin函数时,
做成的dll不能在vc中运行,但是当把sin函数去掉时,做成的dll文件可以在vc中运行,而在vf里常用到一些内部函数,
关于这个问题我找了很多资料也得不到解决,所请高手指教,fortran程序如下:
SUBROUTINE aaa(a,b,c)
$ATTRIBUTES DLLEXPORT :: aaa
$ATTRIBUTES VALUE :: b
INTEGER a,i,j
REAL(4) c(2)
real,INTRINSIC :: SIN

c(1)=a*1.0
c(2)=SIN(b*3.14159/180.)
END SUBROUTINE

另:如果把sin函数中的b换成数值1.0,做成的动态链接库也可以运行。

首先谢谢各位的赐教,不胜感激!

我的邮箱是: qiangliu@iflytek.com
0551-5331887

-----------------------------------
具体程序如下:

在fortran 里指定了a,b是用值传递,而c是地址传递
SUBROUTINE BBB(a,b,c)
!DEC$ATTRIBUTES DLLEXPORT :: BBB
INTEGER a
REAL b,c(2)
!DEC$ATTRIBUTES VALUE :: a
!DEC$ATTRIBUTES VALUE :: b
!DEC$ATTRIBUTES REFERENCE :: c

INTEGER i,j

real,INTRINSIC :: SIN

c(1)=a*1.0
c(2)=SIN(b*3.14159/180.)
END SUBROUTINE
在vc中调用如下:
        HINSTANCE hIns;
        hIns = LoadLibraryEx("aaa.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);

        typedef  int (*MYPROC)(int &a, float b, float c[2]);
        MYPROC fun= (MYPROC)GetProcAddress(hIns,"_BBB@12");

        int a=5;
        float b=float(4.2) ;
        float c[2] ;
        fun(a,b,c);
//        a=b;
        CString str;
        str.Format("%f",c[1]);
        MessageBox(str);

如有不明白的地方,和我联系哦,这个问题困饶好长时间没有解决,望各位大侠能够帮忙一下!首先感谢了啊!
回复 不支持

使用道具 举报

发表于 2007-6-8 18:06:28 | 显示全部楼层 来自 江苏盐城
FORTRAN的复数计算很强大呀~~
回复 不支持

使用道具 举报

发表于 2007-6-12 20:09:18 | 显示全部楼层 来自 湖南长沙
我开始使用就抛弃77,从90开始,都没有遇到楼上的情况,全局变量用COMMON解决,动态数组用ALLOCATE解决,至于GOTO那都是77的咚咚
90还是很方便的
回复 不支持

使用道具 举报

发表于 2007-7-3 19:05:07 | 显示全部楼层 来自 黑龙江哈尔滨
我经常用Fortran,偶尔用C++,所以也想说两句,重点说Fortran相对于C++的优缺点(不对的话请不要拍砖)。

1.F的数组确实是C++没有办法比的,虽然现在C++的Matrix class到处都有(Matrix class是底层类,所以代码重用性很好,医学的人编的学土木的也能直接用),所以矩阵直接+、-、*、逆等运算Fortran不比C++强,唯一在此方面强的是F中可以随便拿出矩阵的一部分(行、列呀,或行中的某几个数啊)然后再进行运算。C++的Matrix class目前还没这么灵活,或者至少写个长点的式子才行,不像F,A(3:5)一下就就搞定了。对于外加库,现在F有的数值库,C++也都有相应的版本;

2.对于矩阵维数F也不比C++强,只是C++中你定义一个5维的矩阵,赋值就累死你了,此时就是要看看Matrix class里有没有大于2为数组的运算了;

3.运算速度:对相同问题F=1.2C++,这是很多研究者公认的,也是被检测过的。但是程序的运算速度和编译器,编写代码的习惯也有很大关系,所以一般人自己编程序感觉不到差别的;

4.代码重用性,F远不如C++,C++的面向对象确实比F强很多很多,F的面向对象还是大家的梦想,F2003确实很及时,如果F在5年之内还没有面向对象的功能,F的用户就走光了(我就是作有限元的,深有体会);

5.C++的编译器发展很快,主要是Microsoft强悍的支持,F的就不行了,2004年发布的2003标准都3年了,现在大家还是在期望之中;

6.关于高性能计算,F比较好,但是C(不是C++)也有类似于HPF的版本,叫UPC,所以两者实际上差不太多的(C也不是面向对象,F也不是,F比C稍快点),F95/2003中对并行的支持实际非常有限,F2008是个大的进步,但是不知何时才有编译器出来,呵呵;

7.C++可以开发软件的全部,而F只能作核心计算部分的编写。C++的数据类型要比F多好几种,并且现在复数运算在C++中也可以直接定义实现了;

8.内存垃圾F是不自动清除的,但是想在的C++好像可以自动清除(有点不确定),Java肯定是自动清除的,所以在这个层面来讲F比较弱;

9.除了数值方面,F都是在向C++学的;

10.F有大量可参考的代码,我感觉也不是什么优势,因为C++的可参考代码也很多,而且一个值得指出的地方是C++的代码都比较新;

11.还有要说的是F经常被说什么数据严谨、风格严格、当初设计就是为了数值计算的(要知道设计时是60和70年代,估计要还是当初的设计早就落后的不可就要了)等等等的,感觉其它语言也是这样啊,并不能把这一类的东西作为F的优点(因该说是不实在的优点 呵呵);

综上,F的优点是数组运算稍强于C++,速度比C++快,其它的都和C++持平或较差,我想这是个客观的评价吧!因为这两个小优点,我就一直用着F,当然面向对象和编译器的不好用也是俺的悲哀。

个人建议,作研究用F还是挺好的(上手快),如果想编商业化有限元软件还是C++是首选,这一点可以从近10年来新出现的数值分析软件中看出来(F2003可能会稍微缓解一下这个问题),牺牲点效率换回短时间的开发和维护(因为编译器好)是值得的。
回复 不支持

使用道具 举报

发表于 2007-7-30 00:05:05 | 显示全部楼层 来自 山东潍坊
都是高手,正在学用Fortran编FEM,望不要半途而废,立此为志!
回复 不支持

使用道具 举报

发表于 2007-7-30 17:33:02 | 显示全部楼层 来自 山西太原
我觉得fortran也不错哦
回复 不支持

使用道具 举报

发表于 2007-8-13 16:00:34 | 显示全部楼层 来自 北京
原帖由 aero 于 2005-7-26 17:33 发表
最讨厌fortran的common语句和goto

c和fortran在数值计算领域最大的区别就是数组的存取方式:一个是行格式而另一个是列格式

不敢苟同,我认为这两个语句是Fortran的精华。不要老拿以前的、别人的说法看问题。现在所谓结构化,我觉得本质上和goto一脉相承。goto无非会造成程序混乱,但是会造成不等于一定造成,如果用好了,功能非常强大!
回复 不支持

使用道具 举报

发表于 2007-11-24 02:16:55 | 显示全部楼层 来自 陕西西安

回复 #13 继往开来 的帖子

貌似很久就看过了
回复 不支持

使用道具 举报

发表于 2007-11-24 08:58:39 | 显示全部楼层 来自 陕西西安
讨论的都很深入 谢谢了
回复 不支持

使用道具 举报

发表于 2007-12-11 20:52:20 | 显示全部楼层 来自 北京
是呀
我想问一下
谁有有限元分析的源代码呀?
回复 不支持

使用道具 举报

发表于 2008-1-31 10:03:53 | 显示全部楼层 来自 广东东莞
don't support to use COMMAND GOTO generally
unless it must be used
回复 不支持

使用道具 举报

发表于 2008-3-7 08:26:38 | 显示全部楼层 来自 山东青岛
两者混编可以拟补二着的差别于不足
回复 不支持

使用道具 举报

发表于 2008-3-13 19:57:12 | 显示全部楼层 来自 甘肃兰州
受益匪浅啊!
回复 不支持

使用道具 举报

发表于 2008-3-23 11:19:41 | 显示全部楼层 来自 重庆沙坪坝区
讨论的很热烈,正在接触fortran,看了上面的讨论获益不少。
回复 不支持

使用道具 举报

发表于 2008-4-7 17:40:14 | 显示全部楼层 来自 江苏无锡
看了半天大家的讨论,结论似乎是Fortran, C++都很强大,相互都在取长补短,不断进步,所以关键是根据需要选择用Fortran or C++?
呵呵,本人门外汉一个,正准备学Fortran and C++,先对两种语言有个大致了解,看来学Fortran先阿,容易学,对吗?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 10:57 , Processed in 0.042668 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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