Fortran Coder

查看: 10353|回复: 4
打印 上一主题 下一主题

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

[复制链接]

5

帖子

2

主题

0

精华

新人

F 币
28 元
贡献
16 点
跳转到指定楼层
楼主
发表于 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
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

5

帖子

2

主题

0

精华

新人

F 币
28 元
贡献
16 点
沙发
 楼主| 发表于 2019-7-19 10:17:25 | 只看该作者

5

帖子

2

主题

0

精华

新人

F 币
28 元
贡献
16 点
板凳
 楼主| 发表于 2019-7-19 12:27:30 | 只看该作者
最好能设置循环,自动计算每一个圆盘的中心坐标并存储,便于后面直接调用

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
地板
发表于 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
你把奇偶行分开算,就容易了。奇数行全是规整的,偶数行也全是规整的。

5

帖子

2

主题

0

精华

新人

F 币
28 元
贡献
16 点
5#
 楼主| 发表于 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 !奇数行

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

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 10:35

Powered by Tencent X3.4

© 2013-2024 Tencent

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