Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2013, 12:21   #1
КРИЖ
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 44
По умолчанию Проблема с присваиванием значения

Столкнулся вот с такой проблемой надо присвоит значение к элементу массива, но при выводе видно что присвоение идет не ко всем элементам.
вот код
Код:
	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();
}
КРИЖ вне форума Ответить с цитированием
Старый 03.10.2013, 12:32   #2
КРИЖ
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 44
По умолчанию

а всё нашел ошибку тупонул ((( стыдно даже
P.S надо все-таки выспаться
КРИЖ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложности с присваиванием zigler Visual C++ 2 10.02.2012 22:09
Проблема с обновлением значения byzyan ASP.NET 1 13.03.2011 20:26
Проблема с присваиванием в формуле motorway Microsoft Office Excel 7 23.07.2009 04:45
проблема с выбором значения ячейки ssh Общие вопросы .NET 0 17.01.2009 00:17