主题:[讨论]求助:文件执行前一部分 后面执行不下去了,请问原因呢?
lgsh
[专家分:0] 发布于 2010-08-24 09:49:00
现在编辑一个程序时出现一个问题,整个程序是做“把两个存放有序输得文件归并成一个文件,此文件中的数仍有序存放”。
问题:执行时会出现只有前两个文件输出,第三个不能打印出来,我估计在标号30后的语句就执行不下去了,请帮忙看下谢谢,最好能分析下原因吧···
另外,标号100后的语句没什么问题,我照着老师的程序搞下来的。
回复列表 (共7个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-08-24 10:14:00
搞这么复杂干什么呢?这样不行么?
PROGRAM MAIN
INTEGER NREC
PARAMETER(NREC=10)
INTEGER A(NREC),B(NREC),C(2*NREC)
OPEN (UNIT=1,FILE='F1.DAT',STATUS='UNKNOWN')
OPEN (UNIT=2,FILE='F2.DAT',STATUS='UNKNOWN')
OPEN (UNIT=3,FILE='F3.DAT',STATUS='UNKNOWN')
DO 5 I=1,NREC,1
A(I)=INT(RAND()*9999)
5 CONTINUE
CALL SORT(A, NREC)
DO 10 I=1, NREC,1
WRITE(1,*) A(I)
10 CONTINUE
DO 15 I=1,NREC,1
B(I)=INT(RAND()*9999)
15 CONTINUE
CALL SORT(B,NREC)
DO 20 I=1, NREC,1
WRITE(2,*) B(I)
20 CONTINUE
DO I=1,NREC,1
C(I)=A(I)
C(I+10)=B(I)
ENDDO
CALL SORT(C, 2*NREC)
DO I=1, 2*NREC,1
WRITE(3,*) C(I)
ENDDO
END
SUBROUTINE SORT(A,N)
INTEGER A(N), P
WRITE(*,*) (A(I), I=1, N)
DO 10 J=1,N-1
P=J
DO 20 I=J+1,N
IF (A(I) .LT.A(P))THEN
P=I
ENDIF
20 CONTINUE
K=A(J)
A(J)=A(P)
A(P)=K
10 CONTINUE
WRITE (*,*) (A(I),I=1,N)
END
FUNCTION RAND()
SAVE SEED
INTEGER SEED,C1,C2 ,C3
PARAMETER (C1=29,C2=127,C3=1024)
DATA SEED/0/
SEED=MOD(SEED*C1+C2, C3)
RAND=REAL(SEED)/C3
END
板凳
jstzhurj [专家分:4680] 发布于 2010-08-24 13:54:00
再说了,你这每次得到一样的随机数,干什么用?有什么意义呢?
3 楼
lgsh [专家分:0] 发布于 2010-08-24 15:41:00
[quote]
再说了,你这每次得到一样的随机数,干什么用?有什么意义呢?[/quote]
我在跟别人学做程序呢,一时搞不出来,所以问问的,请问,我的那个是哪里出问题了呢, 您改的这个是不是f90版本的啊?
4 楼
jstzhurj [专家分:4680] 发布于 2010-08-24 16:43:00
问题出在
600 READ (UNIT=3,END=500) I
PRINT *, I
GOTO 600
这段上,改成
K=1
600 READ (UNIT=3,REC=K,IOSTAT=IO3) I
K=K+1
PRINT *, I
IF(IO3.NE.0) THEN
GOTO 500
ELSE
GOTO 600
ENDIF
即可运行,问题是你这这种方式能达到合并的效果吗?合并的一段程序思维相当的混乱!不会是你老师的杰作吧?
5 楼
lgsh [专家分:0] 发布于 2010-08-25 09:54:00
即可运行,问题是你这这种方式能达到合并的效果吗?合并的一段程序思维相当的混乱!不会是你老师的杰作吧?[/quote]
是按照徐红波老师的视频教程上面搞的,我只是想实践一下,我发现了,您就是高手,佩服!
6 楼
asymptotic [专家分:16630] 发布于 2010-08-25 10:55:00
1. 首先,徐红波老师的视频教程 上提供的程序是一个很“老古董”,不符合现代程序设计的理念;
2. 就排序算法而言,其所用的是一个很简单的“冒泡法”,效率很低;用此排序算法,得到两个“良序”序列;
3. 然后用 mergesort 将两个“良序”序列排序,这个算法可比“冒泡法”效率高多了。
作为菜鸟,先学基本的未尝不可,但到一定的“高度”后,要熟悉点 算法。
7 楼
lgsh [专家分:0] 发布于 2010-08-26 18:36:00
[quote]1. 首先,徐红波老师的视频教程 上提供的程序是一个很“老古董”,不符合现代程序设计的理念;
2. 就排序算法而言,其所用的是一个很简单的“冒泡法”,效率很低;用此排序算法,得到两个“良序”序列;
3. 然后用 mergesort 将两个“良序”序列排序,这个算法可比“冒泡法”效率高多了。
作为菜鸟,先学基本的未尝不可,但到一定的“高度”后,要熟悉点 算法。[/quote]
明白了,谢谢指教!看徐老师的教程,我是想熟悉一下Fortran编程的基本步骤,然后根据我自己的课题需求再编一些程序,有点困难啊,不过有了这个论坛,好多了···
我来回复