- •Государственный комитет рф по высшему образованию
- •1998 Г.
- •Введение
- •Эскизный проект Постановка задачи Определение понятия модели
- •Требования, предъявляемые к системе экономического планирования.
- •Выбор платформы проектирования и еe обоснование
- •Экономическая модель в системе экономического планирования Структура экономической модели
- •Язык модели
- •Внутренний язык - язык вычислителя UniCalc
- •Константы
- •Переменные
- •Стандартные математические функции
- •Пример формулы на внешнем языке и внутреннем языке.
- •Общая отруктура системы
- •Структуры данных
- •Инфологическая модель базы данных
- •Предметная область
- •Описание объектов
- •Связи между объектами
- •Лингвистическое описание
- •Алгоритмические связи
- •Информационные потребности пользователя
- •Ограничение целостности
- •Даталогическая модель данных
- •Технический проект
- •Конфигурация технических средств
- •Алгоритмы предварительной подготовки данных для расчета экономической модели Общий алгоритм работы программы
- •Алгоритм работы транслятора данных из базы данных в формат вычислительного ядра UniCalc
- •Алгоритм работы транслятора формул из формата макета в формат вычислительного ядра
- •Алгоритм работы блокаS
- •Первоначальные данные о модели
- •Создание структуры модели
- •Файловая структура модели
- •Логическая структура модели
- •Трансляция данных и формул в формат вычислителя
- •Трансляция данных в формат вычислителя
- •Транслятор формул из формата макета в формат вычислителя
- •Структуры и глобальные переменные библиотеки Ftrans32.Dll
- •Экспортируемые функции:
- •Технология программирования с использованием средств быстрой разработки приложений. Введение.
- •Особенности rad–средств.
- •Визуальная компонентность.
- •Многократное использование кода.
- •Создание программ в среде Delphi.
- •Отладка программ.
- •Организационно - экономическая часть Введение
- •Составляющие затрат на разработку программ Kр
- •Затраты на непосредственную разработку кп
- •Факторы кп как объекта проектирования, влияющие на непосредственные затраты при разработке сложных программ.
- •Применение современных методов разработки кп.
- •Факторы оснащенности процесса разработки кп аппаратурными средствами, влияющими на непосредственные затраты при разработке сложных программ.
- •Факторы организации процесса разработки кп, влияющие на непосредственные затраты при создании сложных программ.
- •Затраты на изготовление опытного образца как продукции производственно-технического назначения.
- •Затраты на технологию и программные средства автоматизации разработки кп.
- •Затраты на эвм, используемые для автоматизации разработки данной программы.
- •Расчет затрат на разработку системы моделирования макроэкономики Исходные данные
- •Коэффициенты изменения трудоемкости
- •Расчет непосредственных затрат на разработку
- •Затраты на эвм
- •Производственная и экологическая безопасность Введение.
- •Рабочее место программиста.
- •Вредные производственные факторы и их нейтрализация для создания комфортных условий труда
- •Микроклимат
- •Электрическая опасность.
- •Пожароопасность
- •Электромагнитное излучение.
- •Нерациональное освещение.
- •Психофизиологические факторы.
- •Расчет освещенности на рабочем месте программиста.
- •Выводы.
- •Используемая литература
Логическая структура модели
Дерево модели может включать в себя переменные, подмодели, а также группы из переменных и подмоделей, но на данном этапе развития проекта понятие группы пока не рассматривается. Вообще, под группой переменных или подмоделей понимается совокупность переменных или подмоделей, объединенных каким-либо общим признаком, например, для подмоделей - группа моделей экономики Уральского региона. Также пока не существует модели макроэкономики, которая была бы структурирована достаточным образом, т.е. в нее кроме переменных входила бы хоть одна подмодель. Таким образом, на данном этапе развития проекта имеет смысл говорить о модели, состоящей только из переменных. Программно это выполнено следующим образом: после ввода имени переменных, комментария и индексов, от которых зависит переменная, из таблицы indexes.db с помощью SQL - запроса выбирается информация по индексам, от которых зависит переменная, и, на основании этой информации, формируется таблица для первоначальных значений. Далее, после того, как пользователь ввел начальные значения переменной, заполняются таблицы inter.db, param.db, params.db и var_value.db. Все это делает процедура класса fmVar (описание приведено в приложении «Описание используемых классов» и «Исходные тексты программ»)
Трансляция данных и формул в формат вычислителя
Данный этап является самым интересным с точки зрения алгоритма и реализация, чего нельзя сказать о предыдущих этапах - там были в основном линейные алгоритмы, без ветвлений. Кроме того, здесь рассматривается только преобразования формул из формата макета, поскольку подразумевается, что текст формул пишется сразу на языке вычислителя.
Трансляция данных в формат вычислителя
Алгоритм данного преобразования реализован процедурой класса основного окна программы fmMain (модуль psMain.pas). В процедуру передается структура типа TstringList (массив строк), в которую впоследствии записывается результат - массив строк вида
v[i1,j1]=<value1>;
....
v[iN,jM]=<valueNM>;
где v - некая экономическая переменная, зависящая от двух индексов размерностью соответственно 1..N и 1..M, value1..valueMN - значения переменной в зависимости от индексов.
procedure TfmMain.Variables2Formulas(var L : TStringList);
var
N : longint; // количество индексов у переменной
n1 : longint; // счетчик цикла по индексам
LTmp : TStringList; // рабочая структура TStringList
i,j,c : longint;
fFirst : Boolean; // True, если строка только начала формироваться
s,s1 : String; // рабочие строки
begin
n1:=0;
LTmp:=TstringList.Create;
with TQuery.Create(Self) do begin
DatabaseName:=Model;
SQL.Add('SELECT * FROM InForm;');
Open;
for j:=1 to RecordCount do begin
fFirst:=True; s:=FieldByName('Present').AsString; c:=pos(',',s);
while (fFirst or (c<>0)) do begin
c:=pos(',',s);
if c<>0 then begin
s1:=Copy(s,1,c-1);
s:=Copy(s,c+1,length(s)-c);
end
else s1:=s;
qMain.SQL.Clear;
qMain.SQL.Add('SELECT id,iid_value,num FROM Param WHERE id='+#39
+FieldByName('id').AsString+#39+' AND iid='+#39+s1+#39+' ORDER BY num;');
qMain.Open;
for i:=0 to qMain.RecordCount-1 do begin
if fFirst then LTmp.Add(FieldByName('id_Name').AsString+'['+qMain.FieldByName( 'iid_value').AsString)
else LTmp.Strings[n1+i]:=LTmp.Strings[n1+i]+','+qMain.FieldByName('iid_value').AsString;
qMain.Next;
end;
fFirst:=False;
end;
qSec.SQL.Clear;
qSec.SQL.Add('SELECT id_value,num FROM Var_value WHERE id='+#39+qMain.FieldByName('id').AsString+#39
+' AND ver=’+IntToStr(Version)+’ ORDER BY num;');
qSec.Open;
for i:=0 to qSec.RecordCount-1 do begin
if qSec.FieldByName('id_value').AsString='' then LTmp.Strings[n1+i]:=''
else LTmp.Strings[n1+i]:=LTmp.Strings[n1+i]+']='+qSec.FieldByName('id_value').AsString+';';
qSec.Next;
end;
qSec.Close;
Next;
n1:=LTmp.Count;
end
Close;
Free;
end;
L.AddStrings(LTmp);
LTmp.Free;
end;