回 帖 发 新 帖 刷新版面

主题:求高手指点一下,这个数组查找,比较,输出怎么实现啊?

比较第一列的数值,如果没有相同的输出此行的数值;如果第一列有相同的值时时,则比较最后一列的数值,输出最后一列数值较大的那一行的数值。
最后要求输出一个第一没有相同数值的数组。
整个数组的行数不定,列数是确定的6列,

回复列表 (共8个回复)

沙发

看你举步维艰!

板凳


我只会把整个数组按照最后一列从大到小排序,然后再输出。想a(i,1)重复的不输出,但不知道怎么实现。
头大啊!以前没接触过编程这东西,现在计算完了要处理数据就头大了!!

3 楼


程序贴出来,修改试试。

4 楼


我用了一个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 楼

[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 楼


我只会整体排序。还没想到其他办法

7 楼

慢慢想,这个不难

8 楼


在计算机中的浮点数不建议直接比较是否相等,由于计算机的存取误差。
可以认为两个数的差的绝对值小于一个很小的数就认为相等。

我来回复

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