Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2017, 01:18
mangaka mangaka вне форума
Прохожий
 
Регистрация: 12.01.2017
Сообщения: 2
Версия Delphi: DELPHI7 v7.3
Репутация: 10
Смущение Моделирование динамических режимов ректификационной установки

Кому не сложно, пожалуйста сделайте описание каждой строчки того что происходит в данном коде
Код:
program Project;
{$APPTYPE CONSOLE}
uses
  SysUtils, Windows;
const

  Fr = 500;                                
  xf = 0.6;
  N = 50;
  Nf = 20;
  KPD = 0.45;
  R = 10;
  a = 1.35;
  h = 665;
  rsm = 76;
  rp = 539;
  b1 = 640;
  x0z = 0.23;
  xnp1z = 0.973;
  S = 0.0009;
  E = 0.0001;
  Tmax = 3;
  Hb = 8;
  dh = 0.0025;

var
  x, y, x1, y1: array [0..N+1] of double;
  txt: text;
  D, V, W, L, F_1, xf1, Mcp, G, b2, C, Cz, Lmin, Lmax, dL, T: double;
  i: integer;

procedure STATB06;
var
  Dmin, Dmax, xNp1, yim1ZV: double;
  i: integer;
begin
  x[0] := x0z;
  y[0] := x0z;
  Dmax := Fr;
  Dmin := Fr * (xf - x[0]) / (1 - x[0]);
  repeat
    D := (Dmin + Dmax) / 2;
    W := Fr - D;
    L := R * D;
    V := D + L;
    xNp1 := (Fr * xf - W * x0z) / D;
    x[1] := (V * y[0]+ W*x[0]) / (L + Fr);
    for i := 2 to N+1 do
    begin
      yim1ZV := (a * x[i-1]) / (1 + (a - 1) * x[i-1]);
      y[i-1] := y[i-2] + KPD * (yim1ZV - y[i-2]);
      if i < Nf then
        x[i] := x[i-1] - V *(y[i-2] - y[i-1]) / (L + Fr) { исчерпывающая часть }
      else if i = Nf then
        x[i] := ((L + Fr) * x[i-1] - V * (y[i-2] - y[i-1]) - Fr * xf) / L   { питание }
      else
        x[i] := (V * (y[i-1] - y[i-2])) / L + x[i-1]  { укрепляющая часть }
    end;
    if abs(x[N+1] - xNp1) <= E then break;
    if x[N+1] > xNp1 then Dmax := D else Dmin := D;
  until false;
end;

function f1(x1, x0, y0: double): double; { куб }
begin
  Result := ((L + F_1) * x1 - V * y0 - W * x0) / Hb
end;

function f2(x1, x0, y1, y0: double): double; { исчерпывающая часть }
begin
  Result := ((L + F_1) * (x1 - x0) + V * (y0 - y1)) / Hb
end;

function f3(x1, x0, y1, y0: double): double; { укрепляющая часть }
begin
  Result := (L * (x1 - x0) + V * (y0 - y1)) / Hb
end;

function f4(x1, y0: double): double; { дефлегматор }
begin
  Result := (V * y0 - (L + D) * x1) / Hb
end;

function f5(x1, x0, y1, y0: double): double; { тарелка питания }
begin
  Result := (L * x1 + Fr * xf - (L + Fr) * x0 + V * (y0 - y1)) / Hb
end;

procedure EULER;
var
  i, j: integer;
begin
  for i := 1 to 50 do
  begin
    for j := 0 to N+1 do
    begin   { решение системы дифференциальных уравнений }
      if j = 0 then x1[j] := x1[j] + dh * f1(x1[1], x1[0], y1[0])
      else if j < Nf then x1[j] := x1[j] + dh * f2(x1[j+1], x1[j], y1[j], y1[j-1])
      else if ((j > Nf) and (j < N+1)) then x1[j] := x1[j] + dh * f3(x1[j+1], x1[j], y1[j], y1[j-1])
      else if j = (N+1) then x1[j] := x1[j] + dh * f4(x1[j], y1[j-1])
      else x1[j] := x1[j] + dh * f5(x1[j+1], x1[j], y1[j], y1[j-1])
    end;
    y1[0] := x1[0];
    for j := 1 to N+1 do y1[j] := y1[j-1] + KPD * (a * x1[j] / (1 + (a - 1) * x1[j]) - y1[j-1]);
  end;
end;

