Главная страница
Навигация по странице:

  • Приложение А. Реализация алгоритма, разработанного в Pascal

  • Procedure

  • While

  • Взаимодействие молекулы газа с центром рассеяния.(Программа и описание). Взаимодействие молекулы газа с центром рассеяния.(Программа и оп. Постановка задачи и описание алгоритма


    Скачать 264.21 Kb.
    НазваниеПостановка задачи и описание алгоритма
    АнкорВзаимодействие молекулы газа с центром рассеяния.(Программа и описание
    Дата06.12.2019
    Размер264.21 Kb.
    Формат файлаdocx
    Имя файлаВзаимодействие молекулы газа с центром рассеяния.(Программа и оп.docx
    ТипИсследование
    #98873
    страница3 из 3
    1   2   3

    Блок-схема алгоритма на языке Pascal











    Приложение А.

    Реализация алгоритма, разработанного в Pascal, производящего расчет траектории частицы, движущейся как вдоль прямой навстречу неподвижному центру рассеяния, так и прямой параллельной заданному центру и взаимодействующей с ним посредством потенциала Леннард-Джонса.

    type

    vector = class

    public

    x1 : real;

    y1 :real;

    /// Складывает основной вектор с вектором Х

    function sumvector ( x : vector ) : vector;

    var a: vector := new vector (0,0);

    Begin

    a.x1:=x1+x.x1;

    a.y1:=y1+x.y1;

    Sumvector:=a;

    end;

    /// Строит вектор силы f из подвижной частицы к началу координат

    Procedure buildvector (f : real; k : vector);

    var

    a : vector := new vector (0,0);

    h :real;

    Begin

    h:=f/k.lengthvector(0,0);

    x1:=k.x1*(h);

    y1:=k.y1*(h);

    end;

    /// Длина вектора

    Function lengthvector (x , y : real ) : real;

    Begin

    lengthvector:=sqrt( sqr(x1 - x)+sqr(y1 - y)) ;

    end;

    /// Произведение векторов

    Function multvector(k : real) : vector;

    var

    a : vector := new vector (0,0);

    Begin

    a.x1:=x1*k;

    a.y1:=y1*k;

    multvector:=a;

    end;

    constructor create(x,y : real);

    Begin

    x1:=x;

    y1:=y;

    end;

    end;

    var

    f2 , f21, f22 : text;

    dt , m1,m2 , r , f1 : real;

    p: integer;

    crd1, crd2, v1, v2, a1, a2, f: vector ; // crd - радиусвектор (положение ча-стицы)

    const

    Put1 = 'Запись.txt';

    Put2 = 'Координаты первой частицы.txt';

    Put3 = 'Координаты второй частицы.txt';

    ///вычисляется сила

    procedure force(r: real; var f:real);

    var

    A,B : real;

    begin

    A:=0.25;

    B:=1;

    f := 24*a*power(b,6)*power(r,-7)*(2*power(b/r,6)-1);

    //b-sigma; a-epsilon;

    end;

    Begin

    Assign(f2,put1);

    Reset(f2);

    crd1 := new vector (0,0);

    v1 := new vector (0,0);

    a1 := new vector (0,0);

    f:= new vector (0,0);

    crd2 := new vector (0,0);

    v2 := new vector (0,0);

    a2 := new vector (0,0);

    dt:=0.00001;

    m1:=1;

    m2:=1;

    readln(f2, crd1.x1, crd1.y1, crd2.x1, crd2.y1, v1.x1, v1.y1, v2.x1, v2.y1);

    Close(f2);

    Assign(f2,put2);

    Assign(f21,put3);

    Rewrite(f2);

    Rewrite(f21);

    Writeln(f2,'x1 y1');

    Writeln(f21,'x2 y2');

    Writeln(f2,crd1.x1,' ',crd1.y1);

    Writeln(f21,crd2.x1,' ',crd2.y1);

    While crd1.lengthvector(crd2.x1,crd2.y1) <3.5 do

    begin

    force(crd1.lengthvector(crd2.x1,crd2.y1),f1);

    f.buildvector(f1,crd2.sumvector(crd1.multvector(-1)));

    a1:=f.multvector(-1/m1);

    a2:=f.multvector(1/m2);

    crd1:=crd1.sumvector(v1.multvector(dt).sumvector(a1.multvector(sqr(dt)/2)));

    v1:=v1.sumvector(a1.multvector(dt));

    crd2:=crd2;

    v2:=v2;

    p:=p+1;

    if p*dt>=100 then break;

    if p mod 10000 =0 then

    begin

    Writeln(f2,crd1.x1,' ',crd1.y1);

    Writeln(f21,crd2.x1,' ',crd2.y1);

    end;

    end;

    Close(f2);

    Close(f21);

    end.
    1   2   3


    написать администратору сайта