回 帖 发 新 帖 刷新版面

主题:开个贴回答Fotran 的问题

开个贴试着回答Fortran的问题。有问题的请跟贴。
有两种问题不想回答:
1. Fortran文件读取方面的问题。
2. Fortran程序调试或者找程序中的错误。

回复列表 (共83个回复)

21 楼

1

22 楼

回19楼,没有明白原始位置是什么意思。是不是原始数组?
尝试解答一下(以下面程序为例):
A1: 待排序数组;
A2: 记录排序后数组的索引;
A2   : sort the array index in A1 before sort...
write(*,*) A1;     ! get the array before sort
write(*,*) A1(A2): !get the array after sort.
不知道是否是你想要的。


SUBROUTINE I4SORTP (N,X,P, ORDER)
IMPLICIT NONE
INTEGER(KIND=4)               ,INTENT(IN   )::N;
INTEGER(KIND=4),DIMENSION(1:N),INTENT(IN   )::X;
INTEGER(KIND=4),DIMENSION(1:N),INTENT(  OUT)::P;
INTEGER(KIND=4)               ,OPTIONAL     ::ORDER;
!---------------------------------------------------------------------------------------------------------------------
!OPTIONAL ARGUMENT
!---------------------------------------------------------------------------------------------------------------------
INTEGER(KIND=4)   ::iOrder,i,pLOC(1),maskVal;

IF( PRESENT(ORDER) == .FALSE.) THEN
    iOrder = -1;
ELSE
    iOrder = order;
ENDIF

if( iOrder == -1)THEN
    pLOC  = MINLOC(X); 
    P(1)  = pLOC(1);
    maskVal =X(pLoc(1));
ELSE
    pLOC  = MAXLOC(X); 
    P(1)  = pLOC(1);
    maskVal =X(pLoc(1));    
ENDIF

DO  I=2,N

    if( iOrder == -1)THEN
        pLOC  = MINLOC(X,X > maskVal); 
    ELSE
        pLOC  = MAXLOC(X,X < maskVal); 
    ENDIF
    
    P(i) = pLOC(1);
    
    maskVal = X(pLOC(1));
    


ENDDO

END SUBROUTINE


PROGRAM MAIN
INTEGER ::A1(4),A2(4);
LOGICAL ::in(4);
A1 =(/1,3,2,4/);

CALL I4SORTP(4,A1,A2);
WRITE(*,*) A1;
WRITE(*,*) A1(A2);

END

23 楼

首先感谢楼主,原始位置就是数组原来的位置,比方说A=(/1.2,6.6,4.2,7.3,2.5/)排完序后想输出B=(/1.2,2.5,4.2,6.6,7.3/)和I=(/1,5,3,2,4/),I(i)记录B(i)在原来数组中的位置,谢谢啦

24 楼

回23楼。 在22楼已经给出了程序(稍微改下就行):
A= A1;
B= A1(A2)
I= A2

25 楼

感谢楼主啊,呵呵

26 楼

今天纯属蛋疼,把C和Fortran混编的程序用gdb载入进来想看看可以调试否,结果发现直接到gfortran的lib里去了,貌似不大好使,不知道对于混编的情况,怎么载入程序才可以调试啊?

27 楼

请问一下:Fortran程序可以定时运行不?类似计划任务。

28 楼

回26楼,gdb没用过,只用过ns 2008 的IDE.

29 楼

回27楼,把fortran程序编译成可执行文件,然后再计划任务里执行?

30 楼

不好意思,没有说清楚,我想问的是:比如一个fortran程序打开在那里,让其中的子程序每隔1小时运行一次,运行完了这个程序依然不关闭,到下一个小时再运行。

我来回复

您尚未登录,请登录后再回复。点此登录或注册