主题:求高手指点一下,这个数组查找,比较,输出怎么实现啊?
小艾rain
[专家分:0] 发布于 2010-10-18 11:18:00
比较第一列的数值,如果没有相同的输出此行的数值;如果第一列有相同的值时时,则比较最后一列的数值,输出最后一列数值较大的那一行的数值。
最后要求输出一个第一没有相同数值的数组。
整个数组的行数不定,列数是确定的6列,
回复列表 (共8个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-10-18 11:30:00
看你举步维艰!
板凳
小艾rain [专家分:0] 发布于 2010-10-18 12:04:00
我只会把整个数组按照最后一列从大到小排序,然后再输出。想a(i,1)重复的不输出,但不知道怎么实现。
头大啊!以前没接触过编程这东西,现在计算完了要处理数据就头大了!!
3 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 12:23:00
程序贴出来,修改试试。
4 楼
小艾rain [专家分:0] 发布于 2010-10-18 12:40:00
我用了一个12x6的小数组尝试着弄的,只会做到按最后一列排序,但不知道输出的时候怎么做到第一列数值与前面的相同时不再输出了。
data.txt
1 0.12245E-13 0.51491E-14 0.0000 0.12245E-13 0.10649E-13
1 -0.48738E-08-0.12684E-06-0.28316E-06 0.27828E-06 0.24161E-06
1 -0.53988E-08-0.13900E-06-0.28746E-06 0.28206E-06 0.24439E-06
1 0.0000 -0.69041E-14-0.12649E-13 0.12649E-13 0.10970E-13
2 -0.53988E-08-0.13900E-06-0.28746E-06 0.28206E-06 0.24439E-06
2 0.23034E-13 0.91088E-14 0.0000 0.23034E-13 0.20093E-13
2 -0.48738E-08-0.12684E-06-0.28316E-06 0.27828E-06 0.24161E-06
2 0.0000 -0.86712E-14-0.20359E-13 0.20359E-13 0.17696E-13
3 0.0000 -0.13819E-13-0.28327E-13 0.28327E-13 0.24535E-13
3 -0.76558E-08-0.23396E-06-0.64909E-06 0.64143E-06 0.56346E-06
3 -0.69142E-08-0.21224E-06-0.64343E-06 0.63652E-06 0.56269E-06
3 0.24371E-13 0.12293E-13 0.0000 0.24371E-13 0.21106E-13
program
program a02
implicit none
integer, parameter :: m=12
real :: a(m,6), tmp(m,6)
integer ::i,j
open(unit=10, file='data.txt',access="sequential", status="old")
read (10,"(f8.0,e13.5,4e12.5)") ((a(i,j),j=1,6),i=1,m)
do i=1,m
do j=i+1,m
if (a(i,6)<a(j,6)) then
tmp(j,:) = a(j,:)
a(j,:) = a(i,:)
a(i,:) =tmp(j,:)
end if
end do
end do
open(unit=20, file='output.txt', status="replace")
write(*,"(f8.0,e13.5,4e12.5)") ((a(i,j),j=1,6),i=1,m)
stop
end
5 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 13:03:00
[quote]
我用了一个12x6的小数组尝试着弄的,只会做到按最后一列排序,但不知道输出的时候怎么做到第一列数值与前面的相同时不再输出了。
data.txt
1 0.12245E-13 0.51491E-14 0.0000 0.12245E-13 0.10649E-13
1 -0.48738E-08-0.12684E-06-0.28316E-06 0.27828E-06 0.24161E-06
1 -0.53988E-08-0.13900E-06-0.28746E-06 0.28206E-06 0.24439E-06
1 0.0000 -0.69041E-14-0.12649E-13 0.12649E-13 0.10970E-13
2 -0.53988E-08-0.13900E-06-0.28746E-06 0.28206E-06 0.24439E-06
2 0.23034E-13 0.91088E-14 0.0000 0.23034E-13 0.20093E-13
2 -0.48738E-08-0.12684E-06-0.28316E-06 0.27828E-06 0.24161E-06
2 0.0000 -0.86712E-14-0.20359E-13 0.20359E-13 0.17696E-13
3 0.0000 -0.13819E-13-0.28327E-13 0.28327E-13 0.24535E-13
3 -0.76558E-08-0.23396E-06-0.64909E-06 0.64143E-06 0.56346E-06
3 -0.69142E-08-0.21224E-06-0.64343E-06 0.63652E-06 0.56269E-06
3 0.24371E-13 0.12293E-13 0.0000 0.24371E-13 0.21106E-13
program
program a02
implicit none
integer, parameter :: m=12
real :: a(m,6), tmp(m,6)
integer ::i,j
open(unit=10, file='data.txt',access="sequential", status="old")
read (10,"(f8.0,e13.5,4e12.5)") ((a(i,j),j=1,6),i=1,m)
do i=1,m
do j=i+1,m
if (a(i,6)<a(j,6)) then
tmp(j,:) = a(j,:)
a(j,:) = a(i,:)
a(i,:) =tmp(j,:)
end if
end do
end do
open(unit=20, file='output.txt', status="replace")
write(*,"(f8.0,e13.5,4e12.5)") ((a(i,j),j=1,6),i=1,m)
stop
end
[/quote]
为啥整体排序呢?
6 楼
小艾rain [专家分:0] 发布于 2010-10-18 13:06:00
我只会整体排序。还没想到其他办法
7 楼
songquan [专家分:110] 发布于 2010-10-18 13:23:00
慢慢想,这个不难
8 楼
xzloooooooo [专家分:0] 发布于 2010-10-18 15:01:00
在计算机中的浮点数不建议直接比较是否相等,由于计算机的存取误差。
可以认为两个数的差的绝对值小于一个很小的数就认为相等。
我来回复