|
本帖最后由 Kieran 于 2023-6-19 10:15 编辑
大家好,
我有一个数据文件。内容如下。 [Fortran] 纯文本查看 复制代码 03 | 0.2951429939E+02 0.0000000000E+00 0.0000000000E+00 |
04 | 0.0000000000E+00 0.1500000000E+02 0.0000000000E+00 |
05 | 0.0000000000E+00 0.0000000000E+00 0.2510000038E+02 |
07 | 0.000000000 0.500000000 0.300000012 |
08 | 0.041669998 0.500000000 0.328289986 |
09 | 0.041669998 0.500000000 0.384860009 |
10 | 0.000000000 0.500000000 0.413150012 |
11 | 0.000000000 0.500000000 0.469720006 |
12 | 0.041669998 0.500000000 0.498010010 |
13 | 0.041669998 0.500000000 0.554579973 |
14 | 0.000000000 0.500000000 0.582870007 |
15 | 0.083329998 0.500000000 0.300000012 |
16 | 0.125000000 0.500000000 0.328289986 |
17 | 0.125000000 0.500000000 0.384860009 |
18 | 0.083329998 0.500000000 0.413150012 |
19 | 0.083329998 0.500000000 0.469720006 |
20 | 0.125000000 0.500000000 0.498010010 |
我想重排各行的位置。重排标准是,先按每行中的第一数据,由小到达排列。如果有两行,或者多行的第一个数据相等,则按第二个数据由小到大重排这些行的位置。如果有两行,或者多行第二个数据也相等,则按第三个数据重排各行位置。 这是我的代码。[Fortran] 纯文本查看 复制代码 01 | PROGRAM COMPAIMPLICIT NONE |
03 | INTEGER , PARAMETER :: dp = SELECTED_REAL_KIND ( 15 , 14 ) |
05 | REAL ( KIND = dp ) :: ap ( 116 , 6 ) , lr ( 3 , 3 ) , pl ( 3 ) , ns ( 2 , 116 ) |
07 | OPEN ( UNIT = 3 , FILE = 'data.dat' , STATUS = 'OLD' ) |
11 | READ ( UNIT = 3 , FMT = * ) pl |
16 | READ ( UNIT = 3 , FMT = * ) pl |
22 | ap ( i , 1 ) = ap ( i , 4 ) * lr ( 1 , 1 ) + ap ( i , 5 ) * lr ( 2 , 1 ) + ap ( i , 6 ) * lr ( 3 , 1 ) |
23 | ap ( i , 2 ) = ap ( i , 4 ) * lr ( 1 , 2 ) + ap ( i , 5 ) * lr ( 2 , 2 ) + ap ( i , 6 ) * lr ( 3 , 2 ) |
24 | ap ( i , 3 ) = ap ( i , 4 ) * lr ( 1 , 3 ) + ap ( i , 5 ) * lr ( 2 , 3 ) + ap ( i , 6 ) * lr ( 3 , 3 ) |
29 | IF ( ( ap ( i , 1 ) < ap ( j , 1 ) ) .OR. & |
30 | ( ( ap ( i , 1 ) == ap ( j , 1 ) ) .AND. ( ap ( i , 2 ) < ap ( j , 2 ) ) ) .OR. & |
31 | ( ( ap ( i , 1 ) < ap ( j , 1 ) ) .AND. ( ap ( i , 2 ) == ap ( j , 2 ) ) .AND. & |
32 | ( ap ( i , 3 ) < ap ( j , 3 ) ) ) ) THEN |
42 | OPEN ( UNIT = 4 , FILE = 'compare.dat' , STATUS = 'UNKNOWN' ) |
45 | IF ( ns ( 1 , j ) == i ) WRITE ( UNIT = 4 , FMT = * ) ns ( : , j ) , ap ( j , 1 : 3 ) |
运行后,输出的重排结果如下。
[Fortran] 纯文本查看 复制代码 01 | 1.0000000000000000 1.0000000000000000 0.0000000000000000 7.5000000000000000 7.5300004152000044 91.000000000000000 3.0000000000000000 1.2298607965527013 7.5000000000000000 9.6599863721468040 |
02 | 91.000000000000000 4.0000000000000000 0.0000000000000000 7.5000000000000000 10.370065458197006 |
03 | 91.000000000000000 5.0000000000000000 0.0000000000000000 7.5000000000000000 11.789972329093603 |
04 | 91.000000000000000 6.0000000000000000 1.2298607965527013 7.5000000000000000 12.500051440243805 |
05 | 91.000000000000000 7.0000000000000000 1.2298607965527013 7.5000000000000000 13.919957533040389 |
06 | 91.000000000000000 8.0000000000000000 0.0000000000000000 7.5000000000000000 14.630037397190604 |
07 | 91.000000000000000 9.0000000000000000 2.4594265091401013 7.5000000000000000 7.5300004152000044 |
08 | 92.000000000000000 2.0000000000000000 1.2298607965527013 7.5000000000000000 8.2400787733501950 |
09 | 93.000000000000000 11.000000000000000 3.6892874237500002 7.5000000000000000 9.6599863721468040 |
很显然,这个排序时错误的,但我没找到程序里的错误。能麻烦大家帮我看下,我的代码哪里出了错误码?谢谢。
谢谢。
|
|