begin
  SetConsoleCP(1251);
  SetConsoleOutPutCP(1251);
  assign(txt, 'results.txt');
  rewrite(txt);
  STATB06;
  Mcp := (xf * 72 + (1 - xf) * 86);
  G := (Mcp * V * rsm) / rp;
  b2 := G * h * S;
  Cz := (b1 * Fr + b2) * (x[N+1] - x[0]) / (Fr * (xf - x[0]));
  writeln(txt, 'Статика:');
  writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' Cz = ', Cz:8:3);
  for i := 0 to N do writeln(txt, 'x[',i,'] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
  writeln(txt, 'x[', N+1,'] = ', x[N+1]:6:3);
  Lmin := 0.5 * L;
  Lmax := (0.5 + 1) * L;
  dL := (Lmax - Lmin) * 0.01;
  F_1 := Fr + 0.05 * Fr;
  xf1 := xf + xf * 0.05;
  Mcp := (xf1 * 72 + (1 - xf1) * 86);
  T := 0;
  writeln(txt, 'Динамика:');
  repeat
    L := Lmin;
    repeat
      D := L / R;
      V := L + D;
      W := F_1 - D;
      for i := 0 to N+1 do
      begin
        x1[i] := x[i];
        y1[i] := y[i];
      end;
      EULER;
      G := (Mcp * V * rsm) / rp;
      b2 := G * h * S;
      C := (b1 * F_1 + b2) * (x1[N+1] - x1[0]) / (F_1 * (xf1 - x1[0]));
      if (x1[0] <= x0z) and (x1[N+1] >= xNp1z) and (x1[N+1] <= 1) and (C <= Cz) then break;
      L := L + dL;
    until L > Lmax;
    for i := 0 to N+1 do
    begin
      x[i] := x1[i];
      y[i] := y1[i];
    end;
    writeln(txt, 'T = ', T:0:2, ' x[0] = ', x[0]:0:3, ' x[', N+1,'] = ', x[N+1]:0:3, ' C = ', C:0:3, ' L = ', L:0:3);
    T := T + 0.25;
  until T > Tmax;
  writeln(txt, 'В конце:');
  writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' C = ', C:8:3);
  for i := 0 to N do writeln(txt, 'x[', i, '] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
  writeln(txt, 'x[', N+1, '] = ', x[N+1]:6:3);
  Close(txt);
  writeln('Complete!');
  readln;
end.

lmikle: пользуемся тегами

Последний раз редактировалось lmikle, 12.01.2017 в 01:35.
Ответить с цитированием
  #2  
Старый 12.01.2017, 04:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну и как ты себе это представляешь?
Тут и инициализация данных (для описания которой неплохо было бы представлять работу самого моделируемого процесса), и решение системы дифуров, и вывод результатов.
Ну а тупо описывать, типа "на строчке 128 переменной T присваивается значение 0", особого смысла нет, это и так понятно по коду. А вот нафига присваивается... можнет какая температура или это время процесса... тут физику процесса надо понимать.
Ответить с цитированием
  #3  
Старый 12.01.2017, 13:58
mangaka mangaka вне форума
Прохожий
 
Регистрация: 12.01.2017
Сообщения: 2
Версия Delphi: DELPHI7 v7.3
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну и как ты себе это представляешь?
Тут и инициализация данных (для описания которой неплохо было бы представлять работу самого моделируемого процесса), и решение системы дифуров, и вывод результатов.
Ну а тупо описывать, типа "на строчке 128 переменной T присваивается значение 0", особого смысла нет, это и так понятно по коду. А вот нафига присваивается... можнет какая температура или это время процесса... тут физику процесса надо понимать.
Хотя бы просто описать, что и где присваивается, я в Delphi не смыслю ни чего(
Ответить с цитированием
  #4  
Старый 12.01.2017, 20:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так прочти любую книжку по основам Паскаля. Что бы хотя бы основной синтакс понимать. Если крупными мазками:
1. const (строка 5). Объявление секции констант, т.е. фиксированных значений. Идет присваивание с помощью знака '='. Формат:
<имя_константы> = <значение_константы>;
константы, обычно, в процессе выполнения менять нельзя.
2. var (строка 26). Объявление секции переменных. В данном случае - глобальный, т.е. видимых из любого места программы. Указывается в виде списка имен, далее следует двоеточие, далее - тип переменной (Integer - целые числа, Double - дробные числа, text - специальный тип для вывода в файл). Формат:
<имя_переменной>[, <имя_переменной>, ...] : <тип_данных>;
2.1. Описание массива (строка 27). Массив - это тоже переменная, просто она может хранить не одно значение, а много. Доступ осуществляется по номеру элемента в массиве - индексу. формат:
<имя_массива> : array [<мин_номер>..<макс_номер>] of <тип_данных>;
3. function/procedure - описание подпрограммы. Фактически - создание своего оператора. Отличие - функция возвращает значение, процедура - нет. Т.е. описав функцию в одном месте, потом ее можно вызывать в других местах программы для выполнения указанноых действий. В функции по умолчанию создается специальная переменная Result - значение этой переменной будет передано как возвращаемое из функции.

Все, надоело. Не хочу тут писать учебник по Паскалю.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter