回 帖 发 新 帖 刷新版面

主题:[讨论]关于定义一个100*100*100的三维数组的问题

real::x(:),y(:),z(:)
call random_seed()
do i=1,100
   call random_number(x(i))
   call random_number(y(i))
   call random_number(z(i))
enddo
这是我定义的一个空间三维数组,要求空间中的每个点都是随机的,但是出现以下错误:
error 1055 - Z is not a dummy argument, or a POINTER or ALLOCATABLE array, so cannot be assumed-shape
error 1055 - Y is not a dummy argument, or a POINTER or ALLOCATABLE array, so cannot be assumed-shape
error 1055 - X is not a dummy argument, or a POINTER or ALLOCATABLE array, so cannot be assumed-shape

回复列表 (共11个回复)

沙发

我用point(x(:),y(:),z(:))定义了反而错的更多。。。

板凳

x y z 数组必须给出明确的大小。

不能用 real x(:),y(:),(z)

这样的。

如果你想用可变的数组,请使用 allocatable 语句。

否则,只能对虚参进行这样的声明。

而且这是三个一维数组,不能称呼为“三维数组”

3 楼

我把它改成下面这个了
real,allocatable::x(:,:,:)
call random_seed()
allocate( x(100,100,100) )
do i=1,100
  do j=1,100
    do k=1,100
      call random_number(x(i,j,k))
    enddo
  enddo
enddo
但是这个三维数组某2点之间的距离怎么计算啊?比如x(1,1,1)这一点和x(1,1,2)之间的距离

4 楼

l = sqrt( x * x + y * y + z * z )

5 楼

[quote]l = sqrt( x * x + y * y + z * z )[/quote]
不对啊,比如x(1,1,1)=12,x(1,1,2)=14,他们之间的距离怎么算?x(i,j,k)不是代表三维坐标,只是代表三维空间中的某点

6 楼

不同的点如何区别?难道不是用坐标么?

sqrt( (1-1)**2 + (1-1)**2 + (1-2)**2 )

如果不是这样的。那这个问题就不是 Fortran 的问题了,而是你的算法问题。

我不知道你期望的意图,不知道你期望用什么量表达什么意思。

但是两点的距离就是这么算的。

[quote]
x(i,j,k)不是代表三维坐标,只是代表三维空间中的某点[/quote]

程序不能表达一个点,一个杯子,一个桌子,一个房间。

程序里没有这些元素,你只能用这些东西的某些属性来在程序中被表示。

7 楼


real,allocatable::x(:,:,:)
call random_seed()
allocate( x(100,100,100) )
do i=1,100
  do j=1,100
    do k=1,100
      call random_number(x(i,j,k))
    enddo
  enddo
enddo
那看来用上述方法来随机生成一组三维坐标不行了啊,这个只能生成三维随机数组,但是怎么用fortran生成三维坐标啊?在网上看到用VC生成坐标的方式是这样的:
#include <time.h> 
struct 3DPoint
{
   int x;
   int y;
   int z;
};

3DPoint pt[100];

void PtCreate()
{
   srand((unsigned)time(NULL));
   for(int i=0;i<100;i++)
   {
       pt[i].x = rand()%100;
       pt[i].y = rand()%100;
       pt[i].z = rand()%100;
   }
}
生成100*100*100的三维坐标,也就是说有100万个坐标点
do i=1,1000000
  a(i)=(call random_number(x),call random_number(y),call random_number(z))
enddo
这样就生成了100万个坐标点,不知道对不对?如果对的话怎样用程序计算某2个坐标点的距离?

8 楼

这有什么区别吗?

表示一个点,与表示一个点的坐标有区别吗???

你如何表示一个点?

难道不是用坐标表示???

难道不是坐标的平方和的根号算距离??

我对你的问题已经理解得越来越模糊了。

9 楼

[quote]这有什么区别吗?

表示一个点,与表示一个点的坐标有区别吗???

你如何表示一个点?

难道不是用坐标表示???

难道不是坐标的平方和的根号算距离??

我对你的问题已经理解得越来越模糊了。

[/quote]
对啊,就是要用程序来产生一组三维坐标,并计算坐标点与坐标点之间的距离,虽然知道是用2点坐标差的平分和的根号来算距离,但是不知道怎么用程序实现。。。

10 楼

貌似可以用这个方法
call random_seed()

do i=1,1000
  a(i)=(call random_number(x),call random_number(y),call random_number(z))
enddo
do i=1, 1000
  do j=i, 1000
  call distance( a(i), a(j))
  end do
end do
subroutine distance (a, b, dis)
implicit none
  real*8 :: a(3), b(3), dis
  
  dis = sqrt ((a(1)- b(1))**2 + (a(2) - b(2))**2 + (a(3)- b(3))**2)
  
end subroutine

我来回复

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