Столкнулся вот с такой проблемой надо присвоит значение к элементу массива, но при выводе видно что присвоение идет не ко всем элементам.
вот код
Код:
for(long Q=0;Q<((mks_max-t_rellax)/t_corell);Q++)
{
H_mks[Q]=0;
M_mks[Q]=0;
}
...............................................................................
...............................................................................
if((mks>=t_rellax)&&(mks%t_corell==0))
{
M_mks[(mks_max-t_rellax)/t_corell-mks]+=M()/StartConfigMax;//намагниченость
H_mks[(mks_max-t_rellax)/t_corell-mks]+=H()/StartConfigMax;//энергия
cout<<M_mks[(mks_max-t_rellax)/t_corell-mks]<<" "<<M()<<" "<<mks<<endl;
getchar();
при выводе значений получаю следующие
0 0 490
0,15625 0,16625 560
............................
-7,84591е+298 0,125 910 -почему не присвоил?
0,0937 0,0937 980
0,03125 0,03125 1050
.............................
8,85752е+247 0,03125 1400 -почему не присвоил?
как эту проблему можно решить
вот полный код программы
Код:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <fstream>
#include <iostream>
#include "randomc.h"
#include "mersenne.cpp"
using namespace std;
double T;
long mks_max,StartConfigMax,N,t_rellax=200,t_corell=70;
int S[100][100][100];
int Sosedi (int i,int j,int k)
{
int rez;
if(i==0)
{
rez=S[N-1][j][k];
}
else
{
rez=S[i-1][j][k];
}
if(i==N-1)
{
rez=rez+S[0][j][k];
}
else
{
rez=rez+S[i+1][j][k];
}
if(j==0)
{
rez=rez+S[i][N-1][k];
}
else
{
rez=rez+S[i][j-1][k];
}
if(j==N-1)
{
rez=rez+S[i][0][k];
}
else
{
rez=rez+S[i][j+1][k];
}
if(k==0)
{
rez=S[i][j][N-1];
}
else
{
rez=S[i][j][i-1];
}
if(k==N-1)
{
rez=rez+S[i][j][0];
}
else
{
rez=rez+S[i][j][i+1];
}
return rez;
}
void Initial ( )
{
long i,j,k;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
S[i][j][k]=1;
}
}
}
}
double M( )
{
double rez=0;
for(long i=0;i<N;i++)
{
for(long j=0;j<N;j++)
{
for(long k=0;k<N;k++)
{
rez=rez+S[i][j][k];
}
}
}
rez=rez/(N*N*N);
return abs(rez);
}
double H()
{
double h=0;
for(long i=0;i<N;i++)
{
for(long j=0;j<N;j++)
{
for(long k=0;k<N;k++)
{
h=h-S[i][j][k]*Sosedi(i,j,k);
}
}
}
return h/(8*N*N*N);
}
int main()
{
/*ofstream out("C:\\Users\\Admin\\Desktop\\out_Ising_3D.dat");
if(!out)
{
cout<<"Error opening file";
getchar();
}*/
double R,dE;
long i,j,k,StartConfig,mks;
int S_New;
cout<<"enter T= "<<endl;
cin>>T;
cout<<"enter StartConfigMax= "<<endl;
cin>>StartConfigMax;
cout<<"enter mks_max= "<<endl;
cin>>mks_max;
cout<<"enter N= "<<endl;
cin>>N;
getchar();
double *H_mks=new double[(mks_max-t_rellax)/t_corell];
double *M_mks=new double[(mks_max-t_rellax)/t_corell];
for(long Q=0;Q<((mks_max-t_rellax)/t_corell);Q++)
{
H_mks[Q]=0;
M_mks[Q]=0;
}
CRandomMersenne Mersenne((int)time(0));
for(StartConfig=0;StartConfig<StartConfigMax;StartConfig++)
{
Initial();
cout<<"config "<<StartConfig<<" for T "<<T<<endl;
for(mks=0;mks<mks_max;mks++)
{
Mersenne.RandomInit((int)(time(0)+(StartConfig)+(mks)));
i=Mersenne.IRandomX(0,N-1);
j=Mersenne.IRandomX(0,N-1);
k=Mersenne.IRandomX(0,N-1);
R=Mersenne.IRandomX(0,999)/1000.0;
if(R>0.5)
{
S_New=1;
}
else
{
S_New=-1;
}
dE=S_New*Sosedi(i,j,k);
if(dE<0)
{
S[i][j][k]=S_New;
}
else
{
R=Mersenne.IRandomX(0,1000)/1000;
if(R<exp(-dE/T))
{
S[i][j][k]=S_New;
}
}
if((mks>=t_rellax)&&(mks%t_corell==0))
{
M_mks[(mks_max-t_rellax)/t_corell-mks]+=M()/StartConfigMax;//намагниченость
H_mks[(mks_max-t_rellax)/t_corell-mks]+=H()/StartConfigMax;//энергия
cout<<M_mks[(mks_max-t_rellax)/t_corell-mks]<<" "<<M()<<" "<<mks<<endl;
getchar();
}
}
}
//out.close();
}