Тема: Хімічне моделювання на С++
Доброго ранку!
Морочу собі голову вже понад 2 місяці одним питанням.
Хочу створити програму, яка б могла моделювати хімічні процеси на С++, самостійним ходом і без допомоги програміста. Тобто, програма після запуску має згенерувати кілька мільйонів моделей атомів і ці атоми мають між собою повзаємодіяти і на виході має бути каша з різних речовин. Але суть в тому, що всі ці речовини мають бути існуючими.
З мене хімік поганий, до речі. Ну і фізик теж. І програміст теж.
Вожуся вже 2 місяці. У вільний час думаю, як його зробити, але не знаю.
Тому хочу просити допомоги у тих, кому це питання може теж цікаве.
Я цю програму не знаю навіть як почати, хоч вона і проста, а тому код надавати немає ніякого сенсу.
Чисто символічно,
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string>
#include <math.h>
#include <windows.h>
using namespace std;
struct element
{
int protons;//назва елементу залежить тільки від протонів, а від нейтронів задежить ізотоп
string name;
bool initb;
int init (int p, string nm)
{
if(initb==true) return 1;
protons=p;
name=nm;
initb=1;
}
};
struct isotop
{
element e;
int neutrons;
bool initb;
int init (element el, int n)
{
if(initb==true) return 1;
e.init(el.protons, el.name);
neutrons=n;
initb=1;
}
};
class Atom
{
private:
element e;//оригінальний елемент
public:
isotop *ist;//масив похідних
int el_ist;//кількість елементів в масиві ist
int electrons;//масив електронів.
int is_id=0;//використовуваний на даний момент ізотоп з масиву ist
void gen(int el)
{
ist=new isotop[el];
for (int i=0; i<el; i++) ist[i].init(e, i+1);//кількість нейтронів дорівнює кількості елементів
el_ist=el;
}
void set_stable(int neutrons)//установка стабільного ізотопа
{
is_id=neutrons-1;
}
void init(int protons, int els)
{
string name;
switch(protons)
{
case 1: name="H"; break;
case 2: name="He"; break;
case 3: name="Li"; break;
// і так далі
}
e.init(protons, name);
gen(els);
return;
}
};
Atom* atoms;
void randgen(int el)
{
atoms=new Atom[el];
int rand_protons;
for (int i=0; i<el; i++) {
rand_protons=rand()%100;
atoms[i].init(rand_protons, 40);//40 ізотопів на кожного, з запасом
switch(rand_protons)//вибираємо стабільні по таблиці Менделєєва
{
case 1: atoms[i].set_stable(1); break;
case 2: atoms[i].set_stable(2); break;
case 14: atoms[i].set_stable(15); break; // хоча і 14 і 15 є стабільними
// і так далі
}
}
void atom_connect(int source, int dest)
{
atoms[dest].try_connect(source);//та функція, якої немає.
}
int main()
{
randgen(1024*1024*8);
double i=0;
while(true) {
atom_connect(rand()%1024*1024*8, rand()%1024*1024*8);
i++;
if (i>1000*1000*1000*1000) break;
}
print_result();//функція, якої немає
return 0;
}
Проблема скоріше не у С++. Я не можу зрозуміти закономірність приєднання одних атомів до інших. Як програма може спрогнозувати, що один атом не може під'єднатися до іншого? От головне питання.