求一个简单的fortran循环程序示例

求一个简单的fortran循环程序示例,第1张

program main

implicit none

integer::i

real::a(1000)=(/(i,i=1,1000)/)

a=2a

write(,)a

pause

endprogram

一百万的数组我机子带不动,先给一千你试试,要一百万自己把一千改成一百万。

VS下fortran的运行点完启动以后都是这样的,命令窗口都是一闪而过,因为他已经帮你一条龙完成了编译和生成。你的情况其实已经是运行成功后会显示的一堆东西了。

如果希望看到那个熟悉的黑黑的命令运行窗,可以这样 *** 作:

点‘启动’----》无错误且黑框闪过后,点工具栏的‘调试’--->‘开始执行,不调试’。

这样就能看到了。

num=ichar(s(i,i))+key

改为

num=ichar(s(i:i))+key

即把逗号改为冒号

如还有问题,请复制粘贴代码(而不是截图,因为不能复制粘贴,我懒得打代码)

确实写的一塌糊涂,真不是一两句话就能给你说请的。鉴于你的情况,下面给你一些基本的建议。

1、永远不要想一口吃个胖子。许多初学者都爱犯一个错误,就是想一口气从头写到尾,这是非常错误的编程习惯。再优秀的程序员,写程序也是一步一步写的,因为程序设计遵从的是严格的逻辑,所以你需要确保你第一个模块或者步骤写对了,再去写第二个的,而不是一口气写完,这样再去查报错原因会花费额外的大量的时间。

2、认真看报错,除非你是个女生。不看报错内容这种情况,一般大多发生在女生身上,这个经我多年经历好像确实也没什么办法。但报错其实大多都是英文大白话,如果没有耐心看的话是没法调试程序的。

3、你误解了fortran的子程序和函数。fortran和C语言族不同,fortran的子程序是subroutine,自定义函数是function,二者功能完全不一样。subroutine自身不能返回值,你也不能对它赋值。从你的程序看,你想使用的都是function而不是subroutine,具体用法请查阅资料和例子多看看。

4、你的程序中存在大量的重复定义的变量,这说明你并没有耐心的去查看自己写的程序。切记耐心是最基本的素质。

5、external不是你这种用法,多数情况下也用不到,就不要再用了。

根据你的描述,在每行中只需要判断三次,并作相应的位置调整即可:

若1,2相等,则不管3是不是和1,2 相等,都不需要调整三个数的位置;

若1,3相等,则不管2是不是和1,3相等,只需要调整2和3的位置;

若2,3相等,则不管1是不是和2,3相等,只需要调整1和3的位置;

则编程思路如下:

PROGRAM main

IMPLICIT NONE

INTEGER,PARAMETER::Col=3

INTEGER::i,j,Line,err

REAL8,ALLOCATABLE::A(:,:)

REAL8::temp,errf

errf=10E-8                                         !判断两实数是否相等

Line=100                                             !输入文件的列数

ALLOCATE(A(Line,Col),stat=err)       !开辟空间

IF(err/=0)GOTO 997

OPEN(10,file='1txt')                             !指定输入文件名

READ(10,)((A(i,j),j=1,Col),i=1,Line)    !读入文件中的数据

CLOSE(10)                                          !关闭文件

DO i=1,Line                                          !逐行判断行内的三个数是否需要交换

    IF(abs(A(i,1)-A(i,2))>errf)THEN            !若条件不满足,则一、二相等,结束当前行判断进入下一行;若条件满足,则一、二不等,需判断其他情况。

        IF(abs(A(i,1)-A(i,3))>errf)THEN         !若条件不满足,则一、三相等,交换二、三位置,结束当前行判断进入下一行;若条件满足,则一、三不等,需判断其他情况。

            IF(abs(A(i,2)-A(i,3))>errf)THEN     !若条件不满足,则二、三相等,交换一、三位置,结束当前行判断进入下一行;若条件满足,则二、三不等。且此时已判断出一、二、三全不等,不交换位置。

                WRITE(,)"第",i,"行没有相等的实数"

            ELSE

                temp=A(i,1)

                A(i,1)=A(i,3)

                A(i,3)=temp

            ENDIF

        ELSE

            temp=A(i,2)

            A(i,2)=A(i,3)

            A(i,3)=temp

        ENDIF

    ENDIF

ENDDO

OPEN(10,file='2txt')                   !指定输出文件名

WRITE(10,)((A(i,j),j=1,Col),i=1,Line)  !向文件中写数据

CLOSE(10)                               !关闭文件

GOTO 1000

997 WRITE(,)"PROGRAM开辟数组时内存不足"

STOP

1000END PROGRAM main

算例,(只给了5行数据):

1txt

01     01     20

02     03     02

04     06     06

08     05     06

04     04     04

2txt

0100000000000000       0100000000000000        200000000000000    

  0200000000000000       0200000000000000       0300000000000000    

  0600000000000000       0600000000000000       0400000000000000    

  0800000000000000       0500000000000000       0600000000000000      

  0400000000000000       0400000000000000       0400000000000000    

以上就是关于求一个简单的fortran循环程序示例全部的内容,包括:求一个简单的fortran循环程序示例、在VS2012里编写Fortran简单程序出错、一个Fortran加密的简单程序,照着书上来的,但却报错。代码和原因如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9494214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存