Fortran Coder

查看: 95|回复: 4

[求助] 程序运行错误 求助大神

[复制链接]

4

帖子

1

主题

0

精华

新人

F 币
21 元
贡献
11 点
发表于 2019-7-19 10:15:21 | 显示全部楼层 |阅读模式
C:\Users\ASUS\Desktop\聚宝盆\颗粒布置.png
我是初学者,想计算任意第i行第j列圆盘中心坐标,即D(i,j),半径假设0.5,偶数行有11列,奇数行只有10列,可能问题出在数组上,求大神不吝赐教,万分感谢!
program zuobiao1
    implicit none
    integer(4) ,parameter :: A = 11
    !integer(4) ,parameter :: B = 11
    integer :: D_0(3,A,B)
    integer,dimension(3) :: D(i,j)
    D(i,j) = (/D_0(1,i,j),D_0(2,i,j),D_0(3,i,j)/)
    !integer(4) ,parameter :: C = 10
    !common A,B,C
    integer :: s !方向赋值
    integer :: i !行号赋值
    integer :: j !列号赋值
    real(4) :: X(3,A,B)
   
    do s = 1,3
        !s = s+1
        do i = 1,A
            !i = i+1
            if (mod(i,2) == 0) then
                do j = 1,10
                    !j = j+1
                    X(1,i,j) = j - 0.5
                    X(2,i,j) = (i - 1)*0.866
                    X(3,i,j) = 0
                    if (j>10) exit
                    D_0(1,i,j) = X(1,i,j)
                    D_0(2,i,j) = X(2,i,j)
                    D_0(3,i,j) = X(3,i,j)
                end do
            else
                do j = 1,11
                    !j = j+1
                    X(1,i,j) = j - 1
                    X(2,i,j) = (i - 1)*0.866
                    X(3,i,j) = 0
                    D_0(1,i,j) = X(1,i,j)
                    D_0(2,i,j) = X(2,i,j)
                    D_0(3,i,j) = X(3,i,j)
                end do
            end if
        
        end do
        !X(3,i,j) = 0
    end do
   
    write(*,*) "行号:"
    read(*,*) i
    write(*,*) "列号:"
    read(*,*) j            
    write(*,*)  X(1,i,j)
    write(*,*)  X(2,i,j)
    write(*,*)  X(3,i,j)
    write(*,*)  D(i,j)
    stop
   
   
    end program
回复

使用道具 举报

4

帖子

1

主题

0

精华

新人

F 币
21 元
贡献
11 点
 楼主| 发表于 2019-7-19 10:17:25 | 显示全部楼层

布置

布置

4

帖子

1

主题

0

精华

新人

F 币
21 元
贡献
11 点
 楼主| 发表于 2019-7-19 12:27:30 | 显示全部楼层
最好能设置循环,自动计算每一个圆盘的中心坐标并存储,便于后面直接调用

363

帖子

1

主题

0

精华

宗师

F 币
1917 元
贡献
1255 点
发表于 2019-7-19 16:46:43 | 显示全部楼层
本帖最后由 li913 于 2019-7-19 17:00 编辑

[Fortran] 纯文本查看 复制代码
r=0.5
!第一个圆心位置
if(mod(i,2)==1) then !奇数行
x0=0
y0=0
else 
x0=r
y0=sqrt(3.0)*r
end if 
dy = sqrt(3.0)*r !y方向圆心间距

x = x0 + (j-1)*2*r
y = y0 + (i-1)*dy
你把奇偶行分开算,就容易了。奇数行全是规整的,偶数行也全是规整的。

4

帖子

1

主题

0

精华

新人

F 币
21 元
贡献
11 点
 楼主| 发表于 2019-7-20 00:39:22 | 显示全部楼层
li913 发表于 2019-7-19 16:46
[mw_shl_code=fortran,true]r=0.5
!第一个圆心位置
if(mod(i,2)==1) then !奇数行

谢谢,比较简洁
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-8-21 23:52

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表