24小时热门版块排行榜    

查看: 897  |  回复: 2

_yixiao

铁虫 (小有名气)

[交流] 【求助】一个fortran程序转换为VC++ 程序 已有2人参与

这个一个关于建立体心立方结构的小程序,用fortran编的,现在想用VC++ 6.0编写,可是我编写后(我没用动态数组,这个应该问题不大吧?)能够编译,但是运行不出结果,不晓得哪有出错
麻烦各位大侠帮忙看看,能不能编写看看。。。或者看看我编的哪错了。。。十分感谢!

原fortran程序:

program structure

implicit none
integer ::  i,ix,iy,iz,ncellx,ncelly,ncellz,iatoms,natoms,ibas  !整数
real*8  ::  xunit(2),yunit(2),zunit(2),a      !三个一维的实数数组
real*8,allocatable,dimension(  :: xbas,ybas,zbas  !定义三个一维动态数组

a=2.8664d0  ! Fe的晶格常数

! 单胞原子坐标
xunit(1)=0.0d0
yunit(1)=0.0d0   
zunit(1)=0.0d0
xunit(2)=0.50d0
yunit(2)=0.50d0
zunit(2)=0.50d0

! 在xyz方向重复次数
write(*,*) 'Numbers of unit cells in x,y,z?'
read (*,*) ncellx, ncelly, ncellz


iatoms=0
natoms=2 * ncellx * ncelly * ncellz
allocate(xbas(natoms))   !给动态数组分配内存
allocate(ybas(natoms))
allocate(zbas(natoms))

        do ix=1,ncellx
      do iy=1,ncelly
        do iz=1,ncellz
          do ibas=1,2
        iatoms=iatoms+1
        xbas(iatoms)=(float(ix-1)+xunit(ibas))*a
        ybas(iatoms)=(float(iy-1)+yunit(ibas))*a
        zbas(iatoms)=(float(iz-1)+zunit(ibas))*a
         enddo
        enddo
      enddo
    enddo

!  输出一个xyz文件
open(11,file='Fe.xyz',status='new')

do i=1,iatoms
write(11,10)i,xbas(i),ybas(i),zbas(i)
enddo

10     format(i6,1x,7(f10.5,1x),4(i3,1x))

end program


我用VC++ 6.0改的程序:

void CBCC_CrystalDlg::OnCalculate()
{
        // TODO: Add your control notification handler code here

        FILE * fileFe_xyz = fopen("Fe_xyz.txt", "w+";
        fprintf(fileFe_xyz, "i  xbas  ybas  zbas\n";


        
        a=2.8664;
        xunit[0]=0.0;
        yunit[0]=0.0;
        zunit[0]=0.0;
        xunit[1]=0.50;
        yunit[1]=0.50;
        zunit[1]=0.50;

        ncellx=M;
        ncelly=M;
        ncellz=M;

        iatoms=0;
        natoms=2*ncellx*ncelly*ncellz;

        for(int i=0;i         {
           xbas=0;
               ybas=0;
           zbas=0;
        }


        for(ix=1;i<=ncellx;ix++)
        {
           for(iy=1;iy<=ncelly;iy++)
           {
              for(iz=1;iz<=ncellz;iz++)
              {
                 for(ibas=0;ibas<2;ibas++)
                 {
                   xbas[iatoms]=(float(ix-1)+xunit[ibas])*a;
                   ybas[iatoms]=(float(iy-1)+yunit[ibas])*a;
                   zbas[iatoms]=(float(iz-1)+zunit[ibas])*a;
                   iatoms=iatoms+1;
                 }
              }
           }
        }

        
        for(i=0;i         {
           fprintf(fileFe_xyz, "%6d    %10.5f    %10.5f    %10.5f\n", i,xbas,ybas,zbas);

        }

        fclose(fileFe_xyz);

        
}
回复此楼
信仰我所必须相信的
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

★ ★
_yixiao(金币+10):谢谢啦,后来发现错误所在了,谢谢你的关注和意见,谢谢! 2010-06-05 15:19:38
余泽成(金币+2):辛苦! 2010-06-23 22:18:18
1.楼主说的运行不出结果是什么意思?那运行以后是什么现象?这个一定要说清楚的。否则就像去看病,只说医生我病了,不说有什么症状。
2.楼主VC6的代码只贴了一个函数,变量声明没看到在哪里。
3.貌似楼主用了对话框类,如果是MFC的话写文件建议用CArchieve类,或者CFile类。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
2楼2010-06-04 10:30:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

stonesu

铁虫 (小有名气)


余泽成(金币+1):谢谢参与应助! 2010-06-23 22:18:31
_yixiao(金币+20):嘿嘿没想到还真有人发现这个错了,谢谢了,金币送你了 2010-06-26 03:29:54
for(ix=1;i<=ncellx;ix++)
把i改为ix应该就可以了……
3楼2010-06-23 18:29:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 _yixiao 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见