最近在学习fortran语言,有的程序看不明白,求高手将下面两个fortran语言写的程序翻译成c语言或者c++!
(1)subroutinefopen(ich,sta,fname,irecl)subroutinefopen(ich,sta,fname,irecl)character*...
(1)
subroutine fopen(ich,sta,fname,irecl)
subroutine fopen(ich,sta,fname,irecl)
character*(*) sta
character *(*)fname
open(ich,file=fname,status=sta,form='unformatted', access='direct',recl=4*irecl)
end
call fopen(3,'unknown','rehuo.dat',(m+1))
CALL fOPEN(2,'huojian',fname,NP)
(2)
open(3,file='kl.dat',status='old',access='direct',recl=4*nb)
open(4,file='study.dat',status='unknown',access='direct',* recl=4*nb)
do j=ll1(i)-niter+1,ll1(i)+niter
read(1,rec=j)(x(k,j),k=1,nb)
write(2,rec=no)(x(k,j),k=1,nb)
c write(3,*)(x(k,j),k=1,nb) 展开
subroutine fopen(ich,sta,fname,irecl)
subroutine fopen(ich,sta,fname,irecl)
character*(*) sta
character *(*)fname
open(ich,file=fname,status=sta,form='unformatted', access='direct',recl=4*irecl)
end
call fopen(3,'unknown','rehuo.dat',(m+1))
CALL fOPEN(2,'huojian',fname,NP)
(2)
open(3,file='kl.dat',status='old',access='direct',recl=4*nb)
open(4,file='study.dat',status='unknown',access='direct',* recl=4*nb)
do j=ll1(i)-niter+1,ll1(i)+niter
read(1,rec=j)(x(k,j),k=1,nb)
write(2,rec=no)(x(k,j),k=1,nb)
c write(3,*)(x(k,j),k=1,nb) 展开
3个回答
展开全部
文件打开和读写Fotran 和 C 不能直接翻译和读写,特别是2进制文件。Fotran 有“记录”的概念。(另外也可能有大小端编码问题)。需要知道文件的详细结构,另辟思路去读写。
文本文件内容可见,好办点,2进制文件,难办。
(1)
void Fopen(FILE *fp, int *sta, char *fname){
fp = fopen(fname,"w+b");
if (!fp) *sta=0; else *sta = 1;
}
unknown 是文件可能存在也可能不存在(老文件或要建新文件),所以用w+ 可读可写可建。
记录长度不好办。你可以在读写的时候 用 fseek 移动文件读写位置。
(void) Fopen( fp3, &sta1,"rehuo.dat");
(void) Fopen(fp2, &sta2,fname);
(2)2进制文件读写用 fread() 和 fwrite() 函数,你查一下 函数用法。
原型:
fread ( void * ptr, size_t size, size_t count, FILE * stream );
fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
int x[M][N];
fread(&x[0][0],sizeof(int),M*N,fp1);
fwrite( ....);
------
read(1,rec=j)(x(k,j),k=1,nb) 读记录长度j ,共 nb 个数 到 x[k][j] 里。
FORTRAN 数组 按列排列,C 按行排列。 所以 它是1列1列读入。
文本文件内容可见,好办点,2进制文件,难办。
(1)
void Fopen(FILE *fp, int *sta, char *fname){
fp = fopen(fname,"w+b");
if (!fp) *sta=0; else *sta = 1;
}
unknown 是文件可能存在也可能不存在(老文件或要建新文件),所以用w+ 可读可写可建。
记录长度不好办。你可以在读写的时候 用 fseek 移动文件读写位置。
(void) Fopen( fp3, &sta1,"rehuo.dat");
(void) Fopen(fp2, &sta2,fname);
(2)2进制文件读写用 fread() 和 fwrite() 函数,你查一下 函数用法。
原型:
fread ( void * ptr, size_t size, size_t count, FILE * stream );
fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
int x[M][N];
fread(&x[0][0],sizeof(int),M*N,fp1);
fwrite( ....);
------
read(1,rec=j)(x(k,j),k=1,nb) 读记录长度j ,共 nb 个数 到 x[k][j] 里。
FORTRAN 数组 按列排列,C 按行排列。 所以 它是1列1列读入。
展开全部
神人啊!现在还有人学习fortran语言,实在很好奇为啥现在还有地方在用fortran,执行效率和编程效率都赶不上C了啊。难道是在老的小型机系统上用?
可惜我学是在2000年前学习的已经忘光了。不妨把这段程序要实现的目标功能给出来,重新按照C写应该很简单。
可惜我学是在2000年前学习的已经忘光了。不妨把这段程序要实现的目标功能给出来,重新按照C写应该很简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,关于fortran的优点这段干净利索、执地有声的话,从80年代末到现在忽悠了一代又一代人。每当看到有人背诵这一段书呆子气十足的话,我就想起“尽信书不如不读书”。 很多人早就实验论证过了:1、fortran能做的C都能做;C能做的fortran不一定做得到。2、C生成的程序效率比fortran高。不信分别反汇编看,空话无意义。3、全世界75%以上的UNIX、Linux服务器证明C无法保证健壮性是扯淡。4、用C的开发效率比比fortran高。
fortran仍然有很强生命力且会继续存在很长时间的原因根本不是这些所谓的优点,一代代闭门造车的老教授真是害人不浅,几十年都讲不到点子上。
一个参与过几十个C商业项目(科学计算)和几十个fortran商业项目的人
fortran仍然有很强生命力且会继续存在很长时间的原因根本不是这些所谓的优点,一代代闭门造车的老教授真是害人不浅,几十年都讲不到点子上。
一个参与过几十个C商业项目(科学计算)和几十个fortran商业项目的人
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